34template <
typename Field>
38 virtual void M(
const Field&, Field&) = 0;
39 virtual void Minv(
const Field&, Field&) = 0;
42 virtual void MDeriv(
const Field&, Field&) = 0;
43 virtual void MDeriv(
const Field&,
const Field&, Field&) = 0;
48template <
typename Field>
52 virtual void M(
const Field& in, Field& out){
55 virtual void Minv(
const Field& in, Field& out){
64 virtual void MDeriv(
const Field& in, Field& out){
67 virtual void MDeriv(
const Field& left,
const Field& right, Field& out){
77template <
typename Implementation>
102 Implementation::generate_momenta(
Mom, sRNG, pRNG);
110 Implementation::generate_momenta(
AuxMom, sRNG, pRNG);
111 Implementation::generate_momenta(
AuxField, sRNG, pRNG);
125 for (
int mu = 0; mu <
Nd; mu++) {
130 Hloc +=
trace(Mom_mu * inv_mu);
137 for (
int mu = 0; mu <
Nd; mu++) {
143 Hloc +=
trace(am_mu * inv_mu);
144 Hloc +=
trace(af_mu * af_mu);
162 der = Implementation::projectForce(MDer);
182 der = -1.0*Implementation::projectForce(der);
191 der = Implementation::projectForce(der);
accelerator_inline Grid_simd2< S, V > trace(const Grid_simd2< S, V > &arg)
auto PeekIndex(const Lattice< vobj > &lhs, int i) -> Lattice< decltype(peekIndex< Index >(vobj(), i))>
vobj::scalar_object sum(const vobj *arg, Integer osites)
#define NAMESPACE_BEGIN(A)
Lattice< vTComplex > LatticeComplex
accelerator_inline std::enable_if<!isGridTensor< T >::value, T >::type TensorRemove(T arg)
void DerivativeU(MomentaField &in, MomentaField &der)
GeneralisedMomenta(GridBase *grid, Metric< MomentaField > &M)
void update_auxiliary_fields(RealD ep)
void MomentaDistribution(GridSerialRNG &sRNG, GridParallelRNG &pRNG)
Implementation::Field MomentaField
void update_auxiliary_momenta(RealD ep)
Metric< MomentaField > & M
Implementation::GaugeLinkField MomentaLinkField
void DerivativeP(MomentaField &der)
void AuxiliaryFieldsDerivative(MomentaField &der)
virtual void MSquareRoot(Field &)=0
virtual void ImportGauge(const Field &)=0
virtual void MDeriv(const Field &, const Field &, Field &)=0
virtual void M(const Field &, Field &)=0
virtual void MDeriv(const Field &, Field &)=0
virtual void MInvSquareRoot(Field &)=0
virtual void Minv(const Field &, Field &)=0
virtual void MInvSquareRoot(Field &P)
virtual void MDeriv(const Field &left, const Field &right, Field &out)
virtual void Minv(const Field &in, Field &out)
virtual void M(const Field &in, Field &out)
virtual void MDeriv(const Field &in, Field &out)
virtual void MSquareRoot(Field &P)
virtual void ImportGauge(const Field &)