Bridge++  Ver. 1.3.x
integrator_UpdateU.cpp
Go to the documentation of this file.
1 
14 #include "integrator_UpdateU.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 //- parameter entry
21 namespace {
22  void append_entry(Parameters& param)
23  {
24  param.Register_int("order_of_exp_iP", 0);
25 
26  param.Register_string("verbose_level", "NULL");
27  }
28 
29 
30 #ifdef USE_PARAMETERS_FACTORY
31  bool init_param = ParametersFactory::Register("Integrator.UpdateU", append_entry);
32 #endif
33 }
34 //- end
35 
36 //- parameters class
38 //- end
39 
40 const std::string Integrator_UpdateU::class_name = "Integrator_UpdateU";
41 
42 //====================================================================
44 {
45  const string str_vlevel = params.get_string("verbose_level");
46 
47  m_vl = vout.set_verbose_level(str_vlevel);
48 
49  //- fetch and check input parameters
50  int Nprec;
51 
52  int err = 0;
53  err += params.fetch_int("order_of_exp_iP", Nprec);
54 
55  if (err) {
56  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
57  exit(EXIT_FAILURE);
58  }
59 
60  set_parameters(Nprec);
61 }
62 
63 
64 //====================================================================
66 {
67  //- print input parameters
68  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
69  vout.general(m_vl, " Nprec = %d\n", Nprec);
70 
71  //- range check
72  int err = 0;
73  err += ParameterCheck::non_zero(Nprec);
74 
75  if (err) {
76  vout.crucial(m_vl, "%s: parameter range check failed.\n", class_name.c_str());
77  exit(EXIT_FAILURE);
78  }
79 
80  //- store values
81  m_Nprec = Nprec;
82 }
83 
84 
85 //====================================================================
87 {
88  m_Nprec = nprec;
89 }
90 
91 
92 //====================================================================
93 namespace {
94  // w = exp(alpha * v) * u
95  // = (u + alpha * v * (u + alpha/2 * v * ( ... (u + alpha/n * v * u) ... )
96  inline
97  void mat_exp(Mat_SU_N& w, const Mat_SU_N& v, const Mat_SU_N& u, const double alpha, const int nprec)
98  {
99  w = u;
100 
101  for (int i = 0; i < nprec; ++i) {
102  double exf = alpha / (nprec - i);
103 
104  w = v * w;
105  w *= exf;
106  w += u;
107  }
108 
109  w.reunit();
110  }
111 }
112 
113 //====================================================================
114 void Integrator_UpdateU::evolve(const double step_size, Field_G& iP, Field_G& U)
115 {
116  int Nvol = U.nvol();
117  int Nex = U.nex();
118  int Nc = CommonParameters::Nc();
119 
120  Mat_SU_N ut(Nc);
121 
122  for (int ex = 0; ex < Nex; ++ex) {
123  for (int site = 0; site < Nvol; ++site) {
124  mat_exp(ut, iP.mat(site, ex), U.mat(site, ex), step_size, m_Nprec);
125 
126  U.set_mat(site, ex, ut);
127  }
128  }
129 
130  notify_update();
131 }
132 
133 
134 //====================================================================
136 {
137  for (size_t i = 0, n = m_integs.size(); i < n; ++i) {
138  m_integs[i]->invalidate_cache();
139  }
140  for (size_t i = 0, n = m_director.size(); i < n; ++i) {
141  m_director[i]->notify_linkv();
142  }
143 }
144 
145 
146 //====================================================================
147 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
void set_parameters(const Parameters &params)
void set_parameter_nprec(const int Nprec)
void general(const char *format,...)
Definition: bridgeIO.cpp:65
void Register_int(const string &, const int)
Definition: parameters.cpp:330
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:38
Mat_SU_N & reunit()
Definition: mat_SU_N.h:71
static const std::string class_name
SU(N) gauge field.
Definition: field_G.h:38
int nex() const
Definition: field.h:117
Bridge::VerboseLevel m_vl
Definition: integrator.h:62
void evolve(const double step_size, Field_G &iP, Field_G &U)
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
static bool Register(const std::string &realm, const creator_callback &cb)
int non_zero(const double v)
Definition: checker.cpp:31
std::vector< Integrator * > m_integs
std::vector< Director * > m_director
string get_string(const string &key) const
Definition: parameters.cpp:87
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:159
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:113
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