54 precision(precision){};
94 void Mdir(
const GaugeField&, GaugeField&,
int,
int){ assert(0);}
95 void MdirAll(
const GaugeField&, std::vector<GaugeField> &){ assert(0);}
96 void Mdiag(
const GaugeField&, GaugeField&){ assert(0);}
99 for (
int mu = 0; mu <
Nd; mu++) {
104 void M(
const GaugeField& in, GaugeField& out) {
110 GaugeLinkField tmp(in.Grid());
111 GaugeLinkField tmp2(in.Grid());
112 GaugeLinkField
sum(in.Grid());
114 for (
int nu = 0; nu <
Nd; nu++) {
117 GaugeLinkField out_nu(out.Grid());
118 for (
int mu = 0; mu <
Nd; mu++) {
120 tmp2 =
adj(
U[mu]) * in_nu *
U[mu];
121 sum += tmp +
Cshift(tmp2, mu, -1) - 2.0 * in_nu;
128 void MDeriv(
const GaugeField& in, GaugeField& der) {
132 for (
int mu = 0; mu <
Nd; mu++){
133 GaugeLinkField der_mu(der.Grid());
135 for (
int nu = 0; nu <
Nd; nu++){
137 der_mu +=
U[mu] *
Cshift(in_nu, mu, 1) *
adj(
U[mu]) * in_nu;
146 void MDeriv(
const GaugeField& left,
const GaugeField& right,
151 for (
int mu = 0; mu <
Nd; mu++) {
152 GaugeLinkField der_mu(der.Grid());
154 for (
int nu = 0; nu <
Nd; nu++) {
157 der_mu +=
U[mu] *
Cshift(left_nu, mu, 1) *
adj(
U[mu]) * right_nu;
158 der_mu +=
U[mu] *
Cshift(right_nu, mu, 1) *
adj(
U[mu]) * left_nu;
164 void Minv(
const GaugeField& in, GaugeField& inverted){
166 Solver(HermOp, in, inverted);
170 GaugeField Gp(P.Grid());
178 GaugeField Gp(P.Grid());
189 std::vector<GaugeLinkField>
U;
auto Cshift(const Expression &expr, int dim, int shift) -> decltype(closure(expr))
void PokeIndex(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< Index >(vobj(), 0))> &rhs, int i)
auto PeekIndex(const Lattice< vobj > &lhs, int i) -> Lattice< decltype(peekIndex< Index >(vobj(), i))>
Lattice< vobj > adj(const Lattice< vobj > &lhs)
vobj::scalar_object sum(const vobj *arg, Integer osites)
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
double generateApprox(int num_degree, int den_degree, unsigned long power_num, unsigned long power_den, int a_len, double *a_param, int *a_pow)
OperatorFunction< typename Impl::Field > & Solver
void Mdiag(const GaugeField &, GaugeField &)
MultiShiftFunction PowerHalf
void MDeriv(const GaugeField &in, GaugeField &der)
void Mdir(const GaugeField &, GaugeField &, int, int)
MultiShiftFunction PowerInvHalf
LaplacianAdjointField(GridBase *grid, OperatorFunction< GaugeField > &S, LaplacianParams &p, const RealD k=1.0)
void MInvSquareRoot(GaugeField &P)
void MDeriv(const GaugeField &left, const GaugeField &right, GaugeField &der)
INHERIT_GIMPL_TYPES(Impl)
void ImportGauge(const GaugeField &_U)
std::vector< GaugeLinkField > U
void MSquareRoot(GaugeField &P)
void M(const GaugeField &in, GaugeField &out)
void MdirAll(const GaugeField &, std::vector< GaugeField > &)
void Minv(const GaugeField &in, GaugeField &inverted)
LaplacianParams(RealD lo=0.0, RealD hi=1.0, int maxit=1000, RealD tol=1.0e-8, int degree=10, int precision=64)
GRID_SERIALIZABLE_CLASS_MEMBERS(LaplacianParams, RealD, lo, RealD, hi, int, MaxIter, RealD, tolerance, int, degree, int, precision)