mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-24 12:45:56 +01:00
Starting the DDHMC filter. This will be seriously subject to tuning as force in
Omega and force in Omega bar appears to have different structure
This commit is contained in:
parent
5b52f29b2f
commit
def51267e9
@ -28,6 +28,7 @@ directory
|
|||||||
*************************************************************************************/
|
*************************************************************************************/
|
||||||
/* END LEGAL */
|
/* END LEGAL */
|
||||||
|
|
||||||
|
NAMESPACE_BEGIN(Grid);
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// DDHMC filter with sub-block size B[mu]
|
// DDHMC filter with sub-block size B[mu]
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
@ -43,37 +44,60 @@ struct DDHMCFilter: public MomentumFilterBase<MomentaField>
|
|||||||
typedef Lattice<ScalarType> LatticeScalarType;
|
typedef Lattice<ScalarType> LatticeScalarType;
|
||||||
|
|
||||||
Coordinate Block;
|
Coordinate Block;
|
||||||
|
int Width;
|
||||||
|
|
||||||
// Could also zero links in plane like Luscher advocates.
|
// Could also zero links in plane like Luscher advocates.
|
||||||
|
|
||||||
DDHMCFilter(const Coordinate &_Block): Block(_Block){}
|
DDHMCFilter(const Coordinate &_Block,int _Width): Block(_Block), Width(_Width)
|
||||||
|
{
|
||||||
|
assert( (Width==0) || (Width==1) || (Width==2) );
|
||||||
|
}
|
||||||
|
|
||||||
void applyFilter(MomentaField &P) const override
|
void applyFilter(MomentaField &P) const override
|
||||||
{
|
{
|
||||||
GridBase *grid = P.Grid();
|
GridBase *grid = P.Grid();
|
||||||
LatticeScalarType mask_mu(grid);
|
|
||||||
LatticeLorentzScalarType mask(grid);
|
LatticeColourMatrix zz(grid); zz = Zero();
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// Zero strictly links crossing between domains
|
// Zero strictly links crossing between domains
|
||||||
// Luscher also zeroes links in plane of domain boundaries
|
// Luscher also zeroes links in plane of domain boundaries
|
||||||
// Keeping interior only. This prevents force from plaquettes
|
// Keeping interior only. This prevents force from plaquettes
|
||||||
// crossing domains and keeps whole MD trajectory local.
|
// crossing domains and keeps whole MD trajectory local.
|
||||||
// Step further than I want to go.
|
// This is the case Width=1.
|
||||||
|
// Width = 2 should also decouple rectangle force.
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
ScalarType zz = scalar_type(0.0);
|
Coordinate Global=grid->GlobalDimensions();
|
||||||
ScalarType one= scalar_type(1.0);
|
|
||||||
|
|
||||||
LatticeInteger coor(grid);
|
LatticeInteger coor(grid);
|
||||||
for(int mu=0;mu<Nd;mu++) {
|
for(int mu=0;mu<Nd;mu++) {
|
||||||
|
if ( Block[mu] <= Global[mu] ) {
|
||||||
|
|
||||||
LatticeCoordinate(coor,mu);
|
LatticeCoordinate(coor,mu);
|
||||||
|
auto P_mu = PeekIndex<LorentzIndex>(P, mu);
|
||||||
|
P_mu = where(mod(coor,Block[mu])==Integer(Block[mu]-1),zz,P_mu);
|
||||||
|
/* if(Width>=2) {
|
||||||
|
P_mu = where(mod(coor,Block[mu])==Integer(0),zz,P_mu);
|
||||||
|
P_mu = where(mod(coor,Block[mu])==Integer(Block[mu]-2),zz,P_mu);
|
||||||
|
}*/
|
||||||
|
PokeIndex<LorentzIndex>(P, P_mu, mu);
|
||||||
|
|
||||||
mask_mu = where(mod(coor,Block[mu])==Block[mu]-1,zz,one);
|
for(int nu=0;nu<Nd;nu++){
|
||||||
|
if ( (mu!=nu) && Block[mu] <= Global[mu]){
|
||||||
PokeIndex<LorentzIndex>(mask, mask_mu, mu);
|
auto P_nu = PeekIndex<LorentzIndex>(P, nu);
|
||||||
|
if ( Width>=1 ){
|
||||||
|
P_nu = where(mod(coor,Block[mu])==Integer(Block[mu]-1),zz,P_nu);
|
||||||
|
P_nu = where(mod(coor,Block[mu])==Integer(0) ,zz,P_nu);
|
||||||
|
}
|
||||||
|
/* if ( Width>=2 ){
|
||||||
|
P_nu = where(mod(coor,Block[mu])==Integer(Block[mu]-2),zz,P_nu);
|
||||||
|
P_nu = where(mod(coor,Block[mu])==Integer(1) ,zz,P_nu);
|
||||||
|
}*/
|
||||||
|
PokeIndex<LorentzIndex>(P, P_nu, nu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user