28#ifndef GRID_PREC_CONJUGATE_RESIDUAL_H
29#define GRID_PREC_CONJUGATE_RESIDUAL_H
56 RealD rAr, rAAr, rArp;
60 Field r(grid), p(grid), Ap(grid), Ar(grid), z(grid);
77 if (
verbose) std::cout<<
GridLogMessage<<
"PrecConjugateResidual: iteration " <<0<<
" residual "<<cp<<
" target"<< rsq<<std::endl;
99 if(
verbose) std::cout<<
GridLogMessage<<
"PrecConjugateResidual: iteration " <<k<<
" residual "<<cp<<
" target"<< rsq<<std::endl;
105 std::cout<<
GridLogMessage<<
"PrecConjugateResidual: Converged on iteration " <<k
106 <<
" computed residual "<<
sqrt(cp/ssq)
107 <<
" true residual "<<
sqrt(true_resid)
114 std::cout<<
GridLogMessage<<
"PrecConjugateResidual did NOT converge"<<std::endl;
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
RealD axpy_norm(Lattice< vobj > &ret, sobj a, const Lattice< vobj > &x, const Lattice< vobj > &y)
void axpy(Lattice< vobj > &ret, sobj a, const Lattice< vobj > &x, const Lattice< vobj > &y)
Lattice< vobj > real(const Lattice< vobj > &lhs)
ComplexD innerProduct(const Lattice< vobj > &left, const Lattice< vobj > &right)
RealD norm2(const Lattice< vobj > &arg)
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
virtual void HermOp(const Field &in, Field &out)=0
virtual void HermOpAndNorm(const Field &in, Field &out, RealD &n1, RealD &n2)=0
LinearFunction< Field > & Preconditioner
PrecConjugateResidual(RealD tol, Integer maxit, LinearFunction< Field > &Prec)
void operator()(LinearOperatorBase< Field > &Linop, const Field &src, Field &psi)