6 #ifndef __twisted_fermbc_w_h__
7 #define __twisted_fermbc_w_h__
32 namespace WilsonTypeTwistedFermBCEnv
47 multi1d<LatticeColorMatrix>,
48 multi1d<LatticeColorMatrix> >
61 const multi1d<Real>& phases_by_pi_,
62 const multi1d<int>& phases_dir_) :
66 multi1d<LatticeColorMatrix>,
67 multi1d<LatticeColorMatrix> >(boundary_))
96 void modify(multi1d<LatticeColorMatrix>&
u)
const
101 (*simple_bc_handle).modify(
u);
102 const Real
twopi = Real(6.283185307179586476925286);
103 const Real onepi =
twopi/Real(2);
105 const multi1d<int>& nrow = Layout::lattSize();
108 for(
int i=0;
i <
Nd-1;
i++)
111 Real arg =
phases_by_pi[
i]*onepi / Real( nrow[ direction ] );
114 Complex phase = cmplx( re, im );
115 u[ direction ] *= phase;
139 void zero(multi1d<LatticeColorMatrix>& ds_u)
const {}
155 QDPIO::cerr <<
"TwistedFermBCParams: Invalid size for phases_by_pi. Should be " <<
Nd-1 <<
" but is " <<
phases_by_pi.size() << std::endl;
160 QDPIO::cerr <<
"TwistedFermBCParams: Invalid size for phases_dir. Should be " <<
Nd-1 <<
" but is " <<
phases_dir.size() << std::endl;
164 for(
int i=0;
i <
Nd-1;
i++) {
166 QDPIO::cerr <<
"Invalid value in phases_dir, direction " <<
i <<
" should be between 0 and " <<
Nd-1 <<
" but is " <<
phases_dir[
i] << std::endl;
179 multi1d<LatticeColorMatrix>,
Base class for all fermion action boundary conditions.
Class for counted reference semantics.
Concrete class for all gauge actions with simple boundary conditions.
Concrete class for all fermionic actions with twisted boundary conditions.
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 non-trivial BC links.
TwistedFermBC & operator=(const TwistedFermBC &a)
Assignment.
void modifyF(T &psi, const Subset &s) const
Modify fermion fields in place under a subset.
void modifyF(multi1d< T > &psi, const Subset &s) const
Modify fermion fields in place under a subset.
multi1d< Real > phases_by_pi
void modify(multi1d< LatticeColorMatrix > &u) const
Modify U fields in place.
~TwistedFermBC()
Destructor is automatic.
void modifyF(multi1d< T > &psi) const
Modify fermion fields in place.
void modifyF(T &psi) const
Modify fermion fields in place.
multi1d< int > phases_dir
TwistedFermBC(const multi1d< int > &boundary_, const multi1d< Real > &phases_by_pi_, const multi1d< int > &phases_dir_)
Only full constructor.
void check_arrays(const multi1d< Real > phases_by_pi, const multi1d< int > phases_dir)
Handle< SimpleFermBC< T, multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > simple_bc_handle
TwistedFermBC(const TwistedFermBC &a)
Copy constructor.
Fermion action boundary conditions.
void read(XMLReader &xml, const std::string &path, AsqtadFermActParams ¶m)
Read parameters.
void write(XMLWriter &xml, const std::string &path, const AsqtadFermActParams ¶m)
Writer parameters.
Class for counted reference semantics.
bool registerAll()
Register all the factories.
const std::string name
Name to be used.
Asqtad Staggered-Dirac operator.
static multi1d< LatticeColorMatrix > u
LinOpSysSolverMGProtoClover::T T
static QDP_ColorVector * in
multi1d< LatticeFermion > s(Ncb)
Params struct for twisted params.
multi1d< int > phases_dir
multi1d< Real > phases_by_pi