mirror of
https://github.com/paboyle/Grid.git
synced 2025-06-19 08:17:05 +01:00
2f Mixed precision DDHMC running and conserving hamiltonian
This commit is contained in:
@ -62,6 +62,7 @@ NAMESPACE_BEGIN(Grid);
|
||||
// - The Dirichlet ops can be passed to dOmega(Bar) solvers etc...
|
||||
//
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
template<class Impl>
|
||||
class SchurFactoredFermionOperator : public Impl
|
||||
{
|
||||
@ -71,17 +72,26 @@ public:
|
||||
|
||||
FermionOperator<Impl> & DirichletFermOp;
|
||||
FermionOperator<Impl> & FermOp;
|
||||
OperatorFunction<FermionField> &Solver;
|
||||
OperatorFunction<FermionField> &OmegaSolver;
|
||||
OperatorFunction<FermionField> &OmegaDagSolver;
|
||||
OperatorFunction<FermionField> &DSolver;
|
||||
OperatorFunction<FermionField> &DdagSolver;
|
||||
Coordinate Block;
|
||||
|
||||
SchurFactoredFermionOperator(FermionOperator<Impl> & _FermOp,
|
||||
FermionOperator<Impl> & _DirichletFermOp,
|
||||
OperatorFunction<FermionField> &_Solver,
|
||||
OperatorFunction<FermionField> &_OmegaSolver,
|
||||
OperatorFunction<FermionField> &_OmegaDagSolver,
|
||||
OperatorFunction<FermionField> &_DSolver,
|
||||
OperatorFunction<FermionField> &_DdagSolver,
|
||||
Coordinate &_Block)
|
||||
: Block(_Block),
|
||||
FermOp(_FermOp),
|
||||
DirichletFermOp(_DirichletFermOp),
|
||||
Solver(_Solver)
|
||||
OmegaSolver(_OmegaSolver),
|
||||
OmegaDagSolver(_OmegaDagSolver),
|
||||
DSolver(_DSolver),
|
||||
DdagSolver(_DdagSolver)
|
||||
{
|
||||
// Pass in Dirichlet FermOp because we really need two dirac operators
|
||||
// as double stored gauge fields differ and they will otherwise overwrite
|
||||
@ -274,12 +284,12 @@ public:
|
||||
};
|
||||
void dOmegaInvAndOmegaBarInv(FermionField &in,FermionField &out)
|
||||
{
|
||||
SchurRedBlackDiagMooeeSolve<FermionField> PrecSolve(Solver);
|
||||
SchurRedBlackDiagMooeeSolve<FermionField> PrecSolve(OmegaSolver);
|
||||
PrecSolve(DirichletFermOp,in,out);
|
||||
};
|
||||
void dOmegaDagInvAndOmegaBarDagInv(FermionField &in,FermionField &out)
|
||||
{
|
||||
SchurRedBlackDiagMooeeDagSolve<FermionField> PrecSolve(Solver);
|
||||
SchurRedBlackDiagMooeeDagSolve<FermionField> PrecSolve(OmegaDagSolver);
|
||||
PrecSolve(DirichletFermOp,in,out);
|
||||
};
|
||||
|
||||
@ -335,12 +345,12 @@ public:
|
||||
// Non-dirichlet inverter using red-black preconditioning
|
||||
void Dinverse(FermionField &in,FermionField &out)
|
||||
{
|
||||
SchurRedBlackDiagMooeeSolve<FermionField> Solve(Solver);
|
||||
SchurRedBlackDiagMooeeSolve<FermionField> Solve(DSolver);
|
||||
Solve(FermOp,in,out);
|
||||
}
|
||||
void DinverseDag(FermionField &in,FermionField &out)
|
||||
{
|
||||
SchurRedBlackDiagMooeeDagSolve<FermionField> Solve(Solver);
|
||||
SchurRedBlackDiagMooeeDagSolve<FermionField> Solve(DdagSolver);
|
||||
Solve(FermOp,in,out);
|
||||
}
|
||||
};
|
||||
|
@ -36,7 +36,7 @@ NAMESPACE_BEGIN(Grid);
|
||||
|
||||
template<typename MomentaField>
|
||||
struct MomentumFilterBase{
|
||||
virtual void applyFilter(MomentaField &P) const;
|
||||
virtual void applyFilter(MomentaField &P) const = 0;
|
||||
};
|
||||
|
||||
//Do nothing
|
||||
|
@ -41,22 +41,21 @@ private:
|
||||
SchurFactoredFermionOperator<Impl> & NumOp;// the basic operator
|
||||
SchurFactoredFermionOperator<Impl> & DenOp;// the basic operator
|
||||
|
||||
OperatorFunction<FermionField> &DerivativeSolver;
|
||||
OperatorFunction<FermionField> &ActionSolver;
|
||||
// OperatorFunction<FermionField> &DerivativeSolver;
|
||||
// OperatorFunction<FermionField> &ActionSolver;
|
||||
|
||||
FermionField Phi; // the pseudo fermion field for this trajectory
|
||||
|
||||
public:
|
||||
DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion(SchurFactoredFermionOperator<Impl> &_NumOp,
|
||||
SchurFactoredFermionOperator<Impl> &_DenOp,
|
||||
OperatorFunction<FermionField> & DS,
|
||||
OperatorFunction<FermionField> & AS
|
||||
) : NumOp(_NumOp), DenOp(_DenOp),
|
||||
DerivativeSolver(DS), ActionSolver(AS),
|
||||
SchurFactoredFermionOperator<Impl> &_DenOp
|
||||
// OperatorFunction<FermionField> & AS,
|
||||
// OperatorFunction<FermionField> & DS
|
||||
) : NumOp(_NumOp), DenOp(_DenOp),
|
||||
// DerivativeSolver(DS), ActionSolver(AS),
|
||||
Phi(_NumOp.FermOp.FermionGrid()) {};
|
||||
|
||||
virtual std::string action_name(){return "DomainDecomposedBoundaryTwoFlavourRatioPseudoFermion";}
|
||||
|
||||
|
||||
virtual std::string LogParameters(){
|
||||
std::stringstream sstream;
|
||||
|
Reference in New Issue
Block a user