Bridge++  Ver.2.1.3
action_F_Ratio_lex.cpp
Go to the documentation of this file.
1 
16 
17 const std::string Action_F_Ratio_lex::class_name = "Action_F_Ratio_lex";
18 
19 //====================================================================
21 {
22  std::string vlevel;
23  if (!params.fetch_string("verbose_level", vlevel)) {
24  m_vl = vout.set_verbose_level(vlevel);
25  }
26 }
27 
28 
29 //====================================================================
31 {
32  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
33 }
34 
35 
36 //====================================================================
38 {
39  vout.general(m_vl, "%s:\n", class_name.c_str());
40 }
41 
42 
43 //====================================================================
45 {
46  m_U = U;
47 
48 #pragma omp parallel
49  {
52 
53  m_fopr->set_config(U);
55  }
56 
57 }
58 
59 
60 //====================================================================
62 {
63  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
65 
66  m_timer.reset();
67  m_timer.start();
68 
69  const int Nvol = CommonParameters::Nvol();
70  const int Ndim = CommonParameters::Ndim();
71 
72  const int NinF = m_fopr_prec->field_nin();
73  const int NvolF = m_fopr_prec->field_nvol();
74  const int NexF = m_fopr_prec->field_nex();
75  const int NPE = CommonParameters::NPE();
76  double Fpsf = 1.0/(double(NinF * NvolF * NexF) * double(NPE));
77 
78  assert(NvolF == Nvol);
79  m_psf.reset(NinF, NvolF, NexF);
80 
81  Field xi(NinF, NvolF, NexF);
82  rand->gauss_lex_global(xi);
83 
84  Field v1(NinF, NvolF, NexF);
85  Field v2(NinF, NvolF, NexF);
86 
87 #pragma omp parallel
88  {
91 
92  m_fopr->set_mode("H");
93  m_fopr->mult_dag(v2, xi);
94  }
95 
96  int Nconv;
97  double diff;
99  m_fprop_H_prec->invert_DdagD(v1, v2, Nconv, diff);
100  vout.general(m_vl, " Fprop_H: Nconv = %6d diff = %12.6e\n",
101  Nconv, diff);
102 
103  double H_psf = 0.0;
104 #pragma omp parallel
105  {
106  m_fopr_prec->set_mode("H");
107  m_fopr_prec->mult(m_psf, v1);
108 
109  const double H_psf1 = xi.norm2();
110  int ith = ThreadManager::get_thread_id();
111  if(ith == 0) H_psf = H_psf1;
112  }
113 
114  m_timer.stop();
115  double elapsed_time = m_timer.elapsed_sec();
116 
118  vout.general(m_vl, " H_Fratio = %18.8f\n", H_psf);
119  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf * Fpsf);
120  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
121 
122  return H_psf;
123 }
124 
125 
126 //====================================================================
128 {
129  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
131 
132  m_timer.reset();
133  m_timer.start();
134 
135  const int Nvol = CommonParameters::Nvol();
136  const int Ndim = CommonParameters::Ndim();
137 
138  const int NinF = m_fopr_prec->field_nin();
139  const int NvolF = m_fopr_prec->field_nvol();
140  const int NexF = m_fopr_prec->field_nex();
141  const int NPE = CommonParameters::NPE();
142 
143  double Fpsf = 1.0/(double(NinF * NvolF * NexF) * double(NPE));
144 
145  Field v1(NinF, NvolF, NexF);
146  Field v2(NinF, NvolF, NexF);
147 
148 #pragma omp parallel
149  {
152 
153  m_fopr_prec->set_mode("H");
154  m_fopr_prec->mult_dag(v1, m_psf);
155  }
156 
157  int Nconv;
158  double diff;
160  m_fprop_H->invert_DdagD(v2, v1, Nconv, diff);
161 
162  vout.general(m_vl, " Fprop_H: Nconv = %6d diff = %12.6e\n",
163  Nconv, diff);
164 
165  double H_psf = 0.0;
166 #pragma omp parallel
167  {
168  double H_psf1 = dot(v1, v2);
169  int ith = ThreadManager::get_thread_id();
170  if(ith == 0) H_psf = H_psf1;
171  }
172 
173  m_timer.stop();
174  double elapsed_time = m_timer.elapsed_sec();
175 
177  vout.general(m_vl, " H_Fratio = %18.8f\n", H_psf);
178  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf * Fpsf);
179  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
180 
181  return H_psf;
182 
183 }
184 
185 
186 //====================================================================
188 {
189  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
191 
192  m_timer.reset();
193  m_timer.start();
194 
195  const int Nin = m_U->nin();
196  const int Nvol = m_U->nvol();
197  const int Nex = m_U->nex();
198  const int Nc = CommonParameters::Nc();
199  const int Ndim = CommonParameters::Ndim();
200 
201  assert(force.nin() == Nin);
202  assert(force.nvol() == Nvol);
203  assert(force.nex() == Nex);
204 
205  const int NinF = m_fopr_prec->field_nin();
206  const int NvolF = m_fopr_prec->field_nvol();
207  const int NexF = m_fopr_prec->field_nex();
208 
209  Field v1(NinF, NvolF, NexF);
210  Field v2(NinF, NvolF, NexF);
211 
212 #pragma omp parallel
213  {
215 
217 
219 
221 
222  m_fopr_prec->set_mode("H");
223  m_fopr_prec->mult_dag(v1, m_psf);
224  }
225 
227 
228  int Nconv;
229  double diff;
230  m_fprop_MD->invert_DdagD(v2, v1, Nconv, diff);
231  vout.general(m_vl, " Fprop_MD: Nconv = %6d diff = %12.6e\n",
232  Nconv, diff);
233 
234  Field force_tmp(Nin, Nvol, Nex);
235 
236 #pragma omp parallel
237  {
239 
240  m_fopr_prec_force->set_mode("Hdag");
241  m_fopr_prec_force->force_core1(force_tmp, v2, m_psf);
242  axpy(force, -1.0, force_tmp);
243 
245  m_fopr_prec_force->force_core1(force_tmp, m_psf, v2);
246  axpy(force, -1.0, force_tmp);
247 
248  double Fave, Fmax, Fdev;
249  force.stat(Fave, Fmax, Fdev);
250 
251  vout.crucial(m_vl, "Fave = %12.6f Fmax = %12.6f Fdev = %12.6f\n",
252  Fave, Fmax, Fdev);
253  }
254 
256 
257  m_timer.stop();
258  double elapsed_time = m_timer.elapsed_sec();
259  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
260 
261 }
262 
263 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Action_F_Ratio_lex::langevin
double langevin(RandomNumbers *)
Langevis step.
Definition: action_F_Ratio_lex.cpp:61
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
AFopr::mult
virtual void mult(AFIELD &, const AFIELD &)
multiplies fermion operator to a given field.
Definition: afopr.h:95
Parameters
Class for parameters.
Definition: parameters.h:46
AForce_F::force_core1
virtual void force_core1(AFIELD &, const AFIELD &, const AFIELD &)
Action_F_Ratio_lex::m_fopr_prec_force
Force * m_fopr_prec_force
Definition: action_F_Ratio_lex.h:52
Action_F_Ratio_lex::set_config
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: action_F_Ratio_lex.cpp:44
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
AFopr::field_nex
virtual int field_nex()=0
returns the external degree of freedom of the fermion field.
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Field::nex
int nex() const
Definition: field.h:128
RandomNumbers
Base class of random number generators.
Definition: randomNumbers.h:43
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
action_F_Ratio_lex.h
AForce_F::set_mode
virtual void set_mode(const std::string &mode)
in Force, setting the mode is optional when H is nonhermitian.
Definition: aforce_F.h:82
Fprop::set_config
virtual void set_config(Field *)=0
Action_F_Ratio_lex::m_fopr_force
Force * m_fopr_force
Definition: action_F_Ratio_lex.h:54
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
dot
double dot(const Field &y, const Field &x)
Definition: field.cpp:577
AFopr::set_mode
virtual void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: afopr.h:81
Field::nin
int nin() const
Definition: field.h:126
AFopr::set_config
virtual void set_config(Field *)=0
sets the gauge configuration.
Field::norm2
double norm2() const
Definition: field.cpp:114
AFopr::mult_dag
virtual void mult_dag(AFIELD &, const AFIELD &)
hermitian conjugate of mult.
Definition: afopr.h:102
Action_F_Ratio_lex::m_timer
Timer m_timer
Definition: action_F_Ratio_lex.h:62
Timer::start
void start()
Definition: timer.cpp:44
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
Action_F_Ratio_lex::set_parameters
void set_parameters()
Definition: action_F_Ratio_lex.cpp:37
Action_F_Ratio_lex::calcH
double calcH()
calculate Hamiltonian of this action term.
Definition: action_F_Ratio_lex.cpp:127
AFopr::field_nvol
virtual int field_nvol()=0
returns the volume of the fermion field.
Action_F_Ratio_lex::force
void force(Field &)
returns force for molcular dynamical update of conjugate momenta.
Definition: action_F_Ratio_lex.cpp:187
Action_F_Ratio_lex::class_name
static const std::string class_name
Definition: action_F_Ratio_lex.h:44
Action_F_Ratio_lex::m_fopr
Fopr * m_fopr
Definition: action_F_Ratio_lex.h:53
threadManager.h
Field::nvol
int nvol() const
Definition: field.h:127
CommonParameters::NPE
static int NPE()
Definition: commonParameters.h:101
Field::reset
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
Definition: field.h:95
Action_F_Ratio_lex::m_fprop_MD
Fprop * m_fprop_MD
Definition: action_F_Ratio_lex.h:59
Fprop::invert_DdagD
virtual void invert_DdagD(Field &, const Field &, int &, double &)=0
AForce_F::set_config
virtual void set_config(Field *)=0
sets verbose level.
Action_F_Ratio_lex::m_U
Field * m_U
Definition: action_F_Ratio_lex.h:49
AForce_F::force_core
virtual void force_core(AFIELD &, const AFIELD &)
Action_F_Ratio_lex::m_fopr_prec
Fopr * m_fopr_prec
Definition: action_F_Ratio_lex.h:51
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Action_F_Ratio_lex::m_vl
Bridge::VerboseLevel m_vl
Definition: action_F_Ratio_lex.h:47
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Action_F_Ratio_lex::m_label
std::string m_label
Definition: action_F_Ratio_lex.h:56
Action_F_Ratio_lex::m_psf
Field m_psf
Definition: action_F_Ratio_lex.h:55
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Field
Container of Field-type object.
Definition: field.h:46
RandomNumbers::gauss_lex_global
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
Definition: randomNumbers.cpp:95
AFopr::field_nin
virtual int field_nin()=0
returns the on-site degree of freedom of the fermion field.
Timer::elapsed_sec
double elapsed_sec() const
Definition: timer.cpp:107
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
Action_F_Ratio_lex::m_fprop_H_prec
Fprop * m_fprop_H_prec
Definition: action_F_Ratio_lex.h:58
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Action_F_Ratio_lex::m_fprop_H
Fprop * m_fprop_H
Definition: action_F_Ratio_lex.h:60
Timer::stop
void stop()
Definition: timer.cpp:69
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216
Timer::reset
void reset()
Definition: timer.cpp:97
Action_F_Ratio_lex::get_parameters
void get_parameters(Parameters &) const
Definition: action_F_Ratio_lex.cpp:30