mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 15:55:37 +00:00
2583570e17
Tanh/Zolo * (Cayley/PartFrac/ContFrac) * (Mobius/Shamir/Wilson) Approx Representation Kernel. All are done with space-time taking part in checkerboarding, Ls uncheckerboarded Have only so far tested the Domain Wall limit of mobius, and at that only checked that it i) Inverts ii) 5dim DW == Ls copies of 4dim D2 iii) MeeInv Mee == 1 iv) Meo+Mee+Moe+Moo == M unprec. v) MpcDagMpc is hermitan vi) Mdag is the adjoint of M between stochastic vectors. That said, the RB schur solve, RB MpcDagMpc solve, Unprec solve all converge and the true residual becomes small; so pretty good tests.
81 lines
3.4 KiB
C++
81 lines
3.4 KiB
C++
#ifndef GRID_QCD_ACTIONS_H
|
|
#define GRID_QCD_ACTIONS_H
|
|
|
|
|
|
// Some reorganisation likely required as both Chroma and IroIro
|
|
// are separating the concept of the operator from that of action.
|
|
//
|
|
// The FermAction contains methods to create
|
|
//
|
|
// * Linear operators (Hermitian and non-hermitian) .. my LinearOperator
|
|
// * System solvers (Hermitian and non-hermitian) .. my OperatorFunction
|
|
// * MultiShift System solvers (Hermitian and non-hermitian) .. my OperatorFunction
|
|
|
|
|
|
////////////////////////////////////////////
|
|
// Abstract base interface
|
|
////////////////////////////////////////////
|
|
#include <qcd/action/fermion/FermionOperator.h>
|
|
|
|
////////////////////////////////////////////
|
|
// Utility functions
|
|
////////////////////////////////////////////
|
|
#include <qcd/action/fermion/WilsonCompressor.h> //used by all wilson type fermions
|
|
#include <qcd/action/fermion/WilsonKernels.h> //used by all wilson type fermions
|
|
|
|
////////////////////////////////////////////
|
|
// 4D formulations
|
|
////////////////////////////////////////////
|
|
#include <qcd/action/fermion/WilsonFermion.h>
|
|
//#include <qcd/action/fermion/CloverFermion.h>
|
|
|
|
////////////////////////////////////////////
|
|
// 5D formulations
|
|
////////////////////////////////////////////
|
|
#include <qcd/action/fermion/WilsonFermion5D.h> // used by all 5d overlap types
|
|
#include <qcd/action/fermion/CayleyFermion5D.h>
|
|
#include <qcd/action/fermion/ContinuedFractionFermion5D.h>
|
|
//#include <qcd/action/fermion/PartialFraction.h>
|
|
|
|
#include <qcd/action/fermion/DomainWallFermion.h>
|
|
//#include <qcd/action/fermion/ScaledShamirCayleyTanh.h>
|
|
|
|
|
|
// Chroma interface defining FermionAction
|
|
/*
|
|
template<typename T, typename P, typename Q> class FermAct4D : public FermionAction<T,P,Q>
|
|
virtual LinearOperator<T>* linOp(Handle< FermState<T,P,Q> > state) const = 0;
|
|
virtual LinearOperator<T>* lMdagM(Handle< FermState<T,P,Q> > state) const = 0;
|
|
virtual LinOpSystemSolver<T>* invLinOp(Handle< FermState<T,P,Q> > state,
|
|
virtual MdagMSystemSolver<T>* invMdagM(Handle< FermState<T,P,Q> > state,
|
|
virtual LinOpMultiSystemSolver<T>* mInvLinOp(Handle< FermState<T,P,Q> > state,
|
|
virtual MdagMMultiSystemSolver<T>* mInvMdagM(Handle< FermState<T,P,Q> > state,
|
|
virtual MdagMMultiSystemSolverAccumulate<T>* mInvMdagMAcc(Handle< FermState<T,P,Q> > state,
|
|
virtual SystemSolver<T>* qprop(Handle< FermState<T,P,Q> > state,
|
|
class DiffFermAct4D : public FermAct4D<T,P,Q>
|
|
virtual DiffLinearOperator<T,Q,P>* linOp(Handle< FermState<T,P,Q> > state) const = 0;
|
|
virtual DiffLinearOperator<T,Q,P>* lMdagM(Handle< FermState<T,P,Q> > state) const = 0;
|
|
*/
|
|
|
|
|
|
// Chroma interface defining GaugeAction
|
|
/*
|
|
template<typename P, typename Q> class GaugeAction
|
|
virtual const CreateGaugeState<P,Q>& getCreateState() const = 0;
|
|
virtual GaugeState<P,Q>* createState(const Q& q) const
|
|
virtual const GaugeBC<P,Q>& getGaugeBC() const
|
|
virtual const Set& getSet(void) const = 0;
|
|
virtual void deriv(P& result, const Handle< GaugeState<P,Q> >& state) const
|
|
virtual Double S(const Handle< GaugeState<P,Q> >& state) const = 0;
|
|
|
|
class LinearGaugeAction : public GaugeAction< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
|
|
typedef multi1d<LatticeColorMatrix> P;
|
|
typedef multi1d<LatticeColorMatrix> Q;
|
|
virtual void staple(LatticeColorMatrix& result,
|
|
const Handle< GaugeState<P,Q> >& state,
|
|
int mu, int cb) const = 0;
|
|
*/
|
|
|
|
|
|
#endif
|