CHROMA
unprec_ht_contfrac5d_linop_array_w.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief Unpreconditioned H_T kernel continued fraction (5D) operator
4  */
5 
6 #ifndef __unprec_ht_contfrac5d_linop_array_w_h__
7 #define __unprec_ht_contfrac5d_linop_array_w_h__
8 
9 #include "linearop.h"
10 #include "state.h"
11 
12 
13 namespace Chroma
14 {
15  //! Unpreconditioned H_T kernel continued fraction (5D) operator
16  /*!
17  * \ingroup linop
18  *
19  * This operator applies the non-hermitian overlap operator
20  * Chi = ((1+m_q)/(1-m_q)*gamma_5 + B) . Psi
21  * where B is the continued fraction of the pole approx. to eps(H_T(m))
22  *
23  * Here,
24  * H_T = (b5 + c5) H_w * ( 2 + (b5 - c5) D_w )^(-1)
25  * = (b5 + c5) ( 2 + (b5 - c5) D_w^dag )^(-1) * H_w
26  *
27  * The denom is multiplied through the 5D system of equations to the RHS
28  */
29 
31  multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
32  {
33  public:
34  // Typedefs to save typing
35  typedef LatticeFermion T;
36  typedef multi1d<LatticeColorMatrix> P;
37  typedef multi1d<LatticeColorMatrix> Q;
38 
39  //! Full constructor
41  const Real& OverMass_,
42  const Real& _m_q,
43  int _N5,
44  const Real& b5_,
45  const Real& c5_,
46  const multi1d<Real>& _alpha,
47  const multi1d<Real>& _beta,
48  const bool _isLastZeroP ) :
49  OverMass(OverMass_), m_q(_m_q), N5(_N5),
50  alpha(_alpha), beta(_beta),
51  isLastZeroP(_isLastZeroP)
52  {
53  QDPIO::cout << "LinOp isLastZeroP = " << isLastZeroP << std::endl;
54  init(fs,b5_,c5_);
55  }
56 
57  //! Length of DW flavor index/space
58  int size() const {return N5;}
59 
60  //! Destructor is automatic
62 
63  //! Only defined on the entire lattice
64  const Subset& subset() const {return all;}
65 
66  //! Return the fermion BC object for this linear operator
67  const FermBC<T,P,Q>& getFermBC() const {return *fbc;}
68 
69  //! Apply the operator onto a source std::vector
70  void operator() (multi1d<LatticeFermion>& chi,
71  const multi1d<LatticeFermion>& psi,
72  enum PlusMinus isign) const;
73 
74  protected:
75  void init(Handle< FermState<T,P,Q> > fs,
76  const Real& b5, const Real& c5);
77 
78  //! Partial constructor
79 // UnprecHTContFrac5DLinOpArray() {}
80  //! Hide =
82 
83  private:
87  const Real OverMass;
88  const Real m_q;
89  const int N5; // Size of the 5th dimension
90  Real scale_fac;
91  Real a5;
92  const multi1d<Real> alpha;
93  const multi1d<Real> beta;
94  const bool isLastZeroP;
95  };
96 
97 } // End Namespace Chroma
98 
99 
100 #endif
Base class for all fermion action boundary conditions.
Definition: fermbc.h:20
Support class for fermion actions and linear operators.
Definition: state.h:94
Class for counted reference semantics.
Definition: handle.h:33
Unpreconditioned H_T kernel continued fraction (5D) operator.
const Subset & subset() const
Only defined on the entire lattice.
void init(Handle< FermState< T, P, Q > > fs, const Real &b5, const Real &c5)
int size() const
Length of DW flavor index/space.
void operator=(const UnprecHTContFrac5DLinOpArray &)
Partial constructor.
const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this linear operator.
void operator()(multi1d< LatticeFermion > &chi, const multi1d< LatticeFermion > &psi, enum PlusMinus isign) const
Apply the operator onto a source std::vector.
UnprecHTContFrac5DLinOpArray(Handle< FermState< T, P, Q > > fs, const Real &OverMass_, const Real &_m_q, int _N5, const Real &b5_, const Real &c5_, const multi1d< Real > &_alpha, const multi1d< Real > &_beta, const bool _isLastZeroP)
Full constructor.
Unpreconditioned linear operator including derivatives.
Definition: linearop.h:203
Linear Operators.
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
multi1d< LatticeFermion > chi(Ncb)
LatticeFermion psi
Definition: mespbg5p_w.cc:35
Support class for fermion actions and linear operators.