Bridge++  Ver. 1.2.x
 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 #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_double("hopping_parameter", 0.0);
28  param.Register_double("isospin_chemical_potential", 0.0);
29  param.Register_int_vector("boundary_condition", std::valarray<int>());
30 
31  param.Register_string("verbose_level", "NULL");
32  }
33 
34 
35 #ifdef USE_PARAMETERS_FACTORY
36  bool init_param = ParametersFactory::Register("Fopr.Wilson_Isochemical", append_entry);
37 #endif
38 }
39 //- end
40 
41 //- parameters class
43 //- end
44 
45 const std::string Fopr_Wilson_Isochemical::class_name = "Fopr_Wilson_Isochemical";
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, mu;
56  valarray<int> bc;
57 
58  int err = 0;
59  err += params.fetch_double("hopping_parameter", kappa);
60  err += params.fetch_double("isospin_chemical_potential", mu);
61  err += params.fetch_int_vector("boundary_condition", bc);
62 
63  if (err) {
64  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
65  abort();
66  }
67 
68 
69  set_parameters(kappa, mu, bc);
70 }
71 
72 
73 //====================================================================
74 void Fopr_Wilson_Isochemical::set_parameters(const double kappa,
75  const double mu,
76  const valarray<int> bc)
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, " mu = %8.4f\n", mu);
82  for (int dir = 0; dir < m_Ndim; ++dir) {
83  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
84  }
85 
86  //- range check
87  // NB. kappa,mu = 0 is allowed.
88  assert(bc.size() == m_Ndim);
89 
90  //- store values
91  m_kappa = kappa;
92  m_mu = mu;
93  m_exp_mu = exp(mu);
94 
95  m_boundary.resize(m_Ndim);
96  for (int dir = 0; dir < m_Ndim; ++dir) {
97  m_boundary[dir] = bc[dir];
98  }
99 
100  //- propagate parameters
101  m_fopr_w->set_parameters(kappa, bc);
102 }
103 
104 
105 //====================================================================
107 {
108  m_Ndim = CommonParameters::Ndim();
109 
110  m_boundary.resize(m_Ndim);
111  m_U = 0;
112 
113  m_fopr_w = new Fopr_Wilson(repr);
114 
115  int Nc = CommonParameters::Nc();
116  int Nd = CommonParameters::Nd();
117  int NinF = 2 * Nc * Nd;
118  int Nvol = CommonParameters::Nvol();
119 
120  m_vt.reset(NinF, Nvol, 1);
121  m_w2.reset(NinF, Nvol, 1);
122 }
123 
124 
125 //====================================================================
127 {
128  delete m_fopr_w;
129 }
130 
131 
132 //====================================================================
134 {
135  int Nvol = field_nvol();
136  int Nin = field_nin();
137  int Nex = field_nex();
138  Field v(Nin, Nvol, Nex);
139 
140  Dspc(w, f);
141 
142  v.set(0.0); // v = 0.0;
143  m_fopr_w->mult_up(3, v, f);
144  w.addpart_ex(0, v, 0, -m_kappa * m_exp_mu);
145 
146  v.set(0.0); // v = 0.0;
147  m_fopr_w->mult_dn(3, v, f);
148  w.addpart_ex(0, v, 0, -m_kappa / m_exp_mu);
149 }
150 
151 
152 //====================================================================
154 {
155  int Nvol = field_nvol();
156  int Nin = field_nin();
157  int Nex = field_nex();
158  Field v(Nin, Nvol, Nex);
159 
160  Dspc(w, f);
161 
162  v.set(0.0); // v = 0.0;
163  m_fopr_w->mult_up(3, v, f);
164  w.addpart_ex(0, v, 0, -m_kappa / m_exp_mu);
165 
166  v.set(0.0); // v = 0.0;
167  m_fopr_w->mult_dn(3, v, f);
168  w.addpart_ex(0, v, 0, -m_kappa * m_exp_mu);
169 }
170 
171 
172 //====================================================================
174 {
175  w.set(0.0); // w = 0.0;
176 
177  m_fopr_w->mult_up(0, w, f);
178  m_fopr_w->mult_dn(0, w, f);
179 
180  m_fopr_w->mult_up(1, w, f);
181  m_fopr_w->mult_dn(1, w, f);
182 
183  m_fopr_w->mult_up(2, w, f);
184  m_fopr_w->mult_dn(2, w, f);
185 
186  scal(w, -m_kappa); // w *= -m_kappa;
187  axpy(w, 1.0, f); // w += f;
188 }
189 
190 
191 //====================================================================
193 {
194  m_fopr_w->mult_gm5(v, f);
195 }
196 
197 
198 //====================================================================
200  const Field_F& w)
201 {
202  // Field vt(w.nin(), w.nvol(), w.nex());
203 
204  m_vt.set(0.0); // vt = 0.0;
205 
206  m_fopr_w->mult_up(mu, m_vt, (Field)w);
207 
208  return (Field_F)m_fopr_w->mult_gm5(m_vt);
209 }
210 
211 
212 //====================================================================
214 {
215  // Field w2(f.nin(), f.nvol(), f.nex());
216 
217  D(m_w2, f);
218  mult_gm5(w, m_w2);
219  Dminmu(m_w2, w);
220  mult_gm5(w, m_w2);
221 }
222 
223 
224 //====================================================================
226 {
227  // Field w2(f.nin(), f.nvol(), f.nex());
228 
229  mult_gm5(w, f);
230  Dminmu(m_w2, w);
231  mult_gm5(w, m_w2);
232 }
233 
234 
235 //====================================================================
237 {
238  // Field w2(f.nin(), f.nvol(), f.nex());
239 
240  D(m_w2, f);
241  mult_gm5(w, m_w2);
242 }
243 
244 
245 //====================================================================
247 {
248  // Field w2(f.nin(), f.nvol(), f.nex());
249 
250  Dminmu(m_w2, f);
251  mult_gm5(w, m_w2);
252 }
253 
254 
255 //====================================================================
256 //============================================================END=====
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:310
void Hdag(Field &, const Field &)
std::valarray< int > m_boundary
BridgeIO vout
Definition: bridgeIO.cpp:207
double m_kappa
hopping parameter
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:128
void general(const char *format,...)
Definition: bridgeIO.cpp:38
Container of Field-type object.
Definition: field.h:37
int field_nvol()
returns the volume for which the fermion operator is defined.
void mult_up(int mu, Field &w, const Field &v)
adding the hopping to nearest neighbor site in mu-th direction.
Class for parameters.
Definition: parameters.h:40
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
void Ddag(Field &, const Field &)
void addpart_ex(int ex, const Field &w, int exw)
Definition: field.h:162
Wilson-type fermion field.
Definition: field_F.h:37
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
void D(Field &, const Field &)
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
void mult_dn(int mu, Field &w, const Field &v)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:82
void set_parameters(const Parameters &params)
Definition: fopr_Wilson.cpp:48
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:193
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
const Field_F mult_gm5p(int mu, const Field_F &w)
static bool Register(const std::string &realm, const creator_callback &cb)
double m_mu
isospin chemical potential
void H(Field &, const Field &)
void Dspc(Field &, const Field &)
void DdagD(Field &, const Field &)
void Register_double(const string &, const double)
Definition: parameters.cpp:324
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
static const std::string class_name
const Field mult_gm5(const Field &f)
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:191
const Field mult_gm5(const Field &f)
Definition: fopr_Wilson.h:91