mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
Seqeuential fix
This commit is contained in:
parent
c2c3cad20d
commit
29ae5615c0
@ -57,18 +57,34 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
|
std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
|
||||||
|
|
||||||
const int Ls=10;
|
const int Ls=10;
|
||||||
std::vector < ComplexD > omegas(10,ComplexD(1.0,0.0));
|
std::vector < ComplexD > omegas;
|
||||||
std::vector < ComplexD > omegasrev(10,ComplexD(1.0,0.0));
|
std::vector < ComplexD > omegasrev(Ls);
|
||||||
omegas.push_back( std::complex<double>(0.0686324988446592,0.0550658530827402) );
|
|
||||||
omegas.push_back( std::complex<double>(0.0686324988446592,-0.0550658530827402) );
|
#if 1
|
||||||
omegas.push_back( std::complex<double>(1.45806438985048,-0) );
|
omegas.push_back( std::complex<double>(1.45806438985048,-0) );
|
||||||
omegas.push_back( std::complex<double>(0.830951166685955,-0) );
|
omegas.push_back( std::complex<double>(0.830951166685955,-0) );
|
||||||
omegas.push_back( std::complex<double>(0.341985020453729,-0) );
|
omegas.push_back( std::complex<double>(0.341985020453729,-0) );
|
||||||
omegas.push_back( std::complex<double>(0.126074299502912,-0) );
|
omegas.push_back( std::complex<double>(0.126074299502912,-0) );
|
||||||
|
// omegas.push_back( std::complex<double>(0.0686324988446592,0.0550658530827402) );
|
||||||
|
// omegas.push_back( std::complex<double>(0.0686324988446592,-0.0550658530827402) );
|
||||||
|
omegas.push_back( std::complex<double>(0.0686324988446592,0));
|
||||||
|
omegas.push_back( std::complex<double>(0.0686324988446592,0));
|
||||||
omegas.push_back( std::complex<double>(0.0990136651962626,-0) );
|
omegas.push_back( std::complex<double>(0.0990136651962626,-0) );
|
||||||
omegas.push_back( std::complex<double>(0.21137902619029,-0) );
|
omegas.push_back( std::complex<double>(0.21137902619029,-0) );
|
||||||
omegas.push_back( std::complex<double>(0.542352409156791,-0) );
|
omegas.push_back( std::complex<double>(0.542352409156791,-0) );
|
||||||
omegas.push_back( std::complex<double>(1.18231318389348,-0) );
|
omegas.push_back( std::complex<double>(1.18231318389348,-0) );
|
||||||
|
#else
|
||||||
|
omegas.push_back( std::complex<double>(0.8,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.1,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.2,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.3,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(0.5,0.2));
|
||||||
|
omegas.push_back( std::complex<double>(0.5,-0.2));
|
||||||
|
omegas.push_back( std::complex<double>(0.8,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.1,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.2,0.0));
|
||||||
|
omegas.push_back( std::complex<double>(1.3,0.0));
|
||||||
|
#endif
|
||||||
|
|
||||||
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(),
|
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(),
|
||||||
GridDefaultSimd(Nd,vComplex::Nsimd()),
|
GridDefaultSimd(Nd,vComplex::Nsimd()),
|
||||||
@ -92,10 +108,10 @@ int main (int argc, char ** argv)
|
|||||||
GridParallelRNG RNG4(UGrid); RNG4.SeedFixedIntegers(seeds4);
|
GridParallelRNG RNG4(UGrid); RNG4.SeedFixedIntegers(seeds4);
|
||||||
|
|
||||||
LatticeGaugeField Umu(UGrid);
|
LatticeGaugeField Umu(UGrid);
|
||||||
// SU3::ColdConfiguration(Umu);
|
SU3::ColdConfiguration(Umu);
|
||||||
SU3::HotConfiguration(RNG4,Umu);
|
// SU3::HotConfiguration(RNG4,Umu);
|
||||||
|
|
||||||
RealD mass=0.2;
|
RealD mass=0.3;
|
||||||
RealD M5 =1.0;
|
RealD M5 =1.0;
|
||||||
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
||||||
std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
|
std::cout<<GridLogMessage <<"DomainWallFermion test"<<std::endl;
|
||||||
@ -105,7 +121,7 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
RealD b=1.5;// Scale factor b+c=2, b-c=1
|
RealD b=1.5;// Scale factor b+c=2, b-c=1
|
||||||
RealD c=0.5;
|
RealD c=0.5;
|
||||||
std::vector<ComplexD> gamma(Ls,ComplexD(1.0,0.0));
|
// std::vector<ComplexD> gamma(Ls,ComplexD(1.0,0.0));
|
||||||
|
|
||||||
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
||||||
std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
|
std::cout<<GridLogMessage <<"MobiusFermion test"<<std::endl;
|
||||||
@ -119,12 +135,11 @@ int main (int argc, char ** argv)
|
|||||||
ScaledShamirFermionR Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
|
ScaledShamirFermionR Dsham(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,2.0);
|
||||||
TestConserved<ScaledShamirFermionR>(Dsham,Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
|
TestConserved<ScaledShamirFermionR>(Dsham,Dsham,Umu,FGrid,FrbGrid,UGrid,UrbGrid,mass,M5,&RNG4,&RNG5);
|
||||||
|
|
||||||
|
|
||||||
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
||||||
std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
|
std::cout<<GridLogMessage <<"ZMobiusFermion test"<<std::endl;
|
||||||
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
std::cout<<GridLogMessage <<"======================"<<std::endl;
|
||||||
|
for(int s=0;s<Ls;s++) omegasrev[s]=conjugate(omegas[Ls-1-s]);
|
||||||
for(int s=0;s<Ls;s++) omegasrev[s]=omegas[Ls-1-s];
|
// for(int s=0;s<Ls;s++) omegasrev[s]=omegas[Ls-1-s];
|
||||||
ZMobiusFermionR ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegas,b,c);
|
ZMobiusFermionR ZDmob(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegas,b,c);
|
||||||
ZMobiusFermionR ZDmobrev(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegasrev,b,c);
|
ZMobiusFermionR ZDmobrev(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,omegasrev,b,c);
|
||||||
|
|
||||||
@ -136,13 +151,14 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
|
|
||||||
template<class Action>
|
template<class Action>
|
||||||
void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
void TestConserved(Action & Ddwf,
|
||||||
LatticeGaugeField &Umu,
|
Action & Ddwfrev,
|
||||||
GridCartesian * FGrid, GridRedBlackCartesian * FrbGrid,
|
LatticeGaugeField &Umu,
|
||||||
GridCartesian * UGrid, GridRedBlackCartesian * UrbGrid,
|
GridCartesian * FGrid, GridRedBlackCartesian * FrbGrid,
|
||||||
RealD mass, RealD M5,
|
GridCartesian * UGrid, GridRedBlackCartesian * UrbGrid,
|
||||||
GridParallelRNG *RNG4,
|
RealD mass, RealD M5,
|
||||||
GridParallelRNG *RNG5)
|
GridParallelRNG *RNG4,
|
||||||
|
GridParallelRNG *RNG5)
|
||||||
{
|
{
|
||||||
int Ls=Ddwf.Ls;
|
int Ls=Ddwf.Ls;
|
||||||
|
|
||||||
@ -155,7 +171,10 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
LatticePropagator prop5rev(FGrid);
|
LatticePropagator prop5rev(FGrid);
|
||||||
LatticePropagator prop4(UGrid);
|
LatticePropagator prop4(UGrid);
|
||||||
LatticePropagator Axial_mu(UGrid);
|
LatticePropagator Axial_mu(UGrid);
|
||||||
|
LatticePropagator Vector_mu(UGrid);
|
||||||
LatticeComplex PA (UGrid);
|
LatticeComplex PA (UGrid);
|
||||||
|
LatticeComplex SV (UGrid);
|
||||||
|
LatticeComplex VV (UGrid);
|
||||||
LatticeComplex PJ5q(UGrid);
|
LatticeComplex PJ5q(UGrid);
|
||||||
LatticeComplex PP (UGrid);
|
LatticeComplex PP (UGrid);
|
||||||
LatticePropagator seqprop(UGrid);
|
LatticePropagator seqprop(UGrid);
|
||||||
@ -167,7 +186,7 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
|
|
||||||
MdagMLinearOperator<Action,LatticeFermion> HermOp(Ddwf);
|
MdagMLinearOperator<Action,LatticeFermion> HermOp(Ddwf);
|
||||||
MdagMLinearOperator<Action,LatticeFermion> HermOprev(Ddwfrev);
|
MdagMLinearOperator<Action,LatticeFermion> HermOprev(Ddwfrev);
|
||||||
ConjugateGradient<LatticeFermion> CG(1.0e-12,10000);
|
ConjugateGradient<LatticeFermion> CG(1.0e-16,100000);
|
||||||
for(int s=0;s<Nd;s++){
|
for(int s=0;s<Nd;s++){
|
||||||
for(int c=0;c<Nc;c++){
|
for(int c=0;c<Nc;c++){
|
||||||
LatticeFermion src4 (UGrid);
|
LatticeFermion src4 (UGrid);
|
||||||
@ -188,13 +207,13 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
Ddwf.ExportPhysicalFermionSolution(result5,result4);
|
Ddwf.ExportPhysicalFermionSolution(result5,result4);
|
||||||
FermToProp<Action>(prop4,result4,s,c);
|
FermToProp<Action>(prop4,result4,s,c);
|
||||||
|
|
||||||
|
Ddwfrev.ImportPhysicalFermionSource(src4,src5);
|
||||||
Ddwfrev.Mdag(src5,Mdagsrc5);
|
Ddwfrev.Mdag(src5,Mdagsrc5);
|
||||||
CG(HermOprev,Mdagsrc5,result5);
|
CG(HermOprev,Mdagsrc5,result5);
|
||||||
FermToProp<Action>(prop5rev,result5,s,c);
|
FermToProp<Action>(prop5rev,result5,s,c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
auto curr = Current::Axial;
|
auto curr = Current::Axial;
|
||||||
const int mu_J=Nd-1;
|
const int mu_J=Nd-1;
|
||||||
@ -206,14 +225,14 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
|
|
||||||
LatticeComplex ph (UGrid); ph=1.0;
|
LatticeComplex ph (UGrid); ph=1.0;
|
||||||
|
|
||||||
Ddwfrev.SeqConservedCurrent(prop5rev,
|
Ddwf.SeqConservedCurrent(prop5,
|
||||||
seqsrc,
|
seqsrc,
|
||||||
phys_src,
|
phys_src,
|
||||||
curr,
|
curr,
|
||||||
mu_J,
|
mu_J,
|
||||||
t_J,
|
t_J,
|
||||||
t_J,// whole lattice
|
t_J,// whole lattice
|
||||||
ph);
|
ph);
|
||||||
|
|
||||||
for(int s=0;s<Nd;s++){
|
for(int s=0;s<Nd;s++){
|
||||||
for(int c=0;c<Nc;c++){
|
for(int c=0;c<Nc;c++){
|
||||||
@ -235,25 +254,35 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Gamma g5(Gamma::Algebra::Gamma5);
|
Gamma g5(Gamma::Algebra::Gamma5);
|
||||||
|
Gamma gT(Gamma::Algebra::GammaT);
|
||||||
|
|
||||||
std::vector<TComplex> sumPA;
|
std::vector<TComplex> sumPA;
|
||||||
|
std::vector<TComplex> sumSV;
|
||||||
|
std::vector<TComplex> sumVV;
|
||||||
std::vector<TComplex> sumPP;
|
std::vector<TComplex> sumPP;
|
||||||
std::vector<TComplex> sumPJ5q;
|
std::vector<TComplex> sumPJ5q;
|
||||||
|
|
||||||
|
|
||||||
Ddwf.ContractConservedCurrent(prop5rev,prop5,Axial_mu,phys_src,Current::Axial,Tdir);
|
Ddwf.ContractConservedCurrent(prop5rev,prop5,Axial_mu,phys_src,Current::Axial,Tdir);
|
||||||
//Ddwf.ContractConservedCurrent(prop5rev,prop5,Axial_mu,Current::Axial,Tdir);
|
Ddwf.ContractConservedCurrent(prop5rev,prop5,Vector_mu,phys_src,Current::Vector,Tdir);
|
||||||
Ddwf.ContractJ5q(prop5,PJ5q);
|
Ddwf.ContractJ5q(prop5,PJ5q);
|
||||||
|
|
||||||
PA = trace(g5*Axial_mu);
|
PA = trace(g5*Axial_mu);
|
||||||
|
SV = trace(Vector_mu);
|
||||||
|
VV = trace(gT*Vector_mu);
|
||||||
PP = trace(adj(prop4)*prop4);
|
PP = trace(adj(prop4)*prop4);
|
||||||
|
|
||||||
// Spatial sum
|
// Spatial sum
|
||||||
sliceSum(PA,sumPA,Tdir);
|
sliceSum(PA,sumPA,Tdir);
|
||||||
|
sliceSum(SV,sumSV,Tdir);
|
||||||
|
sliceSum(VV,sumVV,Tdir);
|
||||||
sliceSum(PP,sumPP,Tdir);
|
sliceSum(PP,sumPP,Tdir);
|
||||||
sliceSum(PJ5q,sumPJ5q,Tdir);
|
sliceSum(PJ5q,sumPJ5q,Tdir);
|
||||||
|
|
||||||
int Nt=sumPA.size();
|
int Nt=sumPA.size();
|
||||||
|
for(int t=0;t<Nt;t++){
|
||||||
|
std::cout <<" SV "<<real(TensorRemove(sumSV[t]));
|
||||||
|
std::cout <<" VV "<<real(TensorRemove(sumVV[t]))<<std::endl;
|
||||||
|
}
|
||||||
for(int t=0;t<Nt;t++){
|
for(int t=0;t<Nt;t++){
|
||||||
std::cout <<" PAc "<<real(TensorRemove(sumPA[t]));
|
std::cout <<" PAc "<<real(TensorRemove(sumPA[t]));
|
||||||
std::cout <<" PJ5q "<<real(TensorRemove(sumPJ5q[t]));
|
std::cout <<" PJ5q "<<real(TensorRemove(sumPJ5q[t]));
|
||||||
@ -280,7 +309,6 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
test_S = trace(qSite*g);
|
test_S = trace(qSite*g);
|
||||||
test_V = trace(qSite*g*Gamma::gmu[mu_J]);
|
test_V = trace(qSite*g*Gamma::gmu[mu_J]);
|
||||||
|
|
||||||
// Ddwf.ContractConservedCurrent(prop5rev,prop5,cur,phys_src,Current::Axial,mu_J);
|
|
||||||
Ddwf.ContractConservedCurrent(prop5rev,prop5,cur,phys_src,curr,mu_J);
|
Ddwf.ContractConservedCurrent(prop5rev,prop5,cur,phys_src,curr,mu_J);
|
||||||
|
|
||||||
c = trace(cur*g);
|
c = trace(cur*g);
|
||||||
@ -292,7 +320,8 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
sliceSum(c, check_buf, Tp);
|
sliceSum(c, check_buf, Tp);
|
||||||
check_V = TensorRemove(check_buf[t_J]);
|
check_V = TensorRemove(check_buf[t_J]);
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Test S = " << abs(test_S) << std::endl;
|
|
||||||
|
std::cout<<GridLogMessage << std::setprecision(14)<<"Test S = " << abs(test_S) << std::endl;
|
||||||
std::cout<<GridLogMessage << "Test V = " << abs(test_V) << std::endl;
|
std::cout<<GridLogMessage << "Test V = " << abs(test_V) << std::endl;
|
||||||
std::cout<<GridLogMessage << "Check S = " << abs(check_S) << std::endl;
|
std::cout<<GridLogMessage << "Check S = " << abs(check_S) << std::endl;
|
||||||
std::cout<<GridLogMessage << "Check V = " << abs(check_V) << std::endl;
|
std::cout<<GridLogMessage << "Check V = " << abs(check_V) << std::endl;
|
||||||
@ -308,7 +337,8 @@ void TestConserved(Action & Ddwf, Action & Ddwfrev,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
#if 0
|
||||||
template<class Action>
|
template<class Action>
|
||||||
void TestConserved1(Action & Ddwf, Action & Ddwfrev,
|
void TestConserved1(Action & Ddwf, Action & Ddwfrev,
|
||||||
LatticeGaugeField &Umu,
|
LatticeGaugeField &Umu,
|
||||||
@ -437,6 +467,8 @@ void TestConserved1(Action & Ddwf, Action & Ddwfrev,
|
|||||||
// Mobius parameters
|
// Mobius parameters
|
||||||
auto b=Ddwf.bs[s];
|
auto b=Ddwf.bs[s];
|
||||||
auto c=Ddwf.cs[s];
|
auto c=Ddwf.cs[s];
|
||||||
|
assert(Ddwfrev.bs[sr]==Ddwf.bs[s]);
|
||||||
|
assert(Ddwfrev.cs[sr]==Ddwf.cs[s]);
|
||||||
|
|
||||||
LatticePropagator tmp(UGrid);
|
LatticePropagator tmp(UGrid);
|
||||||
|
|
||||||
@ -460,9 +492,6 @@ void TestConserved1(Action & Ddwf, Action & Ddwfrev,
|
|||||||
C = bpc*localInnerProduct(gp5d,gus_p5d);
|
C = bpc*localInnerProduct(gp5d,gus_p5d);
|
||||||
C-= bpc*localInnerProduct(gp5d,us_p5d);
|
C-= bpc*localInnerProduct(gp5d,us_p5d);
|
||||||
|
|
||||||
b=Ddwf.bs[s];
|
|
||||||
c=Ddwf.cs[s];
|
|
||||||
|
|
||||||
if (s == 0) {
|
if (s == 0) {
|
||||||
p5d =(b*Pm(R_TmLsGq0) + c*Pp(R_TmLsGq0 ) + b*Pp(R_TmLsGq[1]) + c*Pm(R_TmLsGq[1]));
|
p5d =(b*Pm(R_TmLsGq0) + c*Pp(R_TmLsGq0 ) + b*Pp(R_TmLsGq[1]) + c*Pm(R_TmLsGq[1]));
|
||||||
tmp =(b*Pm(L_TmLsGq[Ls-1])+ c*Pp(L_TmLsGq[Ls-1]) + b*Pp(L_TmLsTmp) + c*Pm(L_TmLsTmp ));
|
tmp =(b*Pm(L_TmLsGq[Ls-1])+ c*Pp(L_TmLsGq[Ls-1]) + b*Pp(L_TmLsTmp) + c*Pm(L_TmLsTmp ));
|
||||||
@ -536,9 +565,8 @@ void TestConserved1(Action & Ddwf, Action & Ddwfrev,
|
|||||||
std::cout <<real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt] - 2.0*(Ddwf.mass*sumPP[t] + sumPJ5q[t]) ))<<"\n";
|
std::cout <<real(TensorRemove(sumPA[t]-sumPA[(t-1+Nt)%Nt] - 2.0*(Ddwf.mass*sumPP[t] + sumPJ5q[t]) ))<<"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
#endif
|
||||||
// Verify solution with independent true residual
|
// Verify solution with independent true residual
|
||||||
/*
|
|
||||||
LatticeGaugeField Umu5d(FGrid);
|
LatticeGaugeField Umu5d(FGrid);
|
||||||
std::vector<LatticeColourMatrix> U(4,FGrid);
|
std::vector<LatticeColourMatrix> U(4,FGrid);
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user