Bridge++  Ver.2.1.3
action_F_Standard_SF.cpp
Go to the documentation of this file.
1 
10 #include "action_F_Standard_SF.h"
11 
12 const std::string Action_F_Standard_SF::class_name = "Action_F_Standard_SF";
13 
14 //====================================================================
16 {
18 
19  std::string vlevel;
20  if (!params.fetch_string("verbose_level", vlevel)) {
21  m_vl = vout.set_verbose_level(vlevel);
22  } else {
24  }
25 
26  vout.general(m_vl, "%s: construction\n", class_name.c_str());
28 
29  set_parameters(params);
30 
31  const int Niter = 100;
32  const int Nrestart = 40;
33  const double Stop_cond = 1.0e-24;
34  const std::string solver_type = "CG";
35 
36  m_solver = Solver::New(solver_type, m_fopr);
37  m_solver->set_parameters(Niter, Nrestart, Stop_cond);
38 
40  vout.general(m_vl, "%s: construction finished.\n",
41  class_name.c_str());
42 
43 }
44 
45 
46 //====================================================================
48 {
50 
52 
53  vout.general(m_vl, "%s: construction\n", class_name.c_str());
55 
56  const int Niter = 100;
57  const int Nrestart = 40;
58  const double Stop_cond = 1.0e-24;
59  const std::string solver_type = "CG";
60 
61  m_solver = Solver::New(solver_type, m_fopr);
62  m_solver->set_parameters(Niter, Nrestart, Stop_cond);
63 
65  vout.general(m_vl, "%s: construction finished.\n",
66  class_name.c_str());
67 }
68 
69 
70 //====================================================================
72 {
73  delete m_solver;
74 }
75 
76 
77 //====================================================================
79 {
80  std::string vlevel;
81  if (!params.fetch_string("verbose_level", vlevel)) {
82  m_vl = vout.set_verbose_level(vlevel);
83  }
84 }
85 
86 
87 //====================================================================
89 {
90  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
91 }
92 
93 
94 //====================================================================
96 {
97  m_U = U;
98 
99 #pragma omp parallel
100  {
101  m_fopr->set_config(U);
102  m_forceF->set_config(U);
103  }
104 
105 }
106 
107 //====================================================================
109 {
110  const int Nvol = CommonParameters::Nvol();
111  const int Ndim = CommonParameters::Ndim();
112 
113  const int NinF = m_fopr->field_nin();
114  const int NvolF = m_fopr->field_nvol();
115  const int NexF = m_fopr->field_nex();
116  const int size_psf = NinF * NvolF * NexF * CommonParameters::NPE();
117 
118  assert(NvolF == Nvol);
119  m_psf.reset(NinF, NvolF, NexF);
120 
121  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
123 
124  Field xi(NinF, NvolF, NexF);
125  rand->gauss_lex_global(xi);
126 
127 #pragma omp parallel
128  {
130  m_fopr->set_mode("Ddag");
131  m_fopr->mult(m_psf, xi);
132  }
133 
135 
136  const double xi2 = xi.norm();
137  const double H_psf = xi2 * xi2;
138 
140 
141  vout.general(m_vl, " H_Fstandard = %18.8f\n", H_psf);
142  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf / size_psf);
143 
144  return H_psf;
145 }
146 
147 
148 //====================================================================
150 {
151  const int Nvol = CommonParameters::Nvol();
152  const int Ndim = CommonParameters::Ndim();
153 
154  const int NinF = m_fopr->field_nin();
155  const int NvolF = m_fopr->field_nvol();
156  const int NexF = m_fopr->field_nex();
157  const int size_psf = NinF * NvolF * NexF * CommonParameters::NPE();
158 
159  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
161 
162  Field v1(NinF, NvolF, NexF);
163  double H_psf = 0.0;
164 
165 #pragma omp parallel
166  {
168  m_fopr->set_mode("DdagD");
169 
170  int Nconv;
171  double diff;
172  m_solver->solve(v1, m_psf, Nconv, diff);
173 
174  vout.general(m_vl, " Nconv = %d diff = %.8e\n", Nconv, diff);
175 
178 
179  const double H_psf1 = dot(v1, m_psf);
180 
181  int ith = ThreadManager::get_thread_id();
182  if (ith == 0) H_psf = H_psf1;
183  }
184 
186  vout.general(m_vl, " H_Fstandard_SF = %18.8f\n", H_psf);
187  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf / size_psf);
188 
189  return H_psf;
190 }
191 
192 
193 //====================================================================
195 {
196  const int Nin = m_U->nin();
197  const int Nvol = m_U->nvol();
198  const int Nex = m_U->nex();
199  const int Nc = CommonParameters::Nc();
200  const int Ndim = CommonParameters::Ndim();
201 
202  assert(force.nin() == Nin);
203  assert(force.nvol() == Nvol);
204  assert(force.nex() == Nex);
205 
206  const int NinF = m_fopr->field_nin();
207  const int NvolF = m_fopr->field_nvol();
208  const int NexF = m_fopr->field_nex();
209 
210  vout.general(m_vl, "%s: %s\n", class_name.c_str(), m_label.c_str());
212 
213  Field eta(NinF, NvolF, NexF);
214  Field_G force1(Nvol, Nex);
215 
216 #pragma omp parallel
217  {
219  m_fopr->set_mode("DdagD");
220 
221  int Nconv;
222  double diff;
223  m_solver->solve(eta, m_psf, Nconv, diff);
224 
225  vout.general(m_vl, " Solver: Nconv = %6d diff = %12.6e\n",
226  Nconv, diff);
227 
229 
230  m_forceF->force_core(force1, eta);
231 
233 
234  copy(force, force1);
235 #pragma omp barrier
236 
237  double Fave, Fmax, Fdev;
238  force.stat(Fave, Fmax, Fdev);
239  vout.general(m_vl, "Fave = %12.6f Fmax = %12.6f Fdev = %12.6f\n",
240  Fave, Fmax, Fdev);
241  }
242 
244 
245 }
246 
247 
248 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Action_F_Standard_SF::m_solver
Solver * m_solver
Definition: action_F_Standard_SF.h:72
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Action_F_Standard_SF::class_name
static const std::string class_name
Definition: action_F_Standard_SF.h:53
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
Action_F_Standard_SF::m_psf
Field m_psf
Definition: action_F_Standard_SF.h:70
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
Solver::set_parameters
virtual void set_parameters(const Parameters &params)=0
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Action_F_Standard_SF::get_parameters
void get_parameters(Parameters &) const
Definition: action_F_Standard_SF.cpp:88
dot
double dot(const Field &y, const Field &x)
Definition: field.cpp:577
action_F_Standard_SF.h
Action_F_Standard_SF::m_forceF
Force * m_forceF
Definition: action_F_Standard_SF.h:68
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_SF::set_config
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: action_F_Standard_SF.cpp:95
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
AFopr::set_config
virtual void set_config(Field *)=0
sets the gauge configuration.
Solver::solve
virtual void solve(Field &solution, const Field &source, int &Nconv, double &diff)=0
Field_SF::set_boundary_zero
void set_boundary_zero(Field_G &u)
Definition: field_SF.cpp:96
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
AFopr::field_nvol
virtual int field_nvol()=0
returns the volume of the fermion field.
Field::norm
double norm() const
Definition: field.h:226
Action_F_Standard_SF::set_parameters
void set_parameters()
Action_F_Standard_SF::m_U
Field * m_U
Definition: action_F_Standard_SF.h:74
Action_F_Standard_SF::tidyup
void tidyup()
Definition: action_F_Standard_SF.cpp:71
Action_F_Standard_SF::m_vl
Bridge::VerboseLevel m_vl
Definition: action_F_Standard_SF.h:60
Field::nvol
int nvol() const
Definition: field.h:127
Action_F_Standard_SF::m_fopr
Fopr * m_fopr
Definition: action_F_Standard_SF.h:66
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
AForce_F::set_config
virtual void set_config(Field *)=0
sets verbose level.
Field_SF::set_boundary_spatial_link_zero
void set_boundary_spatial_link_zero(Field_G &u)
Definition: field_SF.cpp:151
Action_F_Standard_SF::langevin
double langevin(RandomNumbers *)
Langevis step.
Definition: action_F_Standard_SF.cpp:108
AForce_F::force_core
virtual void force_core(AFIELD &, const AFIELD &)
Action_F_Standard_SF::calcH
double calcH()
calculate Hamiltonian of this action term.
Definition: action_F_Standard_SF.cpp:149
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
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.
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
Field_G
SU(N) gauge field.
Definition: field_G.h:38
Action_F_Standard_SF::force
void force(Field &)
returns force for molcular dynamical update of conjugate momenta.
Definition: action_F_Standard_SF.cpp:194
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Action_F_Standard_SF::m_label
std::string m_label
Definition: action_F_Standard_SF.h:62
Action_F_Standard_SF::init
void init()
Definition: action_F_Standard_SF.cpp:47
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
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