Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Clover.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Clover.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 using std::string;
22 
23 //- parameter entries
24 namespace {
25  void append_entry(Parameters& param)
26  {
27  param.Register_string("gamma_matrix_type", "NULL");
28 
29  param.Register_double("hopping_parameter", 0.0);
30  param.Register_double("clover_coefficient", 0.0);
31  param.Register_int_vector("boundary_condition", std::valarray<int>());
32 
33  param.Register_string("verbose_level", "NULL");
34  }
35 
36 
37 #ifdef USE_PARAMETERS_FACTORY
38  bool init_param = ParametersFactory::Register("Fopr.Clover", append_entry);
39 #endif
40 }
41 //- end
42 
43 //- parameters class
45 //- end
46 
47 //====================================================================
49 {
50  const string str_vlevel = params.get_string("verbose_level");
51 
52  m_vl = vout.set_verbose_level(str_vlevel);
53 
54  //- fetch and check input parameters
55  double kappa, cSW;
56  valarray<int> bc;
57 
58  int err = 0;
59  err += params.fetch_double("hopping_parameter", kappa);
60  err += params.fetch_double("clover_coefficient", cSW);
61  err += params.fetch_int_vector("boundary_condition", bc);
62 
63  if (err) {
64  vout.crucial(m_vl, "Fopr_Clover: fetch error, input parameter not found.\n");
65  abort();
66  }
67 
68 
69  set_parameters(kappa, cSW, bc);
70 }
71 
72 
73 //====================================================================
74 void Fopr_Clover::set_parameters(double kappa, double cSW, valarray<int> bc)
75 {
76  //- print input parameters
77  vout.general(m_vl, "Parameters of clover fermion operator:\n");
78  vout.general(m_vl, " kappa = %8.4f\n", kappa);
79  vout.general(m_vl, " cSW = %8.4f\n", cSW);
80  for (int mu = 0; mu < m_Ndim; ++mu) {
81  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
82  }
83 
84  //- range check
85  // NB. kappa,cSW == 0 is allowed.
86  assert(bc.size() == m_Ndim);
87 
88  //- store values
89  m_kappa = kappa;
90  m_cSW = cSW;
91 
92  for (int mu = 0; mu < m_Ndim; ++mu) {
93  m_boundary[mu] = bc[mu];
94  }
95 
96  //- propagate parameters to components
99 }
100 
101 
102 //====================================================================
103 void Fopr_Clover::init(string repr)
104 {
106  m_Ndim = CommonParameters::Ndim();
109  m_NinF = 2 * m_Nc * m_Nd;
110 
111  m_boundary.resize(m_Ndim);
112 
113  m_U = 0;
114 
115  m_repr = repr;
116 
117  m_fopr_w = new Fopr_Wilson(repr);
118  m_fopr_csw = new Fopr_CloverTerm(repr);
119 }
120 
121 
122 //====================================================================
124 {
125  delete m_fopr_w;
126  delete m_fopr_csw;
127 }
128 
129 
130 //====================================================================
131 void Fopr_Clover::DdagD(Field& w, const Field& f)
132 {
133  assert(f.nex() == 1);
134  Field w2(f.nin(), f.nvol(), 1);
135 
136  D(w2, f);
137  mult_gm5(w, w2);
138  D(w2, w);
139  mult_gm5(w, w2);
140 }
141 
142 
143 //====================================================================
144 void Fopr_Clover::Ddag(Field& w, const Field& f)
145 {
146  assert(f.nex() == 1);
147  Field w2(f.nin(), f.nvol(), 1);
148 
149  mult_gm5(w, f);
150  D(w2, w);
151  mult_gm5(w, w2);
152 }
153 
154 
155 //====================================================================
156 void Fopr_Clover::H(Field& w, const Field& f)
157 {
158  assert(f.nex() == 1);
159  Field w2(f.nin(), f.nvol(), 1);
160 
161  D(w2, f);
162  mult_gm5(w, w2);
163 }
164 
165 
166 //====================================================================
167 void Fopr_Clover::D(Field& w, const Field& f)
168 {
169  assert(f.nex() == 1);
170  Field w2(f.nin(), f.nvol(), 1);
171 
172  m_fopr_w->D(w, f);
173  m_fopr_csw->mult_sigmaF(w2, f);
174  w -= w2;
175 }
176 
177 
178 //====================================================================
180  const int mu, const int nu)
181 {
182  m_fopr_csw->mult_isigma(v, w, mu, nu);
183 }
184 
185 
186 //====================================================================
187 //============================================================END=====