Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 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  param.Register_double("hopping_parameter", 0.0);
29  param.Register_double("clover_coefficient", 0.0);
30  param.Register_double("isospin_chemical_potential", 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_Isochemical", 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, mu;
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_double("isospin_chemical_potential", mu);
62  err += params.fetch_int_vector("boundary_condition", bc);
63 
64  if (err) {
65  vout.crucial(m_vl, "Fopr_Clover_Isochemical: fetch error, input parameter not found.\n");
66  abort();
67  }
68 
69 
70  set_parameters(kappa, cSW, mu, bc);
71 }
72 
73 
74 //====================================================================
75 void Fopr_Clover_Isochemical::set_parameters(double kappa, double cSW, double mu,
76  valarray<int> bc)
77 {
78  //- print input parameters
79  vout.general(m_vl, "Parameters of clover fermion operator:\n");
80  vout.general(m_vl, " kappa = %8.4f\n", kappa);
81  vout.general(m_vl, " cSW = %8.4f\n", cSW);
82  vout.general(m_vl, " mu = %8.4f\n", mu);
83  for (int dir = 0; dir < m_Ndim; ++dir) {
84  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
85  }
86 
87  //- range check
88  // NB. kappa,cSW,mu == 0 is allowed.
89  assert(bc.size() == m_Ndim);
90 
91  //- store values
92  m_kappa = kappa;
93  m_cSW = cSW;
94  m_mu = mu;
95 
96  for (int dir = 0; dir < m_Ndim; ++dir) {
97  m_boundary[dir] = bc[dir];
98  }
99 
100  //- propagate parameters
103 }
104 
105 
106 //====================================================================
108 {
110  m_Ndim = CommonParameters::Ndim();
113  m_NinF = 2 * m_Nc * m_Nd;
114 
115  m_boundary.resize(m_Ndim);
116 
117  m_U = 0;
118 
119  m_repr = repr;
120 
121  m_fopr_w = new Fopr_Wilson_Isochemical(repr);
122  m_fopr_csw = new Fopr_CloverTerm(repr);
123 }
124 
125 
126 //====================================================================
128 {
129  delete m_fopr_w;
130  delete m_fopr_csw;
131 }
132 
133 
134 //====================================================================
136 {
137  m_U = (Field_G *)U;
138 
139  m_fopr_w->set_config(U);
141 }
142 
143 
144 //====================================================================
146 {
147  assert(f.nex() == 1);
148  Field w2(f.nin(), f.nvol(), 1);
149 
150  m_fopr_w->D(w, f);
151  m_fopr_csw->mult_sigmaF(w2, f);
152  w -= w2;
153 }
154 
155 
156 //====================================================================
158 {
159  assert(f.nex() == 1);
160  Field w2(f.nin(), f.nvol(), 1);
161 
162  m_fopr_w->Ddag(w, f);
163  m_fopr_csw->mult_sigmaF(w2, f);
164  w -= w2;
165 }
166 
167 
168 //====================================================================
170 {
171  assert(f.nex() == 1);
172  Field w2(f.nin(), f.nvol(), 1);
173 
174  D(w2, f);
175  Ddag(w, w2);
176 }
177 
178 
179 //====================================================================
181 {
182  assert(f.nex() == 1);
183  Field w2(f.nin(), f.nvol(), 1);
184 
185  D(w2, f);
186  mult_gm5(w, w2);
187 }
188 
189 
190 //====================================================================
192 {
193  assert(f.nex() == 1);
194  Field w2(f.nin(), f.nvol(), 1);
195 
196  mult_gm5(w2, f);
197  Ddag(w, w2);
198 }
199 
200 
201 //====================================================================
203  const int mu, const int nu)
204 {
205  m_fopr_csw->mult_isigma(v, w, mu, nu);
206 }
207 
208 
209 //====================================================================
210 //============================================================END=====