Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
integrator_Leapfrog.cpp
Go to the documentation of this file.
1 
14 #include "integrator_Leapfrog.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 //- parameter entries
21 namespace {
22  void append_entry(Parameters& param)
23  {
24  param.Register_int("level", 0);
25  param.Register_double("step_size", 0.0);
26  param.Register_int("number_of_steps", 0);
27 
28  param.Register_string("verbose_level", "NULL");
29  }
30 
31 
32 #ifdef USE_PARAMETERS_FACTORY
33  bool init_param = ParametersFactory::Register("Integrator.Leapfrog", append_entry);
34 #endif
35 }
36 //- end
37 
38 //- parameters class
40 //- end
41 
42 const std::string Integrator_Leapfrog::class_name = "Integrator_Leapfrog";
43 
44 //====================================================================
46 {
47  const string str_vlevel = params.get_string("verbose_level");
48 
49  m_vl = vout.set_verbose_level(str_vlevel);
50 
51  //- fetch and check input parameters
52  int level;
53  double Estep;
54  int Nstep;
55 
56  int err = 0;
57  err += params.fetch_int("level", level);
58  err += params.fetch_double("step_size", Estep);
59  err += params.fetch_int("number_of_steps", Nstep);
60 
61  if (err) {
62  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
63  abort();
64  }
65 
66 
67  set_parameters(level, Estep, Nstep);
68 }
69 
70 
71 //====================================================================
72 void Integrator_Leapfrog::set_parameters(int level, double Estep, int Nstep)
73 {
74  //- print input parameters
75  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
76  vout.general(m_vl, " Level: %4d\n", level);
77  vout.general(m_vl, " Estep = %10.6f\n", Estep);
78  vout.general(m_vl, " Nstep = %4d\n", Nstep);
79  vout.general(m_vl, " Number of actions: %4d\n", m_action.size());
80 
81  //- range check
82  // NB. level,Estep,Nstep == 0 is allowed.
83 
84  //- store values
85  m_Estep = Estep;
86  m_Nstep = Nstep;
87  m_level = level;
88 }
89 
90 
91 //====================================================================
93 {
94  int Nin = U.nin();
95  int Nvol = U.nvol();
96  int Nex = U.nex();
97  int Nc = CommonParameters::Nc();
98 
99  double estep = m_Estep;
100  double esteph = 0.5 * estep;
101  double estep2;
102 
103  Field force(Nin, Nvol, Nex), force1(Nin, Nvol, Nex);
104 
105 
106  vout.general(m_vl, "Integration level-%d start.\n", m_level);
107 
108  // Initial half step of update of iP
109  if (m_Nstep > 0) {
110  int istep = 0;
111  vout.general(m_vl, "istep = %d\n", istep);
112  force = 0.0;
113  for (int i = 0; i < m_action.size(); ++i) {
114  force1 = m_action[i]->force();
115  force += esteph * force1;
116  }
117  iP += (Field_G)force;
118  }
119 
120  // Molecular dynamics step
121  for (int istep = 1; istep < m_Nstep + 1; istep++) {
122  vout.general(m_vl, "istep = %d\n", istep);
123 
124  m_integ_next->evolve(iP, U);
125 
126  estep2 = estep;
127  if (istep == m_Nstep) estep2 = esteph;
128 
129  force = 0.0;
130  for (int i = 0; i < m_action.size(); ++i) {
131  force1 = m_action[i]->force();
132  force += estep2 * force1;
133  }
134  iP += (Field_G)force;
135  } // here istep loop ends
136 
137  vout.general(m_vl, "Integration level-%d finished.\n", m_level);
138 }
139 
140 
141 //====================================================================
142 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:207
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
void general(const char *format,...)
Definition: bridgeIO.cpp:38
void Register_int(const string &, const int)
Definition: parameters.cpp:331
Container of Field-type object.
Definition: field.h:37
void set_parameters(const Parameters &params)
int nvol() const
Definition: field.h:101
Class for parameters.
Definition: parameters.h:40
int nin() const
Definition: field.h:100
SU(N) gauge field.
Definition: field_G.h:36
int nex() const
Definition: field.h:102
virtual void evolve(Field_G &iP, Field_G &U)=0
static const std::string class_name
Bridge::VerboseLevel m_vl
Definition: integrator.h:47
std::valarray< Action * > m_action
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
static bool Register(const std::string &realm, const creator_callback &cb)
void Register_double(const string &, const double)
Definition: parameters.cpp:324
void evolve(Field_G &iP, Field_G &U)
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
int fetch_int(const string &key, int &val) const
Definition: parameters.cpp:141
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191