diff --git a/RbcUkqcd.hpp b/RbcUkqcd.hpp index 4118068..95c05e9 100644 --- a/RbcUkqcd.hpp +++ b/RbcUkqcd.hpp @@ -62,59 +62,71 @@ struct RbcUkqcd inline static constexpr DeflationParameters c1m32DeflPar{3.0e-06, 5.5, 101, 100, 110, 120}; // Light solver: load deflation from disk - static inline void addM0LightLCDSolver(Application &app, const std::string solverName, - const std::string gaugeName, - const std::string gaugeTransform, - const std::string eigenpackPath, - const double residual = 1.0e-8); - // Light solver: deflation at runtime static inline void - addLightRuntimeIRLSolver(Application &app, const RbcUkqcd::EnsembleParameters &par, - const RbcUkqcd::DeflationParameters &deflPar, - const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const double residual); + addM0LightLCDSolver(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); + + // Light solver: deflation at runtime + static inline void addLightRuntimeIRLSolver(Application &app, + const RbcUkqcd::EnsembleParameters &par, + const RbcUkqcd::DeflationParameters &deflPar, + const std::string solverName, + const std::string gaugeName, + const std::string gaugeTransform, + const std::string boundary, const double residual); static inline void addC1MLightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M16LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M20LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M32LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); // Strange solver (undeflated) static inline void addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParameters &par, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const double residual); + const std::string gaugeTransform, const std::string boundary, + const double residual); static inline void addM0StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 1", const double residual = 1.0e-8); static inline void addC1MStrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M16StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M20StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); static inline void addC1M32StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, + const std::string boundary = "1 1 1 -1", const double residual = 1.0e-8); }; @@ -123,7 +135,8 @@ struct RbcUkqcd // Light M0 (load deflation from disk) void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const std::string eigenpackPath, const double residual) + const std::string eigenpackPath, const std::string boundary, + const double residual) { const std::string prefix = solverName; @@ -141,7 +154,7 @@ void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverNam actionPar.M5 = RbcUkqcd::m0LCDPar.M5; actionPar.mass = RbcUkqcd::m0LCDPar.ml; actionPar.scale = RbcUkqcd::m0LCDPar.scale; - actionPar.boundary = "1 1 1 1"; + actionPar.boundary = boundary; actionPar.twist = "0. 0. 0. 0."; app.createModule(prefix + "_dwf", actionPar); actionPar.gauge = prefix + "_gauge_fp32"; @@ -187,7 +200,8 @@ void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverNam void RbcUkqcd::addLightRuntimeIRLSolver(Application &app, const RbcUkqcd::EnsembleParameters &par, const RbcUkqcd::DeflationParameters &deflPar, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const double residual) + const std::string gaugeTransform, + const std::string boundary, const double residual) { const std::string prefix = solverName; @@ -205,7 +219,7 @@ void RbcUkqcd::addLightRuntimeIRLSolver(Application &app, const RbcUkqcd::Ensemb actionPar.M5 = par.M5; actionPar.mass = par.ml; actionPar.scale = par.scale; - actionPar.boundary = "1 1 1 -1"; + actionPar.boundary = boundary; actionPar.twist = "0. 0. 0. 0."; app.createModule(prefix + "_dwf", actionPar); actionPar.gauge = prefix + "_gauge_fp32"; @@ -254,46 +268,48 @@ void RbcUkqcd::addLightRuntimeIRLSolver(Application &app, const RbcUkqcd::Ensemb // Light C1M void RbcUkqcd::addC1MLightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const double residual) + const std::string gaugeTransform, + const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1mIRLPar, RbcUkqcd::c1mDeflPar, solverName, - gaugeName, gaugeTransform, residual); + gaugeName, gaugeTransform, boundary, residual); } // Light C1M16 void RbcUkqcd::addC1M16LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m16IRLPar, RbcUkqcd::c1m16DeflPar, solverName, - gaugeName, gaugeTransform, residual); + gaugeName, gaugeTransform, boundary, residual); } // Light C1M20 void RbcUkqcd::addC1M20LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m20IRLPar, RbcUkqcd::c1m20DeflPar, solverName, - gaugeName, gaugeTransform, residual); + gaugeName, gaugeTransform, boundary, residual); } // Light C1M32 void RbcUkqcd::addC1M32LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m32IRLPar, RbcUkqcd::c1m32DeflPar, solverName, - gaugeName, gaugeTransform, residual); + gaugeName, gaugeTransform, boundary, residual); } // Strange void RbcUkqcd::addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParameters &par, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const double residual) + const std::string gaugeTransform, const std::string boundary, + const double residual) { const std::string prefix = solverName; @@ -311,7 +327,7 @@ void RbcUkqcd::addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParame actionPar.M5 = par.M5; actionPar.mass = par.ms; actionPar.scale = par.scale; - actionPar.boundary = "1 1 1 1"; + actionPar.boundary = boundary; actionPar.twist = "0. 0. 0. 0."; app.createModule(prefix + "_dwf", actionPar); actionPar.gauge = prefix + "_gauge_fp32"; @@ -332,42 +348,42 @@ void RbcUkqcd::addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParame void RbcUkqcd::addM0StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addStrangeSolver(app, RbcUkqcd::m0LCDPar, solverName, gaugeName, gaugeTransform, - residual); + boundary, residual); } void RbcUkqcd::addC1MStrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1mIRLPar, solverName, gaugeName, gaugeTransform, - residual); + boundary, residual); } void RbcUkqcd::addC1M16StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m16IRLPar, solverName, gaugeName, gaugeTransform, - residual); + boundary, residual); } void RbcUkqcd::addC1M20StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m20IRLPar, solverName, gaugeName, gaugeTransform, - residual); + boundary, residual); } void RbcUkqcd::addC1M32StrangeSolver(Application &app, const std::string solverName, const std::string gaugeName, const std::string gaugeTransform, - const double residual) + const std::string boundary, const double residual) { RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m32IRLPar, solverName, gaugeName, gaugeTransform, - residual); + boundary, residual); } } // namespace hadpresets