Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Wilson_Isochemical.cpp
Go to the documentation of this file.
1 
15 
16 
17 
18 #ifdef USE_FACTORY
19 namespace {
20  Fopr *create_object()
21  {
22  return new Fopr_Wilson_Isochemical();
23  }
24 
25 
26  Fopr *create_object_with_repr(const std::string& repr)
27  {
28  return new Fopr_Wilson_Isochemical(repr);
29  }
30 
31 
32  bool init1 = Fopr::Factory_noarg::Register("Wilson_Isochemical", create_object);
33  bool init2 = Fopr::Factory_string::Register("Wilson_Isochemical", create_object_with_repr);
34 }
35 #endif
36 
37 
38 
39 const std::string Fopr_Wilson_Isochemical::class_name = "Fopr_Wilson_Isochemical";
40 
41 //====================================================================
43 {
44  const std::string str_vlevel = params.get_string("verbose_level");
45 
46  m_vl = vout.set_verbose_level(str_vlevel);
47 
48  //- fetch and check input parameters
49  double kappa, mu;
50  std::vector<int> bc;
51 
52  int err = 0;
53  err += params.fetch_double("hopping_parameter", kappa);
54  err += params.fetch_double("isospin_chemical_potential", mu);
55  err += params.fetch_int_vector("boundary_condition", bc);
56 
57  if (err) {
58  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
59  exit(EXIT_FAILURE);
60  }
61 
62 
63  set_parameters(kappa, mu, bc);
64 }
65 
66 
67 //====================================================================
69  const double mu,
70  const std::vector<int> bc)
71 {
72  //- print input parameters
73  vout.general(m_vl, "%s:\n", class_name.c_str());
74  vout.general(m_vl, " kappa = %12.8f\n", kappa);
75  vout.general(m_vl, " mu = %12.8f\n", mu);
76  for (int dir = 0; dir < m_Ndim; ++dir) {
77  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
78  }
79 
80  //- range check
81  // NB. kappa,mu = 0 is allowed.
82  assert(bc.size() == m_Ndim);
83 
84  //- store values
85  m_kappa = kappa;
86  m_mu = mu;
87  m_exp_mu = exp(mu);
88 
89  m_boundary.resize(m_Ndim);
90  for (int dir = 0; dir < m_Ndim; ++dir) {
91  m_boundary[dir] = bc[dir];
92  }
93 
94  //- propagate parameters
95  m_fopr_w->set_parameters(kappa, bc);
96 }
97 
98 
99 //====================================================================
100 void Fopr_Wilson_Isochemical::init(std::string repr)
101 {
103 
104  int Nc = CommonParameters::Nc();
105  int Nd = CommonParameters::Nd();
106  int NinF = 2 * Nc * Nd;
107  int Nvol = CommonParameters::Nvol();
108 
109  m_boundary.resize(m_Ndim);
110  m_U = 0;
111 
112  m_fopr_w = new Fopr_Wilson(repr);
113 
114  m_vt.reset(NinF, Nvol, 1);
115  m_w2.reset(NinF, Nvol, 1);
116 }
117 
118 
119 //====================================================================
121 {
122  delete m_fopr_w;
123 }
124 
125 
126 //====================================================================
128 {
129  int Nvol = field_nvol();
130  int Nin = field_nin();
131  int Nex = field_nex();
132  Field v(Nin, Nvol, Nex);
133 
134  Dspc(w, f);
135 
136  v.set(0.0); // v = 0.0;
137  m_fopr_w->mult_up(3, v, f);
138  w.addpart_ex(0, v, 0, -m_kappa * m_exp_mu);
139 
140  v.set(0.0); // v = 0.0;
141  m_fopr_w->mult_dn(3, v, f);
142  w.addpart_ex(0, v, 0, -m_kappa / m_exp_mu);
143 
144 #pragma omp barrier
145 }
146 
147 
148 //====================================================================
150 {
151  int Nvol = field_nvol();
152  int Nin = field_nin();
153  int Nex = field_nex();
154  Field v(Nin, Nvol, Nex);
155 
156  Dspc(w, f);
157 
158  v.set(0.0); // v = 0.0;
159  m_fopr_w->mult_up(3, v, f);
160  w.addpart_ex(0, v, 0, -m_kappa / m_exp_mu);
161 
162  v.set(0.0); // v = 0.0;
163  m_fopr_w->mult_dn(3, v, f);
164  w.addpart_ex(0, v, 0, -m_kappa * m_exp_mu);
165 
166 #pragma omp barrier
167 }
168 
169 
170 //====================================================================
172 {
173  w.set(0.0); // w = 0.0;
174 
175  m_fopr_w->mult_up(0, w, f);
176  m_fopr_w->mult_dn(0, w, f);
177 
178  m_fopr_w->mult_up(1, w, f);
179  m_fopr_w->mult_dn(1, w, f);
180 
181  m_fopr_w->mult_up(2, w, f);
182  m_fopr_w->mult_dn(2, w, f);
183 
184  scal(w, -m_kappa); // w *= -m_kappa;
185  axpy(w, 1.0, f); // w += f;
186 
187 #pragma omp barrier
188 }
189 
190 
191 //====================================================================
193 {
194  m_fopr_w->mult_gm5(v, f);
195 }
196 
197 
198 //====================================================================
200 {
201  m_vt.set(0.0); // vt = 0.0;
202 
203  m_fopr_w->mult_up(mu, m_vt, (Field)w);
204  m_fopr_w->mult_gm5(v, m_vt);
205 }
206 
207 
208 //====================================================================
210 {
211  D(m_w2, f);
212  mult_gm5(w, m_w2);
213  Dminmu(m_w2, w);
214  mult_gm5(w, m_w2);
215 }
216 
217 
218 //====================================================================
220 {
221  mult_gm5(w, f);
222  Dminmu(m_w2, w);
223  mult_gm5(w, m_w2);
224 }
225 
226 
227 //====================================================================
229 {
230  D(m_w2, f);
231  mult_gm5(w, m_w2);
232 }
233 
234 
235 //====================================================================
237 {
238  Dminmu(m_w2, f);
239  mult_gm5(w, m_w2);
240 }
241 
242 
243 //====================================================================
245 {
246  //- Counting of floating point operations.
247  // not implemented, yet.
248 
249  double flop = 0.0;
250 
251  return flop;
252 }
253 
254 
255 //====================================================================
256 //============================================================END=====
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:282
void Hdag(Field &, const Field &)
BridgeIO vout
Definition: bridgeIO.cpp:495
double m_kappa
hopping parameter
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:164
void general(const char *format,...)
Definition: bridgeIO.cpp:195
void mult_gm5(Field &, const Field &)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
Container of Field-type object.
Definition: field.h:39
int field_nvol()
returns the volume for which the fermion operator is defined.
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:211
double flop_count()
this returns the number of floating point operations.
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
Class for parameters.
Definition: parameters.h:46
void mult_gm5p(int mu, Field_F &v, const Field_F &w)
void Ddag(Field &, const Field &)
void addpart_ex(int ex, const Field &w, int exw)
Definition: field.h:193
Wilson-type fermion field.
Definition: field_F.h:37
void set_parameters(const Parameters &params)
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
void D(Field &, const Field &)
Wilson fermion operator with isospin chemical potential.
Bridge::VerboseLevel m_vl
Definition: fopr.h:128
void mult_up(int mu, Field &w, const Field &f)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:84
void set_parameters(const Parameters &params)
void Dminmu(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:178
double m_mu
isospin chemical potential
void H(Field &, const Field &)
Org::Fopr_Wilson Fopr_Wilson
Wilson fermion operator.
Definition: fopr_Wilson.h:73
void Dspc(Field &, const Field &)
void DdagD(Field &, const Field &)
void mult_dn(int mu, Field &w, const Field &f)
Base class of fermion operator family.
Definition: fopr.h:47
string get_string(const string &key) const
Definition: parameters.cpp:116
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:294
static const std::string class_name
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:131