mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-15 00:20:45 +01:00
Changing boundary phase to be always double
This commit is contained in:
parent
118746b1e9
commit
751fae9f0d
@ -117,7 +117,7 @@ void TDWF<FImpl>::setup(void)
|
|||||||
auto &grb4 = *env().getRbGrid();
|
auto &grb4 = *env().getRbGrid();
|
||||||
auto &g5 = *env().getGrid(par().Ls);
|
auto &g5 = *env().getGrid(par().Ls);
|
||||||
auto &grb5 = *env().getRbGrid(par().Ls);
|
auto &grb5 = *env().getRbGrid(par().Ls);
|
||||||
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
std::vector<ComplexD> boundary = strToVec<ComplexD>(par().boundary);
|
||||||
typename DomainWallFermion<FImpl>::ImplParams implParams(boundary);
|
typename DomainWallFermion<FImpl>::ImplParams implParams(boundary);
|
||||||
envCreateDerived(FMat, DomainWallFermion<FImpl>, getName(), par().Ls, U, g5,
|
envCreateDerived(FMat, DomainWallFermion<FImpl>, getName(), par().Ls, U, g5,
|
||||||
grb5, g4, grb4, par().mass, par().M5, implParams);
|
grb5, g4, grb4, par().mass, par().M5, implParams);
|
||||||
|
@ -110,7 +110,7 @@ void TWilson<FImpl>::setup(void)
|
|||||||
auto &U = envGet(LatticeGaugeField, par().gauge);
|
auto &U = envGet(LatticeGaugeField, par().gauge);
|
||||||
auto &grid = *env().getGrid();
|
auto &grid = *env().getGrid();
|
||||||
auto &gridRb = *env().getRbGrid();
|
auto &gridRb = *env().getRbGrid();
|
||||||
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
std::vector<ComplexD> boundary = strToVec<ComplexD>(par().boundary);
|
||||||
typename WilsonFermion<FImpl>::ImplParams implParams(boundary);
|
typename WilsonFermion<FImpl>::ImplParams implParams(boundary);
|
||||||
envCreateDerived(FMat, WilsonFermion<FImpl>, getName(), 1, U, grid, gridRb,
|
envCreateDerived(FMat, WilsonFermion<FImpl>, getName(), 1, U, grid, gridRb,
|
||||||
par().mass, implParams);
|
par().mass, implParams);
|
||||||
|
@ -121,7 +121,7 @@ void TWilsonClover<FImpl>::setup(void)
|
|||||||
auto &U = envGet(LatticeGaugeField, par().gauge);
|
auto &U = envGet(LatticeGaugeField, par().gauge);
|
||||||
auto &grid = *env().getGrid();
|
auto &grid = *env().getGrid();
|
||||||
auto &gridRb = *env().getRbGrid();
|
auto &gridRb = *env().getRbGrid();
|
||||||
std::vector<Complex> boundary = strToVec<Complex>(par().boundary);
|
std::vector<ComplexD> boundary = strToVec<ComplexD>(par().boundary);
|
||||||
typename WilsonCloverFermion<FImpl>::ImplParams implParams(boundary);
|
typename WilsonCloverFermion<FImpl>::ImplParams implParams(boundary);
|
||||||
envCreateDerived(FMat, WilsonCloverFermion<FImpl>, getName(), 1, U, grid, gridRb, par().mass,
|
envCreateDerived(FMat, WilsonCloverFermion<FImpl>, getName(), 1, U, grid, gridRb, par().mass,
|
||||||
par().csw_r,
|
par().csw_r,
|
||||||
|
@ -44,11 +44,11 @@ namespace QCD {
|
|||||||
|
|
||||||
struct WilsonImplParams {
|
struct WilsonImplParams {
|
||||||
bool overlapCommsCompute;
|
bool overlapCommsCompute;
|
||||||
std::vector<Complex> boundary_phases;
|
std::vector<ComplexD> boundary_phases;
|
||||||
WilsonImplParams() : overlapCommsCompute(false) {
|
WilsonImplParams() : overlapCommsCompute(false) {
|
||||||
boundary_phases.resize(Nd, 1.0);
|
boundary_phases.resize(Nd, 1.0);
|
||||||
};
|
};
|
||||||
WilsonImplParams(const std::vector<Complex> phi)
|
WilsonImplParams(const std::vector<ComplexD> phi)
|
||||||
: boundary_phases(phi), overlapCommsCompute(false) {}
|
: boundary_phases(phi), overlapCommsCompute(false) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ int main (int argc, char ** argv)
|
|||||||
typedef typename MobiusFermionR::ComplexField ComplexField;
|
typedef typename MobiusFermionR::ComplexField ComplexField;
|
||||||
typename MobiusFermionR::ImplParams params;
|
typename MobiusFermionR::ImplParams params;
|
||||||
|
|
||||||
const int Ls=24;
|
const int Ls=12;
|
||||||
|
|
||||||
Grid_init(&argc,&argv);
|
Grid_init(&argc,&argv);
|
||||||
|
|
||||||
@ -49,6 +49,10 @@ int main (int argc, char ** argv)
|
|||||||
std::vector<int> split_coor (mpi_layout.size(),1);
|
std::vector<int> split_coor (mpi_layout.size(),1);
|
||||||
std::vector<int> split_dim (mpi_layout.size(),1);
|
std::vector<int> split_dim (mpi_layout.size(),1);
|
||||||
|
|
||||||
|
std::vector<ComplexD> boundary_phases(Nd,1.);
|
||||||
|
boundary_phases[Nd-1]=-1.;
|
||||||
|
params.boundary_phases = boundary_phases;
|
||||||
|
|
||||||
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(),
|
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(),
|
||||||
GridDefaultSimd(Nd,vComplex::Nsimd()),
|
GridDefaultSimd(Nd,vComplex::Nsimd()),
|
||||||
GridDefaultMpi());
|
GridDefaultMpi());
|
||||||
@ -139,7 +143,7 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
LatticeGaugeField Umu(UGrid);
|
LatticeGaugeField Umu(UGrid);
|
||||||
FieldMetaData header;
|
FieldMetaData header;
|
||||||
std::string file("./lat.in.24ID");
|
std::string file("./lat.in.32IDfine");
|
||||||
SU3::ColdConfiguration(Umu);
|
SU3::ColdConfiguration(Umu);
|
||||||
std::cout << GridLogMessage << "Intialised the COLD Gauge Field"<<std::endl;
|
std::cout << GridLogMessage << "Intialised the COLD Gauge Field"<<std::endl;
|
||||||
if(1) {
|
if(1) {
|
||||||
@ -203,14 +207,14 @@ int main (int argc, char ** argv)
|
|||||||
// Set up N-solvers as trivially parallel
|
// Set up N-solvers as trivially parallel
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
std::cout << GridLogMessage << " Building the solvers"<<std::endl;
|
std::cout << GridLogMessage << " Building the solvers"<<std::endl;
|
||||||
// RealD mass=0.00107;
|
RealD mass=0.00107;
|
||||||
RealD mass=0.01;
|
// RealD mass=0.01;
|
||||||
RealD M5=1.8;
|
RealD M5=1.8;
|
||||||
RealD mobius_factor=4;
|
RealD mobius_factor=32./12.;
|
||||||
RealD mobius_b=0.5*(mobius_factor+1.);
|
RealD mobius_b=0.5*(mobius_factor+1.);
|
||||||
RealD mobius_c=0.5*(mobius_factor-1.);
|
RealD mobius_c=0.5*(mobius_factor-1.);
|
||||||
MobiusFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,mobius_b,mobius_c);
|
MobiusFermionR Dchk(Umu,*FGrid,*FrbGrid,*UGrid,*rbGrid,mass,M5,mobius_b,mobius_c,params);
|
||||||
MobiusFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5,mobius_b,mobius_c);
|
MobiusFermionR Ddwf(s_Umu,*SFGrid,*SFrbGrid,*SGrid,*SrbGrid,mass,M5,mobius_b,mobius_c,params);
|
||||||
|
|
||||||
std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
|
std::cout << GridLogMessage << "****************************************************************** "<<std::endl;
|
||||||
std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
|
std::cout << GridLogMessage << " Calling DWF CG "<<std::endl;
|
||||||
@ -218,8 +222,9 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
MdagMLinearOperator<MobiusFermionR,FermionField> HermOp(Ddwf);
|
MdagMLinearOperator<MobiusFermionR,FermionField> HermOp(Ddwf);
|
||||||
MdagMLinearOperator<MobiusFermionR,FermionField> HermOpCk(Dchk);
|
MdagMLinearOperator<MobiusFermionR,FermionField> HermOpCk(Dchk);
|
||||||
ConjugateGradient<FermionField> CG((stp),10000);
|
ConjugateGradient<FermionField> CG((stp),100000);
|
||||||
s_res = zero;
|
s_res = zero;
|
||||||
|
if(0){
|
||||||
// CG(HermOp,s_src,s_res);
|
// CG(HermOp,s_src,s_res);
|
||||||
|
|
||||||
std::cout << GridLogMessage << " split residual norm "<<norm2(s_res)<<std::endl;
|
std::cout << GridLogMessage << " split residual norm "<<norm2(s_res)<<std::endl;
|
||||||
@ -247,17 +252,21 @@ int main (int argc, char ** argv)
|
|||||||
HermOpCk.HermOp(result[n],tmp); tmp = tmp - src[n];
|
HermOpCk.HermOp(result[n],tmp); tmp = tmp - src[n];
|
||||||
std::cout << GridLogMessage<<" resid["<<n<<"] "<< norm2(tmp)/norm2(src[n])<<std::endl;
|
std::cout << GridLogMessage<<" resid["<<n<<"] "<< norm2(tmp)/norm2(src[n])<<std::endl;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// faking enlarged/cooperative CG
|
// faking enlarged/cooperative CG
|
||||||
|
if(0){
|
||||||
|
std::cout << GridLogMessage<<" Trying blocking enlarged CG" <<std::endl;
|
||||||
assert(me < nrhs);
|
assert(me < nrhs);
|
||||||
if (me>0) src[me] = src[0];
|
if (me>0) src[me] = src[0];
|
||||||
for(int s=0;s<nrhs;s++){
|
for(int s=0;s<nrhs;s++){
|
||||||
result[s]=zero;
|
result[s]=zero;
|
||||||
if(s!=me) src[s] = zero;
|
if(s!=me) src[s] = zero;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int blockDim = 0;//not used for BlockCGVec
|
int blockDim = 0;//not used for BlockCGVec
|
||||||
BlockConjugateGradient<FermionField> BCGV (BlockCGVec,blockDim,stp,10000);
|
BlockConjugateGradient<FermionField> BCGV (BlockCGVec,blockDim,stp,100000);
|
||||||
BCGV.PrintInterval=10;
|
BCGV.PrintInterval=10;
|
||||||
{
|
{
|
||||||
BCGV(HermOpCk,src,result);
|
BCGV(HermOpCk,src,result);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user