CHROMA
eoprec_clover_extfield_linop_w.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief Even-odd preconditioned Clover fermion linear operator in an external field
4  */
5 
6 #ifndef __prec_clover_extfield_linop_w_h__
7 #define __prec_clover_extfield_linop_w_h__
8 
9 #include "state.h"
10 #include "fermbc.h"
11 #include "eoprec_logdet_linop.h"
15 
16 
17 namespace Chroma
18 {
19  //! Even-odd preconditioned Clover-Dirac operator in an external field
20  /*!
21  * \ingroup linop
22  *
23  * This routine is specific to Wilson fermions!
24  *
25  * The kernel for Clover fermions is
26  *
27  * M = A + (d+M) - (1/2) D'
28  */
30  multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
31  {
32  public:
33  // Typedefs to save typing
34  typedef LatticeFermion T;
35  typedef multi1d<LatticeColorMatrix> P;
36  typedef multi1d<LatticeColorMatrix> Q;
37 
38  //! Full constructor
40  const CloverFermActParams& param_)
41  {create(fs,param_);}
42 
43  //! Destructor is automatic
45 
46  //! Return the fermion BC object for this linear operator
47  const FermBC<T,P,Q>& getFermBC() const {return D.getFermBC();}
48 
49  //! Creation routine
50  void create(Handle< FermState<T,P,Q> > fs,
51  const CloverFermActParams& param_);
52 
53  //! Apply the the even-even block onto a source std::vector
54  void evenEvenLinOp(LatticeFermion& chi, const LatticeFermion& psi,
55  enum PlusMinus isign) const;
56 
57  //! Apply the inverse of the even-even block onto a source std::vector
58  void evenEvenInvLinOp(LatticeFermion& chi, const LatticeFermion& psi,
59  enum PlusMinus isign) const;
60 
61  //! Apply the the even-odd block onto a source std::vector
62  void evenOddLinOp(LatticeFermion& chi, const LatticeFermion& psi,
63  enum PlusMinus isign) const;
64 
65  //! Apply the the odd-even block onto a source std::vector
66  void oddEvenLinOp(LatticeFermion& chi, const LatticeFermion& psi,
67  enum PlusMinus isign) const;
68 
69  //! Apply the the odd-odd block onto a source std::vector
70  void oddOddLinOp(LatticeFermion& chi, const LatticeFermion& psi,
71  enum PlusMinus isign) const;
72 
73  // Override inherited one with a few more funkies
74  void operator()(LatticeFermion& chi, const LatticeFermion& psi,
75  enum PlusMinus isign) const;
76 
77  //! Return flops performed by the operator()
78  unsigned long nFlops() const;
79 
80  //! Get the log det of the even even part
81  Double logDetEvenEvenLinOp(void) const;
82 
83  protected:
84  //! Partial constructor
86 
87  private:
91  CloverTerm invclov; // uggh, only needed for evenEvenLinOp
92  };
93 
94 } // End Namespace Chroma
95 
96 
97 #endif
Even-odd preconditioned Clover-Dirac operator in an external field.
void create(Handle< FermState< T, P, Q > > fs, const CloverFermActParams &param_)
Creation routine.
void evenEvenInvLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the inverse of the even-even block onto a source std::vector.
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.
EvenOddPrecCloverExtFieldLinOp(Handle< FermState< T, P, Q > > fs, const CloverFermActParams &param_)
Full constructor.
const FermBC< T, P, Q > & getFermBC() const
Return the fermion BC object for this linear operator.
void evenEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the even-even block onto a source std::vector.
void oddOddLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-odd block onto a source std::vector.
unsigned long nFlops() const
Return flops performed by the operator()
void oddEvenLinOp(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply the the odd-even block onto a source std::vector.
void operator()(LatticeFermion &chi, const LatticeFermion &psi, enum PlusMinus isign) const
Apply even-odd preconditioned Clover fermion linear operator.
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.
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
multi1d< LatticeFermion > chi(Ncb)
LatticeFermion psi
Definition: mespbg5p_w.cc:35
FloatingPoint< double > Double
Definition: gtest.h:7351
Support class for fermion actions and linear operators.
Params for clover ferm acts.