mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
WilsonMG: Some minor cleanup
This commit is contained in:
parent
9292be0b69
commit
7c86d2085b
@ -836,18 +836,20 @@ int main(int argc, char **argv) {
|
|||||||
coarseResult = zero;
|
coarseResult = zero;
|
||||||
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
std::cout << GridLogMessage << "Solving posdef-MR on coarse space " << std::endl;
|
std::cout << GridLogMessage << "Testing some coarse space solvers" << std::endl;
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
|
|
||||||
MdagMLinearOperator<CoarseOperator, CoarseVector> CoarsePosDefHermOp(Dc);
|
MdagMLinearOperator<CoarseOperator, CoarseVector> CoarsePosDefHermOp(Dc);
|
||||||
MinimalResidual<CoarseVector> CoarseMR(5.0e-2, 100, false);
|
|
||||||
ConjugateGradient<CoarseVector> CoarseCG(5.0e-2, 100, false);
|
|
||||||
|
|
||||||
CoarseMR(CoarsePosDefHermOp, coarseSource, coarseResult);
|
std::vector<std::unique_ptr<OperatorFunction<CoarseVector>>> coarseSolvers;
|
||||||
|
coarseSolvers.emplace_back(new GeneralisedMinimalResidual<CoarseVector>(5.0e-2, 100, 8, false));
|
||||||
|
coarseSolvers.emplace_back(new MinimalResidual<CoarseVector>(5.0e-2, 100, false));
|
||||||
|
coarseSolvers.emplace_back(new ConjugateGradient<CoarseVector>(5.0e-2, 100, false));
|
||||||
|
|
||||||
gaussian(coarseGrids.PRNGs[0], coarseSource);
|
for(auto const &solver : coarseSolvers) {
|
||||||
coarseResult = zero;
|
coarseResult = zero;
|
||||||
CoarseCG(CoarsePosDefHermOp, coarseSource, coarseResult);
|
(*solver)(CoarsePosDefHermOp, coarseSource, coarseResult);
|
||||||
|
}
|
||||||
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
std::cout << GridLogMessage << "Testing the operators" << std::endl;
|
std::cout << GridLogMessage << "Testing the operators" << std::endl;
|
||||||
@ -917,12 +919,16 @@ int main(int argc, char **argv) {
|
|||||||
coarseCoarseResult = zero;
|
coarseCoarseResult = zero;
|
||||||
|
|
||||||
MdagMLinearOperator<CoarseCoarseOperator, CoarseCoarseVector> CoarseCoarsePosDefHermOp(Dcc);
|
MdagMLinearOperator<CoarseCoarseOperator, CoarseCoarseVector> CoarseCoarsePosDefHermOp(Dcc);
|
||||||
MinimalResidual<CoarseCoarseVector> CoarseCoarseMR(5.0e-2, 100, false);
|
|
||||||
ConjugateGradient<CoarseCoarseVector> CoarseCoarseCG(5.0e-2, 100, false);
|
std::vector<std::unique_ptr<OperatorFunction<CoarseCoarseVector>>> coarseCoarseSolvers;
|
||||||
CoarseCoarseMR(CoarseCoarsePosDefHermOp, coarseCoarseSource, coarseCoarseResult);
|
coarseSolvers.emplace_back(new GeneralisedMinimalResidual<CoarseCoarseVector>(5.0e-2, 100, 8, false));
|
||||||
gaussian(coarseGrids.PRNGs[1], coarseCoarseSource);
|
coarseSolvers.emplace_back(new MinimalResidual<CoarseCoarseVector>(5.0e-2, 100, false));
|
||||||
coarseCoarseResult = zero;
|
coarseSolvers.emplace_back(new ConjugateGradient<CoarseCoarseVector>(5.0e-2, 100, false));
|
||||||
CoarseCoarseCG(CoarseCoarsePosDefHermOp, coarseCoarseSource, coarseCoarseResult);
|
|
||||||
|
for(auto const &solver : coarseCoarseSolvers) {
|
||||||
|
coarseCoarseResult = zero;
|
||||||
|
(*solver)(CoarseCoarsePosDefHermOp, coarseCoarseSource, coarseCoarseResult);
|
||||||
|
}
|
||||||
|
|
||||||
CoarseMGPreconditioner CoarseMGPrecon(CoarseAggregates, Dcc, CoarsePosDefHermOp, Dc, CoarsePosDefHermOp, Dc);
|
CoarseMGPreconditioner CoarseMGPrecon(CoarseAggregates, Dcc, CoarsePosDefHermOp, Dc, CoarsePosDefHermOp, Dc);
|
||||||
|
|
||||||
@ -933,34 +939,24 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
std::cout << GridLogMessage << "Building two level VPGCR and FGMRES solvers" << std::endl;
|
std::cout << GridLogMessage << "Building VPGCR and FGMRES solvers w/ & w/o MG Preconditioner" << std::endl;
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
|
|
||||||
PrecGeneralisedConjugateResidual<LatticeFermion> VPGCRMG(1.0e-12, 100, FineMGPrecon, 8, 8);
|
std::vector<std::unique_ptr<OperatorFunction<LatticeFermion>>> solvers;
|
||||||
FlexibleGeneralisedMinimalResidual<LatticeFermion> FGMRESMG(1.0e-12, 100, FineMGPrecon, 8);
|
solvers.emplace_back(new PrecGeneralisedConjugateResidual<LatticeFermion>(1.0e-12, 100, FineMGPrecon, 8, 8));
|
||||||
|
solvers.emplace_back(new FlexibleGeneralisedMinimalResidual<LatticeFermion>(1.0e-12, 100, FineMGPrecon, 8));
|
||||||
|
solvers.emplace_back(new PrecGeneralisedConjugateResidual<LatticeFermion>(1.0e-12, 4000000, FineSimplePrecon, 8, 8));
|
||||||
|
solvers.emplace_back(new FlexibleGeneralisedMinimalResidual<LatticeFermion>(1.0e-12, 4000000, FineSimplePrecon, 8));
|
||||||
|
|
||||||
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
|
std::cout << GridLogMessage << "Testing the solvers" << std::endl;
|
||||||
|
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
||||||
|
|
||||||
std::cout << GridLogMessage << "checking norm src " << norm2(src) << std::endl;
|
std::cout << GridLogMessage << "checking norm src " << norm2(src) << std::endl;
|
||||||
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
for(auto const &solver : solvers) {
|
||||||
std::cout << GridLogMessage << "Building unpreconditioned VPGCR and FGMRES solvers" << std::endl;
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
|
||||||
|
|
||||||
PrecGeneralisedConjugateResidual<LatticeFermion> VPGCRT(1.0e-12, 4000000, FineSimplePrecon, 8, 8);
|
|
||||||
FlexibleGeneralisedMinimalResidual<LatticeFermion> FGMREST(1.0e-12, 4000000, FineSimplePrecon, 8);
|
|
||||||
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
|
||||||
std::cout << GridLogMessage << "Testing the four solvers" << std::endl;
|
|
||||||
std::cout << GridLogMessage << "**************************************************" << std::endl;
|
|
||||||
|
|
||||||
std::vector<OperatorFunction<LatticeFermion> *> solvers;
|
|
||||||
solvers.push_back(&VPGCRMG);
|
|
||||||
solvers.push_back(&FGMRESMG);
|
|
||||||
solvers.push_back(&VPGCRT);
|
|
||||||
solvers.push_back(&FGMREST);
|
|
||||||
|
|
||||||
for(auto elem : solvers) {
|
|
||||||
result = zero;
|
result = zero;
|
||||||
(*elem)(FineHermIndefOp, src, result);
|
(*solver)(FineHermIndefOp, src, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user