CHROMA
eoprec_clover_orbifold_linop_w.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief Even-odd preconditioned Clover fermion linear operator with orbifold
4  *
5  * 3D-Orbifold construction follows arXiv:0811.2127
6  */
7 
8 #ifndef __prec_clover_orbifold_linop_w_h__
9 #define __prec_clover_orbifold_linop_w_h__
10 
11 #include "state.h"
12 #include "fermbc.h"
13 #include "eoprec_logdet_linop.h"
17 
18 
19 namespace Chroma
20 {
21  //! Even-odd preconditioned Clover-Dirac operator with orbifold term
22  /*!
23  * \ingroup linop
24  *
25  * This routine is specific to Wilson fermions!
26  *
27  * The kernel for Clover fermions is
28  *
29  * M = A + (d+M) - (1/2) D' + 3d-orbifold
30  */
32  multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
33  {
34  public:
35  // Typedefs to save typing
36  typedef LatticeFermion T;
37  typedef multi1d<LatticeColorMatrix> P;
38  typedef multi1d<LatticeColorMatrix> Q;
39 
40  //! Partial constructor
42 
43  //! Full constructor
45  const CloverFermActParams& param_)
46  {create(fs,param_);}
47 
48  //! Destructor is automatic
50 
51  //! Return the fermion BC object for this linear operator
52  const FermBC<T,P,Q>& getFermBC() const {return D.getFermBC();}
53 
54  //! Creation routine
55  void create(Handle< FermState<T,P,Q> > fs,
56  const CloverFermActParams& param_);
57 
58  //! Apply the the even-even block onto a source std::vector
59  void evenEvenLinOp(LatticeFermion& chi, const LatticeFermion& psi,
60  enum PlusMinus isign) const;
61 
62  //! Apply the inverse of the even-even block onto a source std::vector
63  void evenEvenInvLinOp(LatticeFermion& chi, const LatticeFermion& psi,
64  enum PlusMinus isign) const;
65 
66  //! Apply the the even-odd block onto a source std::vector
67  void evenOddLinOp(LatticeFermion& chi, const LatticeFermion& psi,
68  enum PlusMinus isign) const;
69 
70  //! Apply the the odd-even block onto a source std::vector
71  void oddEvenLinOp(LatticeFermion& chi, const LatticeFermion& psi,
72  enum PlusMinus isign) const;
73 
74  //! Apply the the odd-odd block onto a source std::vector
75  void oddOddLinOp(LatticeFermion& chi, const LatticeFermion& psi,
76  enum PlusMinus isign) const;
77 
78  //! Orbifold term
79  void orbifold(LatticeFermion& chi,
80  const LatticeFermion& psi,
81  enum PlusMinus isign,
82  int z, int cb) const;
83 
84  //! Override inherited one with a few more funkies
85  void operator()(LatticeFermion& chi, const LatticeFermion& psi,
86  enum PlusMinus isign) const;
87 
88  //! Return flops performed by the operator()
89  unsigned long nFlops() const;
90 
91  //! Get the log det of the even even part
92  Double logDetEvenEvenLinOp(void) const;
93 
94  private:
98  CloverTerm invclov; // uggh, only needed for evenEvenLinOp
99  };
100 
101 } // End Namespace Chroma
102 
103 
104 #endif
Even-odd preconditioned Clover-Dirac operator with orbifold term.
void evenOddLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-odd block onto a source std::vector.
Double logDetEvenEvenLinOp(void) const
Get the log det of the even even part.
void create(Handle< FermState< T, P, Q > > fs, const CloverFermActParams &param_)
Creation routine.
void oddOddLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
void evenEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-even block onto a source std::vector.
EvenOddPrecCloverOrbifoldLinOp(Handle< FermState< T, P, Q > > fs, const CloverFermActParams &param_)
Full constructor.
void evenEvenInvLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the inverse of the even-even block onto a source std::vector.
unsigned long nFlops() const
Return flops performed by the operator()
void orbifold(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign, int z, int cb) const
Orbifold term.
void oddEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this linear operator.
void operator()(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Override inherited one with a few more funkies.
Even-odd preconditioned linear operator.
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
General Wilson-Dirac dslash.
Definition: lwldslash_w.h:48
const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this linear operator.
Definition: lwldslash_w.h:92
Parameters for Clover fermion action.
Include possibly optimized Clover terms.
Include possibly optimized Wilson dslash.
Preconditioned Linear Operators where the Even Even part depends on the gauge field.
Fermion action boundary conditions.
int z
Definition: meslate.cc:36
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
multi1d< LatticeFermion > chi(Ncb)
LatticeFermion psi
Definition: mespbg5p_w.cc:35
int cb
Definition: invbicg.cc:120
FloatingPoint< double > Double
Definition: gtest.h:7351
Support class for fermion actions and linear operators.
Params for clover ferm acts.