CHROMA
schroedinger_fermbc_w.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! @file
3  * @brief Fermion action boundary conditions
4  */
5 
6 #ifndef __schroedinger_fermbc_w_h__
7 #define __schroedinger_fermbc_w_h__
8 
9 #include "fermbc.h"
10 
11 namespace Chroma
12 {
13 
14  //! Abstract class for all gauge action boundary conditions with Schroedinger BC
15  /*! @ingroup fermbcs
16  *
17  * Schroedinger BC implies periodic in dirs orthog to decay dir, and some
18  * kind of fixed BC in the decay dir.
19  */
20  class SchrFermBC : public FermBC<LatticeFermion,
21  multi1d<LatticeColorMatrix>,
22  multi1d<LatticeColorMatrix> >
23  {
24  public:
25  //! Virtual destructor to help with cleanup;
26  virtual ~SchrFermBC() {}
27 
28  //! Modify U fields according to the fermion BC in place
29  virtual void modify(multi1d<LatticeColorMatrix>& u) const
30  {
31  START_CODE();
32 
33  for(int mu=0; mu < u.size(); ++mu)
34  copymask(u[mu], lSFmask()[mu], SFBndFld()[mu]);
35 
36  END_CODE();
37  }
38 
39  //! Modify fermion fields in place
40  virtual void modifyF(LatticeFermion& psi) const
41  {
42  START_CODE();
43 
44  copymask(psi, lSFmaskF(), LatticeFermion(QDP::zero));
45 
46  END_CODE();
47  }
48 
49  //! Modify fermion fields in place under a subset
50  virtual void modifyF(LatticeFermion& psi,
51  const Subset& s) const
52  {
53  START_CODE();
54 
55  // Ooops, this is ignoring the subset!! Need to fix
56  // but I don't think this is an error though
57  copymask(psi, lSFmaskF(), LatticeFermion(QDP::zero));
58 
59  END_CODE();
60  }
61 
62  //! Modify fermion fields in place
63  virtual void modifyF(multi1d<LatticeFermion>& psi) const
64  {
65  QDP_error_exit("not implemented");
66  }
67 
68  //! Modify fermion fields in place under a subset
69  virtual void modifyF(multi1d<LatticeFermion>& psi,
70  const Subset& s) const
71  {
72  QDP_error_exit("not implemented");
73  }
74 
75  //! Zero some gauge-like field in place on the masked links
76  virtual void zero(multi1d<LatticeColorMatrix>& ds_u) const
77  {
78  START_CODE();
79 
80  LatticeColorMatrix z = QDP::zero;
81 
82  for(int mu=0; mu < ds_u.size(); ++mu)
83  copymask(ds_u[mu], lSFmask()[mu], z);
84 
85  END_CODE();
86  }
87 
88  //! Says if there are fermion non-trivial
89  bool nontrivialP() const {return true;}
90 
91  //! Decay direction
92  virtual int getDir() const = 0;
93 
94  //! Starting slice in decay direction
95  virtual int getDecayMin() const = 0;
96 
97  //! Ending slice in decay direction
98  virtual int getDecayMax() const = 0;
99 
100  protected:
101  //! Mask which lattice sites have fixed fermion fields
102  virtual const LatticeBoolean& lSFmaskF() const = 0;
103 
104  //! Mask which lattice sites have fixed gauge links
105  virtual const multi1d<LatticeBoolean>& lSFmask() const = 0;
106 
107  //! Fixed gauge links on only the lSFmask() sites
108  virtual const multi1d<LatticeColorMatrix>& SFBndFld() const = 0;
109 
110  //! Maximum plaquette size. This is what knows about 1x1 plaq or 1x2 rect.
111  /*! \return 1 for 1x1 plaq or 2 for 1x2 rect in decay_dir */
112  virtual int getMaxExtent() const = 0;
113  };
114 
115 }
116 
117 
118 #endif
Base class for all fermion action boundary conditions.
Definition: fermbc.h:20
Abstract class for all gauge action boundary conditions with Schroedinger BC.
virtual int getDir() const =0
Decay direction.
virtual void modifyF(multi1d< LatticeFermion > &psi) const
Modify fermion fields in place.
virtual const multi1d< LatticeBoolean > & lSFmask() const =0
Mask which lattice sites have fixed gauge links.
virtual void zero(multi1d< LatticeColorMatrix > &ds_u) const
Zero some gauge-like field in place on the masked links.
bool nontrivialP() const
Says if there are fermion non-trivial.
virtual void modifyF(LatticeFermion &psi, const Subset &s) const
Modify fermion fields in place under a subset.
virtual void modifyF(LatticeFermion &psi) const
Modify fermion fields in place.
virtual void modify(multi1d< LatticeColorMatrix > &u) const
Modify U fields according to the fermion BC in place.
virtual ~SchrFermBC()
Virtual destructor to help with cleanup;.
virtual void modifyF(multi1d< LatticeFermion > &psi, const Subset &s) const
Modify fermion fields in place under a subset.
virtual int getDecayMin() const =0
Starting slice in decay direction.
virtual int getDecayMax() const =0
Ending slice in decay direction.
virtual int getMaxExtent() const =0
Maximum plaquette size. This is what knows about 1x1 plaq or 1x2 rect.
virtual const multi1d< LatticeColorMatrix > & SFBndFld() const =0
Fixed gauge links on only the lSFmask() sites.
virtual const LatticeBoolean & lSFmaskF() const =0
Mask which lattice sites have fixed fermion fields.
int mu
Definition: cool.cc:24
Fermion action boundary conditions.
int z
Definition: meslate.cc:36
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
QDP_error_exit("too many BiCG iterations", n_count, rsd_sq, cp, c, re_rvr, im_rvr, re_a, im_a, re_b, im_b)
static multi1d< LatticeColorMatrix > u
LatticeFermion psi
Definition: mespbg5p_w.cc:35
START_CODE()
Double zero
Definition: invbicg.cc:106
multi1d< LatticeFermion > s(Ncb)
copymask(lcoord, lbit, ltmp_1, REPLACE)