mirror of
https://github.com/paboyle/Grid.git
synced 2026-05-02 08:24:12 +01:00
Improvement to 16^3 hdcg
This commit is contained in:
@@ -128,6 +128,10 @@ int main (int argc, char ** argv)
|
|||||||
typedef HermOpAdaptor<LatticeFermionD> HermFineMatrix;
|
typedef HermOpAdaptor<LatticeFermionD> HermFineMatrix;
|
||||||
HermFineMatrix FineHermOp(HermOpEO);
|
HermFineMatrix FineHermOp(HermOpEO);
|
||||||
|
|
||||||
|
LatticeFermionD src(FrbGrid);
|
||||||
|
src = ComplexD(1.0);
|
||||||
|
PowerMethod<LatticeFermionD> PM; PM(HermOpEO,src);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
///////////// Coarse basis and Little Dirac Operator ///////
|
///////////// Coarse basis and Little Dirac Operator ///////
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@@ -150,7 +154,7 @@ int main (int argc, char ** argv)
|
|||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
std::cout << "Create Subspace"<<std::endl;
|
std::cout << "Create Subspace"<<std::endl;
|
||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
Aggregates.CreateSubspaceChebyshevNew(RNG5,HermOpEO,95.);
|
Aggregates.CreateSubspaceChebyshev(RNG5,HermOpEO,nbasis,35.,0.01,500);// <== last run
|
||||||
|
|
||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
std::cout << "Refine Subspace"<<std::endl;
|
std::cout << "Refine Subspace"<<std::endl;
|
||||||
@@ -185,7 +189,7 @@ int main (int argc, char ** argv)
|
|||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
|
|
||||||
typedef HermitianLinearOperator<MultiGeneralCoarsenedMatrix_t,CoarseVector> MrhsHermMatrix;
|
typedef HermitianLinearOperator<MultiGeneralCoarsenedMatrix_t,CoarseVector> MrhsHermMatrix;
|
||||||
Chebyshev<CoarseVector> IRLCheby(0.05,40.0,101); // 1 iter
|
Chebyshev<CoarseVector> IRLCheby(0.01,16.0,201); // 1 iter
|
||||||
MrhsHermMatrix MrhsCoarseOp (mrhs);
|
MrhsHermMatrix MrhsCoarseOp (mrhs);
|
||||||
|
|
||||||
CoarseVector pm_src(CoarseMrhs);
|
CoarseVector pm_src(CoarseMrhs);
|
||||||
@@ -193,10 +197,10 @@ int main (int argc, char ** argv)
|
|||||||
PowerMethod<CoarseVector> cPM;
|
PowerMethod<CoarseVector> cPM;
|
||||||
cPM(MrhsCoarseOp,pm_src);
|
cPM(MrhsCoarseOp,pm_src);
|
||||||
|
|
||||||
int Nk=nrhs;
|
// int Nk=16;
|
||||||
int Nm=Nk*3;
|
// int Nm=Nk*3;
|
||||||
// int Nk=36;
|
int Nk=32;
|
||||||
// int Nm=144;
|
int Nm=128;
|
||||||
int Nstop=Nk;
|
int Nstop=Nk;
|
||||||
int Nconv_test_interval=1;
|
int Nconv_test_interval=1;
|
||||||
|
|
||||||
@@ -210,7 +214,7 @@ int main (int argc, char ** argv)
|
|||||||
nrhs,
|
nrhs,
|
||||||
Nk,
|
Nk,
|
||||||
Nm,
|
Nm,
|
||||||
1e-4,10);
|
1e-4,100);
|
||||||
|
|
||||||
int Nconv;
|
int Nconv;
|
||||||
std::vector<RealD> eval(Nm);
|
std::vector<RealD> eval(Nm);
|
||||||
@@ -231,8 +235,6 @@ int main (int argc, char ** argv)
|
|||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
std::cout << " Recompute coarse evecs "<<std::endl;
|
std::cout << " Recompute coarse evecs "<<std::endl;
|
||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
evec.resize(Nm,Coarse5d);
|
|
||||||
eval.resize(Nm);
|
|
||||||
for(int r=0;r<nrhs;r++){
|
for(int r=0;r<nrhs;r++){
|
||||||
random(CRNG,c_src[r]);
|
random(CRNG,c_src[r]);
|
||||||
}
|
}
|
||||||
@@ -243,7 +245,7 @@ int main (int argc, char ** argv)
|
|||||||
// Deflation guesser object
|
// Deflation guesser object
|
||||||
///////////////////////
|
///////////////////////
|
||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
std::cout << " Reimport coarse evecs "<<std::endl;
|
std::cout << " Reimport coarse evecs "<<evec.size()<<" "<<eval.size()<<std::endl;
|
||||||
std::cout << "**************************************"<<std::endl;
|
std::cout << "**************************************"<<std::endl;
|
||||||
MultiRHSDeflation<CoarseVector> MrhsGuesser;
|
MultiRHSDeflation<CoarseVector> MrhsGuesser;
|
||||||
MrhsGuesser.ImportEigenBasis(evec,eval);
|
MrhsGuesser.ImportEigenBasis(evec,eval);
|
||||||
@@ -252,9 +254,11 @@ int main (int argc, char ** argv)
|
|||||||
// Extra HDCG parameters
|
// Extra HDCG parameters
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
int maxit=3000;
|
int maxit=3000;
|
||||||
ConjugateGradient<CoarseVector> CG(2.0e-1,maxit,false);
|
// ConjugateGradient<CoarseVector> CG(2.0e-1,maxit,false);
|
||||||
RealD lo=2.0;
|
// ConjugateGradient<CoarseVector> CG(1.0e-2,maxit,false);
|
||||||
int ord = 9;
|
ConjugateGradient<CoarseVector> CG(5.0e-2,maxit,false);
|
||||||
|
RealD lo=0.2;
|
||||||
|
int ord = 7;
|
||||||
|
|
||||||
DoNothingGuesser<CoarseVector> DoNothing;
|
DoNothingGuesser<CoarseVector> DoNothing;
|
||||||
HPDSolver<CoarseVector> HPDSolveMrhs(MrhsCoarseOp,CG,DoNothing);
|
HPDSolver<CoarseVector> HPDSolveMrhs(MrhsCoarseOp,CG,DoNothing);
|
||||||
@@ -300,6 +304,19 @@ int main (int argc, char ** argv)
|
|||||||
ConjugateGradient<LatticeFermionD> CGfine(1.0e-8,30000,false);
|
ConjugateGradient<LatticeFermionD> CGfine(1.0e-8,30000,false);
|
||||||
CGfine(HermOpEO, src, result);
|
CGfine(HermOpEO, src, result);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
std::cout << "**************************************"<<std::endl;
|
||||||
|
std::cout << "Calling MdagM CG"<<std::endl;
|
||||||
|
std::cout << "**************************************"<<std::endl;
|
||||||
|
|
||||||
|
LatticeFermion result(FGrid); result=Zero();
|
||||||
|
LatticeFermion src(FGrid); random(RNG5,src);
|
||||||
|
result=Zero();
|
||||||
|
|
||||||
|
MdagMLinearOperator<MobiusFermionD, LatticeFermionD> HermOp(Ddwf);
|
||||||
|
ConjugateGradient<LatticeFermionD> CGfine(1.0e-8,30000,false);
|
||||||
|
CGfine(HermOp, src, result);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user