Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
force_F_Clover_Nf2.cpp
Go to the documentation of this file.
1 
14 #include "force_F_Clover_Nf2.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 
22 //- parameter entries
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_double("hopping_parameter", 0.0);
27  param.Register_double("clover_coefficient", 0.0);
28  param.Register_int_vector("boundary_condition", std::valarray<int>());
29 
30  param.Register_string("verbose_level", "NULL");
31  }
32 
33 
34 #ifdef USE_PARAMETERS_FACTORY
35  bool init_param = ParametersFactory::Register("Force.F_Clover_Nf2", append_entry);
36 #endif
37 }
38 //- end
39 
40 //- parameters class
42 //- end
43 
44 const std::string Force_F_Clover_Nf2::class_name = "Force_F_Clover_Nf2";
45 
46 //====================================================================
48 {
49  const string str_vlevel = params.get_string("verbose_level");
50 
51  m_vl = vout.set_verbose_level(str_vlevel);
52 
53  //- fetch and check input parameters
54  double kappa, cSW;
55  valarray<int> bc;
56 
57  int err = 0;
58  err += params.fetch_double("hopping_parameter", kappa);
59  err += params.fetch_double("clover_coefficient", cSW);
60  err += params.fetch_int_vector("boundary_condition", bc);
61 
62  if (err) {
63  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
64  abort();
65  }
66 
67 
68  set_parameters(kappa, cSW, bc);
69 }
70 
71 
72 //====================================================================
73 void Force_F_Clover_Nf2::set_parameters(const double kappa, const double cSW,
74  const valarray<int> bc)
75 {
76  int Ndim = CommonParameters::Ndim();
77 
78  //- print input parameters
79  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
80  vout.general(m_vl, " kappa = %8.4f\n", kappa);
81  vout.general(m_vl, " cSW = %8.4f\n", cSW);
82  for (int mu = 0; mu < Ndim; ++mu) {
83  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
84  }
85 
86  //- range check
87  // NB. kappa,cSW == 0 is allowed.
88  assert(bc.size() == Ndim);
89 
90  //- store values
91  m_kappa = kappa;
92  m_cSW = cSW;
93 
94  m_boundary.resize(Ndim);
95  for (int mu = 0; mu < Ndim; ++mu) {
96  m_boundary[mu] = bc[mu];
97  }
98 
99  //- propagate parameters
101 
104 }
105 
106 
107 //====================================================================
108 void Force_F_Clover_Nf2::init(std::string repr)
109 {
110  m_repr = repr;
111 
112  m_fopr_c = new Fopr_Clover(repr);
113  m_force_w = new Force_F_Wilson_Nf2(repr);
114  m_force_csw = new Force_F_CloverTerm(repr);
115 
117 
118  int Nvol = CommonParameters::Nvol();
120 
121  m_Cud = new Field_G(Nvol, m_Ndim * m_Ndim);
122 }
123 
124 
125 //====================================================================
127 {
128  delete m_Cud;
129  delete m_force_csw;
130  delete m_force_w;
131  delete m_fopr_c;
132 }
133 
134 
135 //====================================================================
136 void Force_F_Clover_Nf2::force_udiv(Field& force_, const Field& eta_)
137 {
138  int Nc = CommonParameters::Nc();
139  int Nvol = CommonParameters::Nvol();
140  int Ndim = CommonParameters::Ndim();
141 
142  Field_G force1(Nvol, Ndim);
143 
144  Field_F zeta(Nvol, 1);
145  Field_F eta(eta_);
146 
147  m_fopr_c->H(zeta, eta);
148 
149  force_udiv1(force1, eta, zeta);
150  force_ = force1;
151 
152  force_udiv1(force1, zeta, eta);
153  force_ += force1;
154 }
155 
156 
157 //====================================================================
158 void Force_F_Clover_Nf2::force_udiv1(Field& force_, const Field& zeta_, const Field& eta_)
159 {
160  int Nc = CommonParameters::Nc();
161  int Nvol = CommonParameters::Nvol();
162  int Ndim = CommonParameters::Ndim();
163 
164  Field_G force(Nvol, Ndim);
165  Field_F zeta(zeta_);
166  Field_F eta(eta_);
167 
168  force_udiv1_impl(force, zeta, eta);
169 
170  force_ = force;
171 }
172 
173 
174 //====================================================================
175 void Force_F_Clover_Nf2::force_udiv1_impl(Field_G& force, const Field_F& zeta, const Field_F& eta)
176 {
177  int Nc = CommonParameters::Nc();
178  int Nd = CommonParameters::Nd();
179  int Nvol = CommonParameters::Nvol();
180  int Ndim = CommonParameters::Ndim();
181  // int NinG = 2 * Nc * Nc;
182 
184 
185 // Field force(NinG, Nvol, Ndim);
186  force = 0.0;
187 
188 // Field force2(NinG, Nvol, Ndim);
189  Field_G force2(Nvol, Ndim);
190 
191  m_force_w->force_udiv1(force, zeta, eta);
192  m_force_csw->force_udiv1(force2, zeta, eta);
193 
194  force += force2;
195 }
196 
197 
198 //====================================================================
200 {
201  int Nc = CommonParameters::Nc();
202  int Nd = CommonParameters::Nd();
203  int Nvol = CommonParameters::Nvol();
204 
205  Staples staple;
206  Field_G Cmu_ud(Nvol, 1);
207 
208  for (int mu = 0; mu < m_Ndim; ++mu) {
209  for (int nu = 0; nu < m_Ndim; ++nu) {
210  if (nu == mu) continue;
211 
212  Cmu_ud = staple.upper(*m_U, mu, nu);
213  Cmu_ud -= staple.lower(*m_U, mu, nu);
214  m_Cud->setpart_ex(index_dir(mu, nu), Cmu_ud, 0);
215  }
216  }
217 }
218 
219 
220 //====================================================================
221 //============================================================END=====
double m_kappa
hopping parameter
BridgeIO vout
Definition: bridgeIO.cpp:207
void init(std::string)
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
Staple construction.
Definition: staples.h:40
Field_G upper(const Field_G &, const int mu, const int nu)
constructs upper staple in mu-nu plane (wrapping void version).
Definition: staples.cpp:118
void general(const char *format,...)
Definition: bridgeIO.cpp:38
Bridge::VerboseLevel m_vl
Definition: force.h:76
int index_dir(int mu, int nu)
int shift(void)
Container of Field-type object.
Definition: field.h:37
Field_G * m_U
Definition: force.h:74
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
For recursive calculation of smeared force.
double m_cSW
clover coefficient
Class for parameters.
Definition: parameters.h:40
int m_Ndim
spacetime dimension
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
std::valarray< int > m_boundary
boundary conditions
void H(Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void set_parameters(const Parameters &params)
Setting parameters of clover fermion force.
void force_udiv1_impl(Field_G &force, const Field_F &zeta, const Field_F &eta)
Core implemetation of clover force calculation.
SU(N) gauge field.
Definition: field_G.h:36
void set_parameters(const Parameters &params)
Setting parameters of clover fermion force.
Force_F_CloverTerm * m_force_csw
Clover term force.
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
void force_udiv(Field &force, const Field &eta)
For recursive calculation of smeared force.
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void set_parameters(const Parameters &params)
Field_G * m_Cud
for force calculation
void force_udiv1(Field &force, const Field &zeta, const Field &eta)
For recursive calculation of smeared force.
static bool Register(const std::string &realm, const creator_callback &cb)
void set_component()
Set building components for force calculation.
Field_G lower(const Field_G &, const int mu, const int nu)
constructs lower staple in mu-nu plane (wrapping void version).
Definition: staples.cpp:128
Force_F_Wilson_Nf2 * m_force_w
Wilson fermion force.
void Register_double(const string &, const double)
Definition: parameters.cpp:324
std::string m_repr
gamma matrix representation
Methods to shift a field in the lexical site index.
static const std::string class_name
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:150
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
Fopr_Clover * m_fopr_c
fermion operator
string get_string(const string &key) const
Definition: parameters.cpp:85
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
void set_parameters(const Parameters &params)
Definition: fopr_Clover.cpp:81