1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-06-15 06:17:05 +01:00

WilsonMG: Move tests for Wilson & WilsonClover into separate files

This commit is contained in:
Daniel Richtmann
2018-06-09 17:42:19 +02:00
committed by Daniel Richtmann
parent 66b7a0f871
commit 73a955be20
2 changed files with 116 additions and 32 deletions

View File

@ -37,10 +37,7 @@ int main(int argc, char **argv) {
Grid_init(&argc, &argv);
typename WilsonCloverFermionR::ImplParams wcImplparams;
WilsonAnisotropyCoefficients wilsonAnisCoeff;
GridCartesian *FGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd, vComplex::Nsimd()), GridDefaultMpi());
GridCartesian * FGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd, vComplex::Nsimd()), GridDefaultMpi());
GridRedBlackCartesian *FrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(FGrid);
std::vector<int> fSeeds({1, 2, 3, 4});
@ -84,43 +81,17 @@ int main(int argc, char **argv) {
const int nbasis = 40;
RealD toleranceForMGChecks = 1e-13; // TODO: depends on the precision MG precondtioner is run in
WilsonFermionR Dw(Umu, *FGrid, *FrbGrid, mass);
WilsonCloverFermionR Dwc(Umu, *FGrid, *FrbGrid, mass, csw_r, csw_t, wilsonAnisCoeff, wcImplparams);
WilsonCloverFermionR Dwc(Umu, *FGrid, *FrbGrid, mass, csw_r, csw_t);
static_assert(std::is_same<LatticeFermion, typename WilsonFermionR::FermionField>::value, "");
static_assert(std::is_same<LatticeFermion, typename WilsonCloverFermionR::FermionField>::value, "");
MdagMLinearOperator<WilsonFermionR, LatticeFermion> MdagMOpDw(Dw);
MdagMLinearOperator<WilsonCloverFermionR, LatticeFermion> MdagMOpDwc(Dwc);
std::cout << GridLogMessage << "**************************************************" << std::endl;
std::cout << GridLogMessage << "Testing Multigrid for Wilson" << std::endl;
std::cout << GridLogMessage << "**************************************************" << std::endl;
TrivialPrecon<LatticeFermion> TrivialPrecon;
auto MGPreconDw = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonFermionR>(mgParams, levelInfo, Dw, Dw);
MGPreconDw->setup();
MGPreconDw->runChecks(toleranceForMGChecks);
std::vector<std::unique_ptr<OperatorFunction<LatticeFermion>>> solversDw;
solversDw.emplace_back(new ConjugateGradient<LatticeFermion>(1.0e-12, 50000, false));
solversDw.emplace_back(new FlexibleGeneralisedMinimalResidual<LatticeFermion>(1.0e-12, 50000, TrivialPrecon, 100, false));
solversDw.emplace_back(new FlexibleGeneralisedMinimalResidual<LatticeFermion>(1.0e-12, 50000, *MGPreconDw, 100, false));
for(auto const &solver : solversDw) {
std::cout << std::endl << "Starting with a new solver" << std::endl;
result = zero;
(*solver)(MdagMOpDw, src, result);
}
MGPreconDw->reportTimings();
std::cout << GridLogMessage << "**************************************************" << std::endl;
std::cout << GridLogMessage << "Testing Multigrid for Wilson Clover" << std::endl;
std::cout << GridLogMessage << "**************************************************" << std::endl;
TrivialPrecon<LatticeFermion> TrivialPrecon;
auto MGPreconDwc = createMGInstance<vSpinColourVector, vTComplex, nbasis, WilsonCloverFermionR>(mgParams, levelInfo, Dwc, Dwc);
MGPreconDwc->setup();