From 5ba6c36cf5e53c59f27d5dceafcac5c0dcf69a39 Mon Sep 17 00:00:00 2001 From: Antonin Portelli Date: Tue, 19 Mar 2024 13:36:15 +0900 Subject: [PATCH] interface for inputing gauge transforms --- RbcUkqcd.hpp | 120 ++++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 63 deletions(-) diff --git a/RbcUkqcd.hpp b/RbcUkqcd.hpp index 92b15ec..ca0ea1a 100644 --- a/RbcUkqcd.hpp +++ b/RbcUkqcd.hpp @@ -98,74 +98,62 @@ struct RbcUkqcd 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 solvers (undeflated) static inline void addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParameters &par, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const std::string boundary, - const double residual); + const std::string boundary, const double residual); static inline void addC0StrangeSolver(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 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); // Charm solvers, mass is a free parameter static inline void addC0CharmSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const double mass, const std::string boundary = "1 1 1 1", + 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 std::string gaugeTransform, - const double mass, const std::string boundary = "1 1 1 1", + const std::string gaugeName, const double mass, + const std::string boundary = "1 1 1 1", const double residual = 1.0e-18); }; @@ -179,12 +167,21 @@ void RbcUkqcd::addC0LightZMobiusLCDSolver(Application &app, const std::string so const std::string boundary, const double residual) { const std::string prefix = solverName; + const bool gaugeFixed = !gaugeTransform.empty(); - // Gauge field FP32 cast + // Gauge field & transform FP32 cast MUtilities::GaugeSinglePrecisionCast::Par gaugeCastPar; gaugeCastPar.field = gaugeName; app.createModule(prefix + "_gauge_fp32", gaugeCastPar); + if (gaugeFixed) + { + MUtilities::ColourMatrixSinglePrecisionCast::Par transformCastPar; + + transformCastPar.field = gaugeTransform; + app.createModule(prefix + "_gaugeTransform_fp32", + gaugeCastPar); + } // Scaled DWF action + FP32 version MAction::ZMobiusDWF::Par actionPar; @@ -212,7 +209,7 @@ void RbcUkqcd::addC0LightZMobiusLCDSolver(Application &app, const std::string so epPar.Ls = 10; epPar.blockSize = "4 4 4 3 10"; epPar.orthogonalise = false; - epPar.gaugeXform = gaugeTransform; + epPar.gaugeXform = gaugeFixed ? (prefix + "_gaugeTransform_fp32") : ""; app.createModule(prefix + "_epack", epPar); // Inner guesser @@ -244,12 +241,21 @@ void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverNam 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(prefix + "_gauge_fp32", gaugeCastPar); + if (gaugeFixed) + { + MUtilities::ColourMatrixSinglePrecisionCast::Par transformCastPar; + + transformCastPar.field = gaugeTransform; + app.createModule(prefix + "_gaugeTransform_fp32", + gaugeCastPar); + } // Scaled DWF action + FP32 version MAction::ScaledDWF::Par actionPar; @@ -276,7 +282,7 @@ void RbcUkqcd::addM0LightLCDSolver(Application &app, const std::string solverNam epPar.Ls = 12; epPar.blockSize = "4 4 4 4 12"; epPar.orthogonalise = false; - epPar.gaugeXform = gaugeTransform; + epPar.gaugeXform = gaugeFixed ? (prefix + "_gaugeTransform_fp32") : ""; app.createModule(prefix + "_epack", epPar); // Inner guesser @@ -305,7 +311,6 @@ 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 std::string boundary, const double residual) { const std::string prefix = solverName; @@ -372,49 +377,44 @@ 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 std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1mIRLPar, RbcUkqcd::c1mDeflPar, solverName, - gaugeName, gaugeTransform, boundary, residual); + gaugeName, boundary, residual); } // Light C1M16 void RbcUkqcd::addC1M16LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m16IRLPar, RbcUkqcd::c1m16DeflPar, solverName, - gaugeName, gaugeTransform, boundary, residual); + gaugeName, boundary, residual); } // Light C1M20 void RbcUkqcd::addC1M20LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m20IRLPar, RbcUkqcd::c1m20DeflPar, solverName, - gaugeName, gaugeTransform, boundary, residual); + gaugeName, boundary, residual); } // Light C1M32 void RbcUkqcd::addC1M32LightRuntimeIRLSolver(Application &app, const std::string solverName, const std::string gaugeName, - const std::string gaugeTransform, const std::string boundary, const double residual) { RbcUkqcd::addLightRuntimeIRLSolver(app, RbcUkqcd::c1m32IRLPar, RbcUkqcd::c1m32DeflPar, solverName, - gaugeName, gaugeTransform, boundary, residual); + gaugeName, 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 std::string boundary, - const double residual) + const std::string boundary, const double residual) { const std::string prefix = solverName; @@ -452,58 +452,53 @@ void RbcUkqcd::addStrangeSolver(Application &app, const RbcUkqcd::EnsembleParame } void RbcUkqcd::addC0StrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c0UnitaryPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c0UnitaryPar, solverName, gaugeName, boundary, + residual); } void RbcUkqcd::addM0StrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::m0UnitaryPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::m0UnitaryPar, solverName, gaugeName, boundary, + residual); } void RbcUkqcd::addC1MStrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1mIRLPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1mIRLPar, solverName, gaugeName, boundary, residual); } void RbcUkqcd::addC1M16StrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m16IRLPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m16IRLPar, solverName, gaugeName, boundary, residual); } void RbcUkqcd::addC1M20StrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m20IRLPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m20IRLPar, solverName, gaugeName, boundary, residual); } void RbcUkqcd::addC1M32StrangeSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const std::string boundary, const double residual) + const std::string gaugeName, const std::string boundary, + const double residual) { - RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m32IRLPar, solverName, gaugeName, gaugeTransform, - boundary, residual); + RbcUkqcd::addStrangeSolver(app, RbcUkqcd::c1m32IRLPar, solverName, gaugeName, boundary, residual); } // Charm C0 void RbcUkqcd::addC0CharmSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const double mass, const std::string boundary, - const double residual) + const std::string gaugeName, const double mass, + const std::string boundary, const double residual) { const std::string prefix = solverName; @@ -540,9 +535,8 @@ void RbcUkqcd::addC0CharmSolver(Application &app, const std::string solverName, // Charm M0 void RbcUkqcd::addM0CharmSolver(Application &app, const std::string solverName, - const std::string gaugeName, const std::string gaugeTransform, - const double mass, const std::string boundary, - const double residual) + const std::string gaugeName, const double mass, + const std::string boundary, const double residual) { const std::string prefix = solverName;