Bridge++  Ver. 1.3.x
fopr_Clover_Isochemical.cpp
Go to the documentation of this file.
1 
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 
21 #ifdef USE_FACTORY
22 namespace {
23  Fopr *create_object()
24  {
25  return new Fopr_Clover_Isochemical();
26  }
27 
28 
29  Fopr *create_object_with_repr(const std::string& repr)
30  {
31  return new Fopr_Clover_Isochemical(repr);
32  }
33 
34 
35  bool init1 = Fopr::Factory_noarg::Register("Clover_Isochemical", create_object);
36  bool init2 = Fopr::Factory_string::Register("Clover_Isochemical", create_object_with_repr);
37 }
38 #endif
39 
40 //- parameter entries
41 namespace {
42  void append_entry(Parameters& param)
43  {
44  param.Register_string("gamma_matrix_type", "NULL");
45  param.Register_double("hopping_parameter", 0.0);
46  param.Register_double("clover_coefficient", 0.0);
47  param.Register_double("isospin_chemical_potential", 0.0);
48  param.Register_int_vector("boundary_condition", std::vector<int>());
49 
50  param.Register_string("verbose_level", "NULL");
51  }
52 
53 
54 #ifdef USE_PARAMETERS_FACTORY
55  bool init_param = ParametersFactory::Register("Fopr.Clover_Isochemical", append_entry);
56 #endif
57 }
58 //- end
59 
60 //- parameters class
62 //- end
63 
64 const std::string Fopr_Clover_Isochemical::class_name = "Fopr_Clover_Isochemical";
65 
66 //====================================================================
68 {
69  const std::string str_vlevel = params.get_string("verbose_level");
70 
71  m_vl = vout.set_verbose_level(str_vlevel);
72 
73  //- fetch and check input parameters
74  double kappa, cSW, mu;
75  std::vector<int> bc;
76 
77  int err = 0;
78  err += params.fetch_double("hopping_parameter", kappa);
79  err += params.fetch_double("clover_coefficient", cSW);
80  err += params.fetch_double("isospin_chemical_potential", mu);
81  err += params.fetch_int_vector("boundary_condition", bc);
82 
83  if (err) {
84  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
85  exit(EXIT_FAILURE);
86  }
87 
88 
89  set_parameters(kappa, cSW, mu, bc);
90 }
91 
92 
93 //====================================================================
94 void Fopr_Clover_Isochemical::set_parameters(double kappa, double cSW, double mu,
95  std::vector<int> bc)
96 {
97  //- print input parameters
98  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
99  vout.general(m_vl, " kappa = %8.4f\n", kappa);
100  vout.general(m_vl, " cSW = %8.4f\n", cSW);
101  vout.general(m_vl, " mu = %8.4f\n", mu);
102  for (int dir = 0; dir < m_Ndim; ++dir) {
103  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
104  }
105 
106  //- range check
107  // NB. kappa,cSW,mu == 0 is allowed.
108  assert(bc.size() == m_Ndim);
109 
110  //- store values
111  m_kappa = kappa;
112  m_cSW = cSW;
113  m_mu = mu;
114 
115  for (int dir = 0; dir < m_Ndim; ++dir) {
116  m_boundary[dir] = bc[dir];
117  }
118 
119  //- propagate parameters
122 }
123 
124 
125 //====================================================================
126 void Fopr_Clover_Isochemical::init(std::string repr)
127 {
132  m_NinF = 2 * m_Nc * m_Nd;
133 
134  m_boundary.resize(m_Ndim);
135 
136  m_U = 0;
137 
138  m_repr = repr;
139 
140  m_fopr_w = new Fopr_Wilson_Isochemical(repr);
141  m_fopr_csw = new Fopr_CloverTerm(repr);
142 
143  m_w1.reset(m_NinF, m_Nvol, 1);
144  m_w2.reset(m_NinF, m_Nvol, 1);
145 }
146 
147 
148 //====================================================================
150 {
151  delete m_fopr_w;
152  delete m_fopr_csw;
153 }
154 
155 
156 //====================================================================
158 {
159  m_U = (Field_G *)U;
160 
161  m_fopr_w->set_config(U);
163 }
164 
165 
166 //====================================================================
168 {
169  assert(f.nex() == 1);
170 
171  m_fopr_w->D(w, f);
173  axpy(w, -1.0, m_w1); // w -= m_w1;
174 
175 #pragma omp barrier
176 }
177 
178 
179 //====================================================================
181 {
182  assert(f.nex() == 1);
183 
184  m_fopr_w->Ddag(w, f);
186  axpy(w, -1.0, m_w1); // w -= m_w1;
187 
188 #pragma omp barrier
189 }
190 
191 
192 //====================================================================
194 {
195  assert(f.nex() == 1);
196 
197  D(m_w2, f);
198  Ddag(w, m_w2);
199 }
200 
201 
202 //====================================================================
204 {
205  assert(f.nex() == 1);
206 
207  D(m_w2, f);
208  mult_gm5(w, m_w2);
209 }
210 
211 
212 //====================================================================
214 {
215  assert(f.nex() == 1);
216 
217  mult_gm5(m_w2, f);
218  Ddag(w, m_w2);
219 }
220 
221 
222 //====================================================================
224  const int mu, const int nu)
225 {
226  m_fopr_csw->mult_isigma(v, w, mu, nu);
227 }
228 
229 
230 //====================================================================
232 {
233  //- Counting of floating point operations.
234  // not implemented, yet.
235 
236  double flop = 0.0;
237 
238  return flop;
239 }
240 
241 
242 //====================================================================
243 //============================================================END=====
void Register_int_vector(const string &, const std::vector< int > &)
Definition: parameters.cpp:344
void set_config(Field *U)
setting pointer to the gauge configuration.
void set_config(Field *U)
setting pointer to the gauge configuration.
const Field_G * m_U
gauge configuration (pointer)
BridgeIO vout
Definition: bridgeIO.cpp:278
void set_config(Field *U)
setting pointer to the gauge configuration.
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
Fopr_CloverTerm * m_fopr_csw
Clover term operator.
void mult_sigmaF(Field &, const Field &)
void general(const char *format,...)
Definition: bridgeIO.cpp:65
double m_cSW
clover coefficient
Container of Field-type object.
Definition: field.h:39
void set_parameters(const Parameters &params)
double m_mu
isospin chemical potential
double flop_count()
this returns the number of floating point operations.
Class for parameters.
Definition: parameters.h:38
void Ddag(Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void mult_gm5(Field &v, const Field &w)
double m_kappa
hopping parameter
Fopr_Wilson_Isochemical * m_fopr_w
Wilson fermion kernel.
SU(N) gauge field.
Definition: field_G.h:38
void D(Field &, const Field &)
Bridge::VerboseLevel m_vl
Definition: fopr.h:113
void DdagD(Field &, const Field &)
static const std::string class_name
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:84
void Hdag(Field &, const Field &)
void set_parameters(const Parameters &params)
std::vector< int > m_boundary
boundary conditions
int nex() const
Definition: field.h:117
void set_parameters(const Parameters &params)
void Ddag(Field &, const Field &)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:168
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
int m_NinF
internal parameters
void D(Field &, const Field &)
void H(Field &, const Field &)
static bool Register(const std::string &realm, const creator_callback &cb)
std::string m_repr
gamma matrix representation
void Register_double(const string &, const double)
Definition: parameters.cpp:323
Base class of fermion operator family.
Definition: fopr.h:49
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:87
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
int fetch_int_vector(const string &key, std::vector< int > &val) const
Definition: parameters.cpp:176