Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Wilson_SF.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Wilson_SF.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_int_vector("boundary_condition", std::valarray<int>());
28 
29  param.Register_string("verbose_level", "NULL");
30  }
31 
32 
33 #ifdef USE_PARAMETERS_FACTORY
34  bool init_param = ParametersFactory::Register("Fopr.Wilson_SF", append_entry);
35 #endif
36 }
37 //- end
38 
39 //- parameters class
41 //- end
42 
43 const std::string Fopr_Wilson_SF::class_name = "Fopr_Wilson_SF";
44 
45 //====================================================================
47 {
48  const string str_vlevel = params.get_string("verbose_level");
49 
50  m_vl = vout.set_verbose_level(str_vlevel);
51 
52  //- fetch and check input parameters
53  double kappa;
54  valarray<int> bc;
55 
56  int err = 0;
57  err += params.fetch_double("hopping_parameter", kappa);
58  err += params.fetch_int_vector("boundary_condition", bc);
59 
60  if (err) {
61  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
62  abort();
63  }
64 
65  set_parameters(kappa, bc);
66 }
67 
68 
69 //====================================================================
70 void Fopr_Wilson_SF::set_parameters(const double kappa, const std::valarray<int> bc)
71 {
72  //- print input parameters
73  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
74  vout.general(m_vl, " kappa = %8.4f\n", kappa);
75  for (int dir = 0; dir < m_Ndim; ++dir) {
76  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
77  }
78 
79  //- range check
80  // NB. kappa = 0 is allowed.
81  assert(bc.size() == m_Ndim);
82 
83  //- store values
84  m_kappa = kappa;
85 
86  m_boundary.resize(m_Ndim);
87  for (int mu = 0; mu < m_Ndim; ++mu) {
88  m_boundary[mu] = bc[mu];
89  }
90 
91  //- propagate parameters
93 }
94 
95 
96 //====================================================================
97 void Fopr_Wilson_SF::DdagD(Field& w, const Field& f)
98 {
99  Field w2(f.nin(), f.nvol(), f.nex());
100 
101  D(w2, f);
102  mult_gm5(w, w2);
103  D(w2, w);
104  mult_gm5(w, w2);
105 }
106 
107 
108 //====================================================================
109 void Fopr_Wilson_SF::Ddag(Field& w, const Field& f)
110 {
111  Field w2(f.nin(), f.nvol(), f.nex());
112 
113  mult_gm5(w, f);
114  D(w2, w);
115  mult_gm5(w, w2);
116 }
117 
118 
119 //====================================================================
120 void Fopr_Wilson_SF::H(Field& w, const Field& f)
121 {
122  Field w2(f.nin(), f.nvol(), f.nex());
123 
124  D(w2, f);
125  mult_gm5(w, w2);
126 }
127 
128 
129 //====================================================================
130 void Fopr_Wilson_SF::D(Field& w, const Field& f)
131 {
132  Field w2(f);
133 
135  m_fopr_w->D(w, w2);
137 }
138 
139 
140 //====================================================================
142 {
143  Field_F w = H(H(f));
144 
145  return w;
146 }
147 
148 
149 //====================================================================
151 {
152  Field_F w(f);
153 
154  w = (Field_F)mult_gm5((Field)w);
155  w = H(w);
156 
157  return w;
158 }
159 
160 
161 //====================================================================
163 {
164  Field_F w = D(f);
165 
166  w = (Field_F)mult_gm5((Field)w);
167 
168  return w;
169 }
170 
171 
172 //====================================================================
174 {
175  int Nvol = f.nvol();
176  int Nex = f.nex();
177  Field_F w(Nvol, Nex);
178 
179  Field_F w2(f);
180 
182 
183  // w = m_fopr_w->D(f);
184  m_fopr_w->set_mode("D");
185  w = (Field_F)m_fopr_w->mult(w2);
187 
188  return w;
189 }
190 
191 
192 //====================================================================
194 {
195  Field_F vt(w.nvol(), w.nex());
196  Field_F w2(w);
197 
199  vt = m_fopr_w->mult_gm5p(mu, w2);
201 
202  return vt;
203 }
204 
205 
206 //====================================================================
207 
212 /*
213 void Fopr_Wilson_SF::set_boundary_zero(Field& f){
214  if(comm->ipe(3)==0){
215  for(int site = 0; site < Svol; ++site){
216  for(int s = 0; s < m_Nd; ++s){
217  for(int cc = 0; cc < m_Nc2; ++cc){
218  f.set(cc+m_Nc2*s, site, 0, 0.0);
219  }
220  }
221  }
222  }
223 }
224 */
225 
226 //====================================================================
227 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:207
const Field_F D(const Field_F &)
const Field_F H(const Field_F &)
Fopr_Wilson * m_fopr_w
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
void general(const char *format,...)
Definition: bridgeIO.cpp:38
void D(Field &w, const Field &v)
const Field mult(const Field &f)
multiplies fermion operator to a given field and returns the resultant field.
Definition: fopr_Wilson.h:75
Container of Field-type object.
Definition: field.h:37
const Field mult_gm5(const Field &w)
int nvol() const
Definition: field.h:101
Class for parameters.
Definition: parameters.h:40
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
const Field_F mult_gm5p(int mu, const Field_F &w)
this function is used for derivatives in force calculation.
Wilson-type fermion field.
Definition: field_F.h:37
std::valarray< int > m_boundary
static const std::string class_name
const Field_F DdagD(const Field_F &)
int nin() const
Definition: field.h:100
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
void set_parameters(const Parameters &params)
Definition: fopr_Wilson.cpp:48
int nex() const
Definition: field.h:102
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr_Wilson.cpp:91
static bool Register(const std::string &realm, const creator_callback &cb)
void set_boundary_zero(Field &f)
Definition: field_F_SF.h:56
const Field_F Ddag(const Field_F &)
void Register_double(const string &, const double)
Definition: parameters.cpp:324
Field_F_SF set_zero
In order to set the boundary field to zero.
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
const Field_F mult_gm5p(int mu, const Field_F &w)
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 VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
void set_parameters(const Parameters &params)