29#ifndef GRID_MINIMAL_RESIDUAL_H
30#define GRID_MINIMAL_RESIDUAL_H
51 psi.Checkerboard() = src.Checkerboard();
62 assert(std::isnan(guess) == 0);
73 std::cout << std::setprecision(4) << std::scientific;
74 std::cout <<
GridLogIterative <<
"MinimalResidual: guess " << guess << std::endl;
75 std::cout <<
GridLogIterative <<
"MinimalResidual: src " << ssq << std::endl;
76 std::cout <<
GridLogIterative <<
"MinimalResidual: cp,r " << cp << std::endl;
82 std::cout <<
GridLogIterative <<
"MinimalResidual: k=0 residual " << cp <<
" target " << rsq << std::endl;
115 <<
" residual " << cp <<
" target " << rsq << std::endl;
116 std::cout <<
GridLogDebug <<
"a = " << a <<
" c = " << c <<
" d = " << d << std::endl;
127 RealD true_residual = resnorm / srcnorm;
129 std::cout <<
GridLogMessage <<
"MinimalResidual Converged on iteration " << k
130 <<
" computed residual " <<
sqrt(cp / ssq)
131 <<
" true residual " << true_residual
139 assert(true_residual /
Tolerance < 10000.0);
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
ComplexD innerProduct(const Lattice< vobj > &left, const Lattice< vobj > &right)
RealD norm2(const Lattice< vobj > &arg)
GridLogger GridLogIterative(1, "Iterative", GridLogColours, "BLUE")
GridLogger GridLogDebug(1, "Debug", GridLogColours, "PURPLE")
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
std::complex< RealD > ComplexD
GridTime Elapsed(void) const
Integer IterationsToComplete
void operator()(LinearOperatorBase< Field > &Linop, const Field &src, Field &psi)
MinimalResidual(RealD tol, Integer maxit, Real ovrelparam=1.0, bool err_on_no_conv=true)
virtual void Op(const Field &in, Field &out)=0