72 phi4(_NumOp.GaugeGrid())
75 virtual std::string
action_name(){
return "TwoFlavourRatioEO4DPseudoFermionAction";}
78 std::stringstream sstream;
98 RealD scale = std::sqrt(0.5);
100 FermionField eta4(
NumOp.GaugeGrid());
101 FermionField eta5(
NumOp.FermionGrid());
102 FermionField tmp(
NumOp.FermionGrid());
103 FermionField phi5(
NumOp.FermionGrid());
106 NumOp.ImportFourDimPseudoFermion(eta4,eta5);
110 SchurRedBlackDiagMooeeSolve<FermionField> PrecSolve(
HeatbathSolver);
113 PrecSolve(
NumOp,tmp,phi5);
117 NumOp.ExportFourDimPseudoFermion(phi5,
phi4);
129 FermionField Y4(
NumOp.GaugeGrid());
130 FermionField X(
NumOp.FermionGrid());
131 FermionField Y(
NumOp.FermionGrid());
132 FermionField phi5(
NumOp.FermionGrid());
135 SchurRedBlackDiagMooeeSolve<FermionField> PrecSolve(
ActionSolver);
137 NumOp.ImportFourDimPseudoFermion(
phi4,phi5);
139 PrecSolve(
DenOp,X,Y);
140 NumOp.ExportFourDimPseudoFermion(Y,Y4);
151 virtual void deriv(
const GaugeField &
U,GaugeField & dSdU) {
156 FermionField X(
NumOp.FermionGrid());
157 FermionField Y(
NumOp.FermionGrid());
158 FermionField phi(
NumOp.FermionGrid());
159 FermionField Vphi(
NumOp.FermionGrid());
160 FermionField MinvVphi(
NumOp.FermionGrid());
161 FermionField tmp4(
NumOp.GaugeGrid());
162 FermionField MdagInvMinvVphi(
NumOp.FermionGrid());
164 GaugeField force(
NumOp.GaugeGrid());
169 NumOp.ImportFourDimPseudoFermion(
phi4,phi);
172 PrecSolve(
DenOp,Vphi,MinvVphi);
176 NumOp.ExportFourDimPseudoFermion(MinvVphi,tmp4);
177 NumOp.ImportFourDimPseudoFermion(tmp4,Y);
182 PrecDagSolve(
DenOp,Y,MdagInvMinvVphi);
186 NumOp.MDeriv(force ,MdagInvMinvVphi , phi,
DaggerNo ); dSdU=force;
189 NumOp.MDeriv(force , phi, MdagInvMinvVphi ,
DaggerYes ); dSdU=dSdU+force;
192 DenOp.MDeriv(force,MdagInvMinvVphi,MinvVphi,
DaggerNo); dSdU=dSdU-force;
193 DenOp.MDeriv(force,MinvVphi,MdagInvMinvVphi,
DaggerYes); dSdU=dSdU-force;
RealD norm2(const Lattice< vobj > &arg)
void gaussian(GridParallelRNG &rng, Lattice< vobj > &l)
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
static constexpr int DaggerYes
static constexpr int DaggerNo
static INTERNAL_PRECISION U
Base class for all actions.
virtual std::string action_name()
Report the name of the action.
OperatorFunction< FermionField > & DerivativeDagSolver
TwoFlavourRatioEO4DPseudoFermionAction(FermionOperator< Impl > &_NumOp, FermionOperator< Impl > &_DenOp, OperatorFunction< FermionField > &DS, OperatorFunction< FermionField > &AS)
FermionOperator< Impl > FermOp
TwoFlavourRatioEO4DPseudoFermionAction(FermionOperator< Impl > &_NumOp, FermionOperator< Impl > &_DenOp, OperatorFunction< FermionField > &DS, OperatorFunction< FermionField > &DDS, OperatorFunction< FermionField > &AS, OperatorFunction< FermionField > &HS)
virtual RealD S(const GaugeField &U)
Evaluate this action with the given gauge field.
virtual void deriv(const GaugeField &U, GaugeField &dSdU)
virtual void refresh(const GaugeField &U, GridSerialRNG &sRNG, GridParallelRNG &pRNG)
Refresh pseudofermion fields.
FermionOperator< Impl > & DenOp
OperatorFunction< FermionField > & ActionSolver
virtual std::string LogParameters()
Print the parameters of the action.
OperatorFunction< FermionField > & HeatbathSolver
FermionOperator< Impl > & NumOp
OperatorFunction< FermionField > & DerivativeSolver