From 8f47bb367e31486df5d820a582e210c4adaca726 Mon Sep 17 00:00:00 2001 From: Peter Boyle Date: Fri, 4 Apr 2025 16:39:24 -0400 Subject: [PATCH] Shifted non herm --- Grid/algorithms/LinearOperator.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Grid/algorithms/LinearOperator.h b/Grid/algorithms/LinearOperator.h index 04cd6dcb..5c171ff2 100644 --- a/Grid/algorithms/LinearOperator.h +++ b/Grid/algorithms/LinearOperator.h @@ -277,6 +277,38 @@ public: assert(0); } }; +template +class ShiftedNonHermitianLinearOperator : public LinearOperatorBase { + Matrix &_Mat; + RealD shift; +public: + ShiftedNonHermitianLinearOperator(Matrix &Mat,RealD shft): _Mat(Mat),shift(shft){}; + // Support for coarsening to a multigrid + void OpDiag (const Field &in, Field &out) { + _Mat.Mdiag(in,out); + out = out + shift*in; + } + void OpDir (const Field &in, Field &out,int dir,int disp) { + _Mat.Mdir(in,out,dir,disp); + } + void OpDirAll (const Field &in, std::vector &out){ + _Mat.MdirAll(in,out); + }; + void Op (const Field &in, Field &out){ + _Mat.M(in,out); + out = out + shift * in; + } + void AdjOp (const Field &in, Field &out){ + _Mat.Mdag(in,out); + out = out + shift * in; + } + void HermOpAndNorm(const Field &in, Field &out,RealD &n1,RealD &n2){ + assert(0); + } + void HermOp(const Field &in, Field &out){ + assert(0); + } +}; ////////////////////////////////////////////////////////// // Even Odd Schur decomp operators; there are several