Add C0L support
This commit is contained in:
1 parent
3269f159e3
commit
d5a757128f
1 file changed
+136
+136
@@ -60,6 +60,10 @@ struct RbcUkqcd
|
||||
inline static constexpr EnsembleParameters c0LCDPar{0.00078, 0.0362, 1.8, NAN,
|
||||
48, 96, c0ZMobiusLs};
|
||||
|
||||
// C0L
|
||||
inline static constexpr EnsembleParameters c0LUnitaryPar{0.00078, 0.0362, 1.8, 2., 64, 128, 24};
|
||||
inline static constexpr EnsembleParameters c0LLCDPar{0.00078, 0.0362, 1.8, 2., 64, 128, 24};
|
||||
|
||||
// M0
|
||||
inline static constexpr EnsembleParameters m0UnitaryPar{0.000678, 0.02661, 1.8, 2., 64, 128, 12};
|
||||
inline static constexpr EnsembleParameters m0LCDPar{0.0006203, 0.02661, 1.8, 2., 64, 128, 12};
|
||||
@@ -101,6 +105,11 @@ struct RbcUkqcd
|
||||
const std::string eigenpackPath, const std::string boundary = "1 1 1 -1",
|
||||
const double residual = 1.0e-8);
|
||||
|
||||
static inline void
|
||||
addC0LLightLCDSolver(Application &app, const std::string solverName, const std::string gaugeName,
|
||||
const std::string gaugeTransform, const std::string eigenpackPath,
|
||||
const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8);
|
||||
|
||||
static inline void
|
||||
addM0LightLCDSolver(Application &app, const std::string solverName, const std::string gaugeName,
|
||||
const std::string gaugeTransform, const std::string eigenpackPath,
|
||||
@@ -143,6 +152,10 @@ struct RbcUkqcd
|
||||
const std::string solverName,
|
||||
const std::string gaugeName,
|
||||
const std::string boundary, const double residual);
|
||||
static inline void addC0LStrangeSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName,
|
||||
const std::string boundary = "1 1 1 -1",
|
||||
const double residual = 1.0e-8);
|
||||
static inline void addM0StrangeSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName,
|
||||
const std::string boundary = "1 1 1 1",
|
||||
@@ -173,6 +186,10 @@ struct RbcUkqcd
|
||||
const std::string gaugeName, const double mass,
|
||||
const std::string boundary = "1 1 1 -1",
|
||||
const double residual = 1.0e-18);
|
||||
static inline void addC0LCharmSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const double mass,
|
||||
const std::string boundary = "1 1 1 -1",
|
||||
const double residual = 1.0e-18);
|
||||
static inline void addM0CharmSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const double mass,
|
||||
const std::string boundary = "1 1 1 1",
|
||||
@@ -431,6 +448,79 @@ void RbcUkqcd::addC0StrangeZMobiusSolver(Grid::Hadrons::Application &app,
|
||||
app.createModule<MSolver::ZMixedPrecisionRBPrecCG>(solverName, solverPar);
|
||||
}
|
||||
|
||||
// Light C0L (load deflation from disk)
|
||||
void RbcUkqcd::addC0LLightLCDSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const std::string gaugeTransform,
|
||||
const std::string eigenpackPath, const std::string boundary,
|
||||
const double residual)
|
||||
{
|
||||
const std::string prefix = solverName;
|
||||
const bool gaugeFixed = !gaugeTransform.empty();
|
||||
|
||||
// Gauge field FP32 cast
|
||||
MUtilities::GaugeSinglePrecisionCast::Par gaugeCastPar;
|
||||
|
||||
gaugeCastPar.field = gaugeName;
|
||||
app.createModule<MUtilities::GaugeSinglePrecisionCast>(prefix + "_gauge_fp32", gaugeCastPar);
|
||||
if (gaugeFixed)
|
||||
{
|
||||
MUtilities::ColourMatrixSinglePrecisionCast::Par transformCastPar;
|
||||
|
||||
transformCastPar.field = gaugeTransform;
|
||||
app.createModule<MUtilities::ColourMatrixSinglePrecisionCast>(prefix + "_gaugeTransform_fp32",
|
||||
transformCastPar);
|
||||
}
|
||||
|
||||
// Scaled DWF action + FP32 version
|
||||
MAction::ScaledDWF::Par actionPar;
|
||||
|
||||
actionPar.gauge = gaugeName;
|
||||
actionPar.Ls = RbcUkqcd::c0LLCDPar.Ls;
|
||||
actionPar.M5 = RbcUkqcd::c0LLCDPar.M5;
|
||||
actionPar.mass = RbcUkqcd::c0LLCDPar.ml;
|
||||
actionPar.scale = RbcUkqcd::c0LLCDPar.scale;
|
||||
actionPar.boundary = boundary;
|
||||
actionPar.twist = "0. 0. 0. 0.";
|
||||
app.createModule<MAction::ScaledDWF>(prefix + "_dwf", actionPar);
|
||||
actionPar.gauge = prefix + "_gauge_fp32";
|
||||
app.createModule<MAction::ScaledDWFF>(prefix + "_dwf_fp32", actionPar);
|
||||
|
||||
// Compressed eigenpack
|
||||
MIO::LoadCoarseFermionEigenPack200F::Par epPar;
|
||||
|
||||
epPar.filestem = eigenpackPath;
|
||||
epPar.multiFile = true;
|
||||
epPar.redBlack = true;
|
||||
epPar.sizeFine = 200;
|
||||
epPar.sizeCoarse = 4500;
|
||||
epPar.Ls = 24;
|
||||
epPar.blockSize = "4 4 4 4 24";
|
||||
epPar.orthogonalise = false;
|
||||
epPar.gaugeXform = gaugeFixed ? (prefix + "_gaugeTransform_fp32") : "";
|
||||
app.createModule<MIO::LoadCoarseFermionEigenPack200F>(prefix + "_epack", epPar);
|
||||
|
||||
// Inner guesser
|
||||
MGuesser::CoarseDeflation200F::Par iguessPar;
|
||||
|
||||
iguessPar.eigenPack = prefix + "_epack";
|
||||
iguessPar.size = 4500;
|
||||
app.createModule<MGuesser::CoarseDeflation200F>(prefix + "_iguesser", iguessPar);
|
||||
|
||||
// Batched mixed-precision red-black preconditionned CG
|
||||
MSolver::MixedPrecisionRBPrecCGBatched::Par solverPar;
|
||||
|
||||
solverPar.innerAction = prefix + "_dwf_fp32";
|
||||
solverPar.outerAction = prefix + "_dwf";
|
||||
solverPar.maxInnerIteration = 250;
|
||||
solverPar.maxOuterIteration = 100;
|
||||
solverPar.maxPatchupIteration = 10000;
|
||||
solverPar.residual = residual;
|
||||
solverPar.updateResidual = true;
|
||||
solverPar.innerGuesser = prefix + "_iguesser";
|
||||
solverPar.outerGuesser = "";
|
||||
app.createModule<MSolver::MixedPrecisionRBPrecCGBatched>(solverName, solverPar);
|
||||
}
|
||||
|
||||
// Light M0 (load deflation from disk)
|
||||
void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const std::string gaugeTransform,
|
||||
@@ -656,6 +746,14 @@ void RbcUkqcd::addC0StrangeSolver(Application &app, const std::string solverName
|
||||
residual);
|
||||
}
|
||||
|
||||
void RbcUkqcd::addC0LStrangeSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const std::string boundary,
|
||||
const double residual)
|
||||
{
|
||||
RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c0LUnitaryPar, solverName, gaugeName, boundary,
|
||||
residual);
|
||||
}
|
||||
|
||||
void RbcUkqcd::addM0StrangeSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const std::string boundary,
|
||||
const double residual)
|
||||
@@ -775,6 +873,44 @@ void RbcUkqcd::addC0CharmSolver(Application &app, const std::string solverName,
|
||||
app.createModule<MSolver::RBPrecCGNoFail>(solverName, solverPar);
|
||||
}
|
||||
|
||||
// Charm C0L
|
||||
void RbcUkqcd::addC0LCharmSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const double mass,
|
||||
const std::string boundary, const double residual)
|
||||
{
|
||||
const std::string prefix = solverName;
|
||||
|
||||
// stout smearing
|
||||
MGauge::StoutSmearing::Par smearPar;
|
||||
|
||||
smearPar.gauge = gaugeName;
|
||||
smearPar.steps = 3;
|
||||
smearPar.rho = 0.1;
|
||||
smearPar.orthogDim = "";
|
||||
app.createModule<MGauge::StoutSmearing>(prefix + "_gauge_3stout", smearPar);
|
||||
|
||||
// Scaled DWF action + FP32 version
|
||||
MAction::ScaledDWF::Par actionPar;
|
||||
|
||||
actionPar.gauge = prefix + "_gauge_3stout";
|
||||
actionPar.Ls = 24;
|
||||
actionPar.M5 = 1.;
|
||||
actionPar.mass = mass;
|
||||
actionPar.scale = 2.;
|
||||
actionPar.boundary = boundary;
|
||||
actionPar.twist = "0. 0. 0. 0.";
|
||||
app.createModule<MAction::ScaledDWF>(prefix + "_dwf", actionPar);
|
||||
|
||||
// Red-black preconditionned CG
|
||||
MSolver::RBPrecCG::Par solverPar;
|
||||
|
||||
solverPar.action = prefix + "_dwf";
|
||||
solverPar.maxIteration = 30000;
|
||||
solverPar.residual = residual;
|
||||
solverPar.guesser = "";
|
||||
app.createModule<MSolver::RBPrecCGNoFail>(solverName, solverPar);
|
||||
}
|
||||
|
||||
// Charm M0
|
||||
void RbcUkqcd::addM0CharmSolver(Application &app, const std::string solverName,
|
||||
const std::string gaugeName, const double mass,
|
||||
|
||||
Reference in new issue
Block a user