1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-24 12:45:56 +01:00

Moving the code to SchurFactorizedFermionOperator

This commit is contained in:
Peter Boyle 2021-05-11 13:46:40 -04:00
parent d7a887baf1
commit e009a37f6e

View File

@ -47,7 +47,6 @@ public:
typedef Lattice<LorentzScalarType> LatticeLorentzScalarType; typedef Lattice<LorentzScalarType> LatticeLorentzScalarType;
typedef Lattice<ScalarType> LatticeScalarType; typedef Lattice<ScalarType> LatticeScalarType;
Coordinate Block;
DDHMCFilter Filter; DDHMCFilter Filter;
const int Omega=0; const int Omega=0;
const int OmegaBar=1; const int OmegaBar=1;
@ -160,36 +159,6 @@ public:
Op.M(tmp,out); Op.M(tmp,out);
ProjectOmegaBar(out); ProjectOmegaBar(out);
}; };
void SolveOmega (FermionOperator<Impl> &Op,FermionField &in,FermionField &out){ assert(0); };
void SolveOmegaBar(FermionOperator<Impl> &Op,FermionField &in,FermionField &out){ assert(0); };
void SolveOmegaAndOmegaBar(FermionOperator<Impl> &Op,FermionField &in,FermionField &out){ assert(0); };
void dInverse (FermionOperator<Impl> &Op,FermionField &in,FermionField &out){ assert(0); };
// R = Pdbar - Pdbar DomegaInv Dd DomegabarInv Ddbar
void R(FermionOperator<Impl> &Op,FermionOperator<Impl> &OpDirichlet,FermionField &in,FermionField &out)
{
FermionField tmp1(Op.FermionGrid());
FermionField tmp2(Op.FermionGrid());
dBoundaryBar(Op,in,tmp1);
SolveOmegaBar(OpDirichlet,tmp1,tmp2); // 1/2 cost
dBoundary(Op,tmp2,tmp1);
SolveOmega(OpDirichlet,tmp1,tmp2); // 1/2 cost
out = in - tmp2 ;
ProjectBoundaryBar(out);
};
// R = Pdbar - Pdbar Dinv Ddbar
void Rinverse(FermionField &in,FermionField &out)
{
FermionField tmp1(NumOp.FermionGrid());
out = in;
ProjectBoundaryBar(out);
dInverse(out,tmp1);
ProjectBoundaryBar(tmp1);
out = out -tmp1;
};
} }
template<class Impl> template<class Impl>