00001
00002
00003
00004
00005
00006
00007 #ifndef __prec_nef_fermact_array_w_h__
00008 #define __prec_nef_fermact_array_w_h__
00009
00010 #include "actions/ferm/fermacts/eoprec_dwf_fermact_base_array_w.h"
00011
00012
00013 namespace Chroma
00014 {
00015
00016 namespace EvenOddPrecNEFFermActArrayEnv
00017 {
00018 extern const std::string name;
00019 bool registerAll();
00020 }
00021
00022
00023
00024 struct EvenOddPrecNEFFermActArrayParams
00025 {
00026 EvenOddPrecNEFFermActArrayParams() {}
00027 EvenOddPrecNEFFermActArrayParams(XMLReader& in, const std::string& path);
00028
00029 Real OverMass;
00030 Real b5;
00031 Real c5;
00032 Real Mass;
00033 int N5;
00034 };
00035
00036
00037
00038 void read(XMLReader& xml, const string& path, EvenOddPrecNEFFermActArrayParams& param);
00039 void write(XMLWriter& xml, const string& path, const EvenOddPrecNEFFermActArrayParams& param);
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class EvenOddPrecNEFFermActArray : public EvenOddPrecDWFermActBaseArray<LatticeFermion,
00052 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
00053 {
00054 public:
00055
00056 typedef LatticeFermion T;
00057 typedef multi1d<LatticeColorMatrix> P;
00058 typedef multi1d<LatticeColorMatrix> Q;
00059
00060
00061 EvenOddPrecNEFFermActArray(Handle< CreateFermState<T,P,Q> > cfs_,
00062 const EvenOddPrecNEFFermActArrayParams& p) :
00063 cfs(cfs_), params(p)
00064 {
00065 QDPIO::cout << "Construct EvenOddPrecNEFFermActArray: OverMass = " << params.OverMass
00066 << " Mass = " << params.Mass
00067 << " N5 = " << params.N5
00068 << " b5 = " << params.b5
00069 << " c5 = " << params.c5
00070 << endl;
00071 }
00072
00073
00074 EvenOddPrecNEFFermActArray(const EvenOddPrecNEFFermActArray& a) :
00075 cfs(a.cfs), params(a.params) {}
00076
00077
00078 int size() const {return params.N5;}
00079
00080
00081 Real getQuarkMass() const {return params.Mass;}
00082
00083
00084 UnprecDWLikeLinOpBaseArray<T,P,Q>* unprecLinOp(Handle< FermState<T,P,Q> > state,
00085 const Real& m_q) const;
00086
00087
00088 EvenOddPrecDWLikeLinOpBaseArray<T,P,Q>* precLinOp(Handle< FermState<T,P,Q> > state,
00089 const Real& m_q) const;
00090
00091
00092 ~EvenOddPrecNEFFermActArray() {}
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 void quarkProp(LatticePropagator& q_sol,
00109 XMLWriter& xml_out,
00110 const LatticePropagator& q_src,
00111 int t_src, int j_decay,
00112 Handle< FermState<T,P,Q> > state,
00113 const GroupXML_t& invParam,
00114 QuarkSpinType quarkSpinType,
00115 bool obsvP,
00116 int& ncg_had) const;
00117
00118 protected:
00119
00120 const CreateFermState<T,P,Q>& getCreateState() const {return *cfs;}
00121
00122
00123 EvenOddPrecNEFFermActArray() {}
00124
00125 void operator=(const EvenOddPrecNEFFermActArray& a) {}
00126
00127 private:
00128 Handle< CreateFermState<T,P,Q> > cfs;
00129 EvenOddPrecNEFFermActArrayParams params;
00130 };
00131
00132 }
00133
00134 #endif