#pragma once NAMESPACE_BEGIN(Grid); template void HighBoundCheck(LinearOperatorBase &HermOp, Field &Phi, RealD hi) { // Eigenvalue bound check at high end PowerMethod power_method; auto lambda_max = power_method(HermOp,Phi); std::cout << GridLogMessage << "Pseudofermion action lamda_max "< void ChebyBoundsCheck(LinearOperatorBase &HermOp, Field &GaussNoise, RealD lo,RealD hi) { int orderfilter = 1000; Chebyshev Cheb(lo,hi,orderfilter); GridBase *FermionGrid = GaussNoise.Grid(); Field X(FermionGrid); Field Z(FermionGrid); X=GaussNoise; RealD Nx = norm2(X); Cheb(HermOp,X,Z); RealD Nz = norm2(Z); std::cout << "************************* "< void InverseSqrtBoundsCheck(int MaxIter,double tol, LinearOperatorBase &HermOp, Field &GaussNoise, MultiShiftFunction &PowerNegHalf) { GridBase *FermionGrid = GaussNoise.Grid(); Field X(FermionGrid); Field Y(FermionGrid); Field Z(FermionGrid); X=GaussNoise; RealD Nx = norm2(X); ConjugateGradientMultiShift msCG(MaxIter,PowerNegHalf); msCG(HermOp,X,Y); msCG(HermOp,Y,Z); RealD Nz = norm2(Z); HermOp.HermOp(Z,Y); RealD Ny = norm2(Y); X=X-Y; RealD Nd = norm2(X); std::cout << "************************* "< void InversePowerBoundsCheck(int inv_pow, int MaxIter,double tol, LinearOperatorBase &HermOp, Field &GaussNoise, MultiShiftFunction &ApproxNegPow) { GridBase *FermionGrid = GaussNoise.Grid(); Field X(FermionGrid); Field Y(FermionGrid); Field Z(FermionGrid); Field tmp1(FermionGrid), tmp2(FermionGrid); X=GaussNoise; RealD Nx = norm2(X); ConjugateGradientMultiShift msCG(MaxIter,ApproxNegPow); tmp1 = X; Field* in = &tmp1; Field* out = &tmp2; for(int i=0;i