From 6fe8533414837ea49aeb691664215ca99d892d3a Mon Sep 17 00:00:00 2001 From: Peter Boyle Date: Thu, 6 May 2021 23:10:36 +0200 Subject: [PATCH] Mdagger solve support --- Grid/algorithms/LinearOperator.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Grid/algorithms/LinearOperator.h b/Grid/algorithms/LinearOperator.h index 1add212c..5a73f881 100644 --- a/Grid/algorithms/LinearOperator.h +++ b/Grid/algorithms/LinearOperator.h @@ -223,9 +223,14 @@ class SchurOperatorBase : public LinearOperatorBase { Mpc(in,tmp); MpcDag(tmp,out); } + virtual void MpcMpcDag(const Field &in, Field &out) { + Field tmp(in.Grid()); + tmp.Checkerboard() = in.Checkerboard(); + MpcDag(in,tmp); + Mpc(tmp,out); + } virtual void HermOpAndNorm(const Field &in, Field &out,RealD &n1,RealD &n2){ - out.Checkerboard() = in.Checkerboard(); - MpcDagMpc(in,out); + HermOp(in,out); ComplexD dot= innerProduct(in,out); n1=real(dot); n2=norm2(out); @@ -276,6 +281,16 @@ template axpy(out,-1.0,tmp,out); } }; +// Mpc MpcDag system presented as the HermOp +template +class SchurDiagMooeeDagOperator : public SchurDiagMooeeOperator { + public: + virtual void HermOp(const Field &in, Field &out){ + out.Checkerboard() = in.Checkerboard(); + this->MpcMpcDag(in,out); + } + SchurDiagMooeeDagOperator (Matrix &Mat): SchurDiagMooeeOperator(Mat){}; +}; template class SchurDiagOneOperator : public SchurOperatorBase { protected: