Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
force_F_Clover_Nf2_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 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_Isochemical", append_entry);
36 #endif
37 }
38 //- end
39 
40 //- parameters class
42 //- end
43 
44 //====================================================================
46 {
47  const string str_vlevel = params.get_string("verbose_level");
48 
49  m_vl = vout.set_verbose_level(str_vlevel);
50 
51  //- fetch and check input parameters
52  double kappa, cSW, mu;
53  valarray<int> bc;
54 
55  int err = 0;
56  err += params.fetch_double("hopping_parameter", kappa);
57  err += params.fetch_double("clover_coefficient", cSW);
58  err += params.fetch_double("isospin_chemical_potential", mu);
59  err += params.fetch_int_vector("boundary_condition", bc);
60 
61  if (err) {
62  vout.crucial(m_vl, "Force_F_Clover_Nf2_Isochemical: fetch error, input parameter not found.\n");
63  abort();
64  }
65 
66 
67  set_parameters(kappa, cSW, mu, bc);
68 }
69 
70 
71 //====================================================================
72 void Force_F_Clover_Nf2_Isochemical::set_parameters(const double kappa, const double cSW,
73  const double mu, const valarray<int> bc)
74 {
75  int Ndim = CommonParameters::Ndim();
76 
77  //- print input parameters
78  vout.general(m_vl, "Parameters of Force_F_Clover_Nf2:\n");
79  vout.general(m_vl, " kappa = %8.4f\n", kappa);
80  vout.general(m_vl, " cSW = %8.4f\n", cSW);
81  vout.general(m_vl, " mu = %8.4f\n", mu);
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,mu == 0 is allowed.
88  assert(bc.size() == Ndim);
89 
90  //- store values
91  m_kappa = kappa;
92  m_cSW = cSW;
93  m_mu = mu;
94 
95  m_boundary.resize(Ndim);
96  for (int dir = 0; dir < Ndim; ++dir) {
97  m_boundary[dir] = bc[dir];
98  }
99 
100  //- propagate parameters
102 
105 }
106 
107 
108 //====================================================================
110 {
111  m_repr = repr;
112 
116 
119 }
120 
121 
122 //====================================================================
124 {
125  delete m_force_csw;
126  delete m_force_w;
127  delete m_fopr_c;
128 }
129 
130 
131 //====================================================================
133 {
134  int Nc = CommonParameters::Nc();
135  int Nvol = CommonParameters::Nvol();
136  int Ndim = CommonParameters::Ndim();
137  int NinG = 2 * Nc * Nc;
138 
139  Field_G force(Nvol, Ndim), force1(Nvol, Ndim);
140  Mat_SU_N ut(Nc);
141 
142  force1 = force_udiv(eta);
143 
144  for (int mu = 0; mu < Ndim; ++mu) {
145  force.mult_Field_Gnn(mu, *m_U, mu, force1, mu);
146  force.at_Field_G(mu);
147  }
148  force *= -2.0;
149 
150  return (Field)force;
151 }
152 
153 
154 //====================================================================
156  const Field& eta)
157 {
158  int Nc = CommonParameters::Nc();
159  int Nvol = CommonParameters::Nvol();
160  int Ndim = CommonParameters::Ndim();
161  int NinG = 2 * Nc * Nc;
162 
163  Field_G force(Nvol, Ndim), force1(Nvol, Ndim);
164  Mat_SU_N ut(Nc);
165 
166  force1 = force_udiv1(zeta, eta);
167 
168  for (int mu = 0; mu < Ndim; ++mu) {
169  force.mult_Field_Gnn(mu, *m_U, mu, force1, mu);
170  force.at_Field_G(mu);
171  }
172  force *= -2.0;
173 
174  return (Field)force;
175 }
176 
177 
178 //====================================================================
180 {
181  int Nc = CommonParameters::Nc();
182  int Nvol = CommonParameters::Nvol();
183  int Ndim = CommonParameters::Ndim();
184  int NinG = 2 * Nc * Nc;
185 
186  Field force(NinG, Nvol, Ndim);
187 
188  Field_F zeta(Nvol, 1);
189 
190  // zeta = m_fopr_c->H(eta);
191  m_fopr_c->H(zeta, eta);
192 
193  set_mode("H");
194  force = force_udiv1(zeta, (Field_F)eta);
195  set_mode("Hdag");
196  force += force_udiv1((Field_F)eta, zeta);
197 
198  return force;
199 }
200 
201 
202 //====================================================================
204  const Field& eta)
205 {
206  int Nc = CommonParameters::Nc();
207  int Nvol = CommonParameters::Nvol();
208  int Ndim = CommonParameters::Ndim();
209  int NinG = 2 * Nc * Nc;
210 
211  Field force(NinG, Nvol, Ndim);
212 
213  force = force_udiv1_impl((Field_F)zeta, (Field_F)eta);
214 
215  return force;
216 }
217 
218 
219 //====================================================================
221  const Field_F& eta)
222 {
223  int Nc = CommonParameters::Nc();
224  int Nd = CommonParameters::Nd();
225  int Nvol = CommonParameters::Nvol();
226  int Ndim = CommonParameters::Ndim();
227  int NinG = 2 * Nc * Nc;
228 
230 
231  Field force(NinG, Nvol, Ndim);
232  Field force2(NinG, Nvol, Ndim);
233  // Field_G force1(Nvol,1), force2(Nvol,1);
234  Field_G Umu(Nvol, 1), Unu(Nvol, 1), Utmp(Nvol, 1), Utmp2(Nvol, 1);
235  Field_F vt1(Nvol, 1), vt2(Nvol, 1), vt3(Nvol, 1), vt4(Nvol, 1);
236  Field_F zeta_mu(Nvol, 1);
237 
238  Mat_SU_N ut(Nc);
239  Vec_SU_N vec1(Nc), vec2(Nc);
240 
242  force = m_force_w->force_udiv1(zeta, eta);
243  force2 = m_force_csw->force_udiv1(zeta, eta);
244 
245  force += force2;
246 
247  return force;
248 }
249 
250 
251 //====================================================================
252 //============================================================END=====