Bridge++  Ver.2.1.3
action_F_Standard_lex.cpp
Go to the documentation of this file.
1 
12 
13 const std::string Action_F_Standard_lex::class_name
14  = "Action_F_Standard_lex";
15 
16 //====================================================================
18 {
19  std::string vlevel;
20  if (!params.fetch_string("verbose_level", vlevel)) {
21  m_vl = vout.set_verbose_level(vlevel);
22  }
23 }
24 
25 
26 //====================================================================
28 {
29  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
30 }
31 
32 
33 //====================================================================
35 {
36  m_U = U;
37 
38 #pragma omp parallel
39  {
40  m_fopr->set_config(U);
42  }
43 
44 }
45 
46 
47 //====================================================================
49 {
50  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
52 
53  m_timer.reset();
54  m_timer.start();
55 
56  const int Nvol = CommonParameters::Nvol();
57 
58  const int NinF = m_fopr->field_nin();
59  const int NvolF = m_fopr->field_nvol();
60  const int NexF = m_fopr->field_nex();
61  const int NPE = CommonParameters::NPE();
62  double Fpsf = 1.0/(double(NinF * NvolF * NexF) * double(NPE));
63 
64  assert(NvolF == Nvol);
65  m_psf.reset(NinF, NvolF, NexF);
66 
67  Field xi(NinF, NvolF, NexF);
68  rand->gauss_lex_global(xi);
69 
70  double H_psf = 0.0;
71 
72 #pragma omp parallel
73  {
75  m_fopr->set_mode("Ddag");
76 
77  m_fopr->mult(m_psf, xi);
78 
79  const double xi2 = xi.norm();
80  const double H_psf1 = xi2 * xi2;
81 
82  int ith = ThreadManager::get_thread_id();
83  if(ith == 0) H_psf = H_psf1;
84  }
85 
86  m_timer.stop();
87  double elapsed_time = m_timer.elapsed_sec();
88 
90  vout.general(m_vl, " H_Fstandard = %18.8f\n", H_psf);
91  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf * Fpsf);
92  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
93 
94  return H_psf;
95 }
96 
97 
98 //====================================================================
100 {
101  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
103 
104  m_timer.reset();
105  m_timer.start();
106 
107  const int NinF = m_fopr->field_nin();
108  const int NvolF = m_fopr->field_nvol();
109  const int NexF = m_fopr->field_nex();
110  const int NPE = CommonParameters::NPE();
111  double Fpsf = 1.0/(double(NinF * NvolF * NexF) * double(NPE));
112 
113  Field v1(NinF, NvolF, NexF);
114  int Nconv;
115  double diff;
117  m_fprop_H->invert_DdagD(v1, m_psf, Nconv, diff);
118 
119  vout.general(m_vl, " Fprop_H: Nconv = %6d diff = %12.6e\n",
120  Nconv, diff);
121 
122  double H_psf = 0.0;
123 
124 #pragma omp parallel
125  {
126  const double H_psf1 = dot(v1, m_psf);
127  int ith = ThreadManager::get_thread_id();
128  if(ith == 0) H_psf = H_psf1;
129  }
130 
131  m_timer.stop();
132  double elapsed_time = m_timer.elapsed_sec();
133 
135  vout.general(m_vl, " H_Fstandard = %18.8f\n", H_psf);
136  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf * Fpsf);
137  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
138 
139  return H_psf;
140 }
141 
142 
143 //====================================================================
145 {
146  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
148 
149  m_timer.reset();
150  m_timer.start();
151 
152  const int Nin = m_U->nin();
153  const int Nvol = m_U->nvol();
154  const int Nex = m_U->nex();
155 
156  assert(force.nin() == Nin);
157  assert(force.nvol() == Nvol);
158  assert(force.nex() == Nex);
159 
160  const int NinF = m_fopr->field_nin();
161  const int NvolF = m_fopr->field_nvol();
162  const int NexF = m_fopr->field_nex();
163 
164  Field eta(NinF, NvolF, NexF);
165  int Nconv;
166  double diff;
168  m_fprop_MD->invert_DdagD(eta, m_psf, Nconv, diff);
169  vout.general(m_vl, " Fprop_MD: Nconv = %6d diff = %12.6e\n",
170  Nconv, diff);
171 
172 #pragma omp parallel
173  {
176 
177  double Fave, Fmax, Fdev;
178  force.stat(Fave, Fmax, Fdev);
179 
180  vout.general(m_vl,"Fave = %12.6f Fmax = %12.6f Fdev = %12.6f\n",
181  Fave, Fmax, Fdev);
182  }
183 
185 
186  m_timer.stop();
187  double elapsed_time = m_timer.elapsed_sec();
188  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
189 
190 }
191 
192 
193 //============================================================END=====
Action_F_Standard_lex::m_fopr
Fopr * m_fopr
Definition: action_F_Standard_lex.h:45
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Action_F_Standard_lex::get_parameters
void get_parameters(Parameters &) const
Definition: action_F_Standard_lex.cpp:27
Action_F_Standard_lex::class_name
static const std::string class_name
Definition: action_F_Standard_lex.h:40
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
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.
Action_F_Standard_lex::set_config
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: action_F_Standard_lex.cpp:34
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_Standard_lex.h
Action_F_Standard_lex::m_fprop_H
Fprop * m_fprop_H
Definition: action_F_Standard_lex.h:51
Fprop::set_config
virtual void set_config(Field *)=0
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
Action_F_Standard_lex::m_label
std::string m_label
Definition: action_F_Standard_lex.h:48
AFopr::set_config
virtual void set_config(Field *)=0
sets the gauge configuration.
Action_F_Standard_lex::set_parameters
void set_parameters(const Parameters &)
Definition: action_F_Standard_lex.cpp:17
Timer::start
void start()
Definition: timer.cpp:44
AFopr::field_nvol
virtual int field_nvol()=0
returns the volume of the fermion field.
Field::norm
double norm() const
Definition: field.h:226
threadManager.h
Field::nvol
int nvol() const
Definition: field.h:127
Action_F_Standard_lex::calcH
double calcH()
calculate Hamiltonian of this action term.
Definition: action_F_Standard_lex.cpp:99
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
Fprop::invert_DdagD
virtual void invert_DdagD(Field &, const Field &, int &, double &)=0
Action_F_Standard_lex::force
void force(Field &)
returns force for molcular dynamical update of conjugate momenta.
Definition: action_F_Standard_lex.cpp:144
AForce_F::set_config
virtual void set_config(Field *)=0
sets verbose level.
AForce_F::force_core
virtual void force_core(AFIELD &, const AFIELD &)
Action_F_Standard_lex::m_fprop_MD
Fprop * m_fprop_MD
Definition: action_F_Standard_lex.h:50
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Action_F_Standard_lex::m_vl
Bridge::VerboseLevel m_vl
Definition: action_F_Standard_lex.h:43
Action_F_Standard_lex::m_U
Field * m_U
Definition: action_F_Standard_lex.h:53
Action_F_Standard_lex::langevin
double langevin(RandomNumbers *)
Langevis step.
Definition: action_F_Standard_lex.cpp:48
Action_F_Standard_lex::m_timer
Timer m_timer
Definition: action_F_Standard_lex.h:55
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Action_F_Standard_lex::m_fopr_force
Force * m_fopr_force
Definition: action_F_Standard_lex.h:46
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_Standard_lex::m_psf
Field m_psf
Definition: action_F_Standard_lex.h:47
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
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