Bridge++  Ver. 1.3.x
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_int("number_of_steps", 0);
26 
27  param.Register_string("verbose_level", "NULL");
28  }
29 
30 
31 #ifdef USE_PARAMETERS_FACTORY
32  bool init_param = ParametersFactory::Register("Integrator.Leapfrog", append_entry);
33 #endif
34 }
35 //- end
36 
37 //- parameters class
39 //- end
40 
41 const std::string Integrator_Leapfrog::class_name = "Integrator_Leapfrog";
42 
43 //====================================================================
45 {
46  const string str_vlevel = params.get_string("verbose_level");
47 
48  m_vl = vout.set_verbose_level(str_vlevel);
49 
50  //- fetch and check input parameters
51  int level;
52  int Nstep;
53 
54  int err = 0;
55  err += params.fetch_int("level", level);
56  err += params.fetch_int("number_of_steps", Nstep);
57 
58  if (err) {
59  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
60  exit(EXIT_FAILURE);
61  }
62 
63  set_parameters(level, Nstep);
64 }
65 
66 
67 //====================================================================
68 void Integrator_Leapfrog::set_parameters(int level, int Nstep)
69 {
70  //- print input parameters
71  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
72  vout.general(m_vl, " Level: %4d\n", level);
73  vout.general(m_vl, " Nstep = %4d\n", Nstep);
74 
75  //- range check
76  // NB. level,Estep,Nstep == 0 is allowed.
77 
78  //- store values
79  m_Nstep = Nstep;
80  m_level = level;
81 }
82 
83 
84 //====================================================================
86 {
87  m_level = level;
88 }
89 
90 
91 //====================================================================
93 {
94  m_Nstep = nstep;
95 }
96 
97 
98 //====================================================================
99 void Integrator_Leapfrog::set_parameter_nsteps(const std::vector<int>& nsteps)
100 {
101  if (nsteps.size() > 0) {
102  set_parameter_nstep(nsteps[0]);
103 
104  // transfer to lower levels
105  if (m_update_u && (nsteps.size() > 1)) {
106  std::vector<int> next_steps(nsteps.begin() + 1, nsteps.end());
107  m_update_u->set_parameter_nsteps(next_steps);
108  }
109  }
110 }
111 
112 
113 //====================================================================
114 void Integrator_Leapfrog::evolve(const double step_size, Field_G& iP, Field_G& U)
115 {
116  int Nin = U.nin();
117  int Nvol = U.nvol();
118  int Nex = U.nex();
119  int Nc = CommonParameters::Nc();
120 
121  vout.general(m_vl, "Integration level-%d start.\n", m_level);
122 
123  if (m_Nstep > 0) {
124  double estep = step_size / m_Nstep;
125 
126  // initial half step
127  m_update_p->evolve(estep * 0.5, iP, U);
128 
129  for (int istep = 1; istep <= m_Nstep; ++istep) {
130  vout.general(m_vl, "istep = %d\n", istep);
131 
132  m_update_u->evolve(estep, iP, U);
133 
134  if (istep < m_Nstep) {
135  m_update_p->evolve(estep, iP, U);
136  }
137  }
138 
139  // last half step
140  m_update_p->evolve(estep * 0.5, iP, U);
141  } else {
142  vout.general(m_vl, "Nstep is zero. skip.\n");
143  }
144 
145  vout.general(m_vl, "Integration level-%d finished.\n", m_level);
146 }
147 
148 
149 //====================================================================
150 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
void general(const char *format,...)
Definition: bridgeIO.cpp:65
void Register_int(const string &, const int)
Definition: parameters.cpp:330
void set_parameters(const Parameters &params)
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:38
int nin() const
Definition: field.h:115
SU(N) gauge field.
Definition: field_G.h:38
int nex() const
Definition: field.h:117
virtual void evolve(const double step_size, Field_G &iP, Field_G &U)=0
static const std::string class_name
Bridge::VerboseLevel m_vl
Definition: integrator.h:62
void set_parameter_nsteps(const std::vector< int > &nsteps)
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
void set_parameter_nstep(const int nstep)
static bool Register(const std::string &realm, const creator_callback &cb)
void set_parameter_level(const int level)
void evolve(const double step_size, Field_G &iP, Field_G &U)
string get_string(const string &key) const
Definition: parameters.cpp:87
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:28
virtual void set_parameter_nsteps(const std::vector< int > &nsteps)
Definition: integrator.h:49