29#ifndef GRID_LOCAL_COHERENCE_IRL_H
30#define GRID_LOCAL_COHERENCE_IRL_H
59 RealD , coarse_relax_tol,
60 std::vector<int>, blockSize,
62 std::vector < ComplexD >, omega,
68template<
class Fobj,
class CComplex,
int nbasis>
88 int checkerboard =
subspace[0].Checkerboard();
94 _Linop.HermOp(fin,fout); std::cout<<
GridLogIRL<<
"ProjectedHermop : HermOp (fine) "<<std::endl;
99template<
class Fobj,
class CComplex,
int nbasis>
115 std::vector<FineField> & _subspace) :
124 int checkerboard =
subspace[0].Checkerboard();
135template<
class Fobj,
class CComplex,
int nbasis>
159 std::vector<FineField> &subspace,
160 RealD coarse_relax_tol=5.0e3,
161 int largestEvalIdxForReport=-1)
183 std::cout.precision(13);
184 std::cout<<
GridLogIRL <<
"[" << std::setw(3)<<j<<
"] "
185 <<
"eval = "<<std::setw(25)<<
eval <<
" (" << eval_poly <<
")"
186 <<
" |H B[i] - eval[i]B[i]|^2 / evalMaxApprox^2 " << std::setw(25) << vv
190 std::cout<<
GridLogIRL <<
"Estimating true eval of fine grid operator for eval idx " << j << std::endl;
196 if( (vv<eresid*eresid) ) conv = 1;
210 int checkerboard =
_subspace[0].Checkerboard();
229 std::cout.precision(13);
230 std::cout<<
GridLogIRL <<
"[" << std::setw(3)<<j<<
"] "
231 <<
"eval = "<<std::setw(25)<<
eval <<
" (" << eval_poly <<
")"
232 <<
" |H B[i] - eval[i]B[i]|^2 / evalMaxApprox^2 " << std::setw(25) << vv <<
" target " << eresid*eresid
234 if( (vv<eresid*eresid) )
return 1;
242template<
class Fobj,
class CComplex,
int nbasis>
293 std::vector<FineField> &ext_subspace,
294 std::vector<CoarseField> &ext_coarse,
295 std::vector<RealD> &ext_eval_fine,
296 std::vector<RealD> &ext_eval_coarse
353 for(
int k=0;k<nbasis;k++){
403 assert(Nstop>=nbasis);
404 assert(Nconv>=nbasis);
414 int Nstop,
int Nk,
int Nm,
RealD resid,
436 assert(Nconv>=Nstop);
439 for (
int i=0;i<Nstop;i++){
440 std::cout << i <<
" Coarse eval = " <<
evals_coarse[i] << std::endl;
accelerator_inline Grid_simd< S, V > sqrt(const Grid_simd< S, V > &r)
accelerator_inline sobj eval(const uint64_t ss, const sobj &arg)
Lattice< vobj > real(const Lattice< vobj > &lhs)
ComplexD innerProduct(const Lattice< vobj > &left, const Lattice< vobj > &right)
RealD norm2(const Lattice< vobj > &arg)
void blockOrthogonalise(Lattice< CComplex > &ip, std::vector< Lattice< vobj > > &Basis)
void blockPromote(const Lattice< iVector< CComplex, nbasis > > &coarseData, Lattice< vobj > &fineData, const VLattice &Basis)
void blockProject(Lattice< iVector< CComplex, nbasis > > &coarseData, const Lattice< vobj > &fineData, const VLattice &Basis)
Lattice< obj > pow(const Lattice< obj > &rhs_i, RealD y)
GridLogger GridLogIRL(1, "IRL", GridLogColours, "NORMAL")
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
int ReconstructEval(int j, RealD resid, Field &B, RealD &eval, RealD evalMaxApprox)
int TestConvergence(int j, RealD eresid, CoarseField &B, RealD &eval, RealD evalMaxApprox)
OperatorFunction< FineField > & _smoother
LinearFunction< CoarseField > & _Poly
LinearOperatorBase< FineField > & _Linop
Lattice< Fobj > FineField
iVector< CComplex, nbasis > CoarseSiteVector
int ReconstructEval(int j, RealD eresid, CoarseField &B, RealD &eval, RealD evalMaxApprox)
Lattice< CoarseSiteVector > CoarseField
std::vector< FineField > & _subspace
Lattice< CComplex > CoarseScalar
ImplicitlyRestartedLanczosSmoothedTester(LinearFunction< CoarseField > &Poly, OperatorFunction< FineField > &smoother, LinearOperatorBase< FineField > &Linop, std::vector< FineField > &subspace, RealD coarse_relax_tol=5.0e3, int largestEvalIdxForReport=-1)
int _largestEvalIdxForReport
void calc(std::vector< RealD > &eval, std::vector< Field > &evec, const Field &src, int &Nconv, bool reverse=false)
accelerator_inline int Checkerboard(void) const
Fobj::scalar_type scalar_type
iVector< CComplex, nbasis > CoarseSiteVector
std::vector< CoarseField > _evec_coarse
void calcCoarse(ChebyParams cheby_op, ChebyParams cheby_smooth, RealD relax, int Nstop, int Nk, int Nm, RealD resid, RealD MaxIt, RealD betastp, int MinRes)
std::vector< FineField > & subspace
std::vector< RealD > _evals_fine
LinearOperatorBase< FineField > & _FineOp
std::vector< CoarseField > & evec_coarse
void calcFine(ChebyParams cheby_parms, int Nstop, int Nk, int Nm, RealD resid, RealD MaxIt, RealD betastp, int MinRes)
Lattice< CoarseSiteVector > CoarseField
static RealD normalise(T &v)
LocalCoherenceLanczos(GridBase *FineGrid, GridBase *CoarseGrid, LinearOperatorBase< FineField > &FineOp, int checkerboard, std::vector< FineField > &ext_subspace, std::vector< CoarseField > &ext_coarse, std::vector< RealD > &ext_eval_fine, std::vector< RealD > &ext_eval_coarse)
void testCoarse(RealD resid, ChebyParams cheby_smooth, RealD relax)
Lattice< CComplex > CoarseScalar
std::vector< RealD > _evals_coarse
std::vector< FineField > _subspace
LocalCoherenceLanczos(GridBase *FineGrid, GridBase *CoarseGrid, LinearOperatorBase< FineField > &FineOp, int checkerboard)
std::vector< RealD > & evals_coarse
void getFineEvecEval(FineField &evec, RealD &eval, const int i) const
void testFine(RealD resid)
std::vector< RealD > & evals_fine
Lattice< Fobj > FineField
ProjectedFunctionHermOp(OperatorFunction< FineField > &poly, LinearOperatorBase< FineField > &linop, std::vector< FineField > &_subspace)
std::vector< FineField > & subspace
void operator()(const CoarseField &in, CoarseField &out)
LinearOperatorBase< FineField > & _Linop
OperatorFunction< FineField > & _poly
Lattice< Fobj > FineField
Lattice< CComplex > CoarseScalar
iVector< CComplex, nbasis > CoarseSiteVector
Lattice< CoarseSiteVector > CoarseField
void operator()(const CoarseField &in, CoarseField &out)
ProjectedHermOp(LinearOperatorBase< FineField > &linop, std::vector< FineField > &_subspace)
Lattice< CoarseSiteVector > CoarseField
LinearOperatorBase< FineField > & _Linop
Lattice< Fobj > FineField
iVector< CComplex, nbasis > CoarseSiteVector
std::vector< FineField > & subspace
Lattice< CComplex > CoarseScalar
GRID_SERIALIZABLE_CLASS_MEMBERS(LanczosParams, ChebyParams, Cheby, int, Nstop, int, Nk, int, Nm, RealD, resid, int, MaxIt, RealD, betastp, int, MinRes)
GRID_SERIALIZABLE_CLASS_MEMBERS(LocalCoherenceLanczosParams, bool, saveEvecs, bool, doFine, bool, doFineRead, bool, doCoarse, bool, doCoarseRead, LanczosParams, FineParams, LanczosParams, CoarseParams, ChebyParams, Smoother, RealD, coarse_relax_tol, std::vector< int >, blockSize, std::string, config, std::vector< ComplexD >, omega, RealD, mass, RealD, M5)