Bridge++  Ver. 1.3.x
action_G_Plaq.cpp
Go to the documentation of this file.
1 
14 #include "action_G_Plaq.h"
15 
16 
17 #ifdef USE_FACTORY
18 namespace {
19  Action *create_object()
20  {
21  return new Action_G_Plaq();
22  }
23 
24 
25  bool init = Action::Factory::Register("Action_G_Plaq", create_object);
26 }
27 #endif
28 
29 
30 //- parameter entries
31 namespace {
32  void append_entry(Parameters& param)
33  {
34  param.Register_double("beta", 0.0);
35 
36  param.Register_string("verbose_level", "NULL");
37  }
38 
39 
40 #ifdef USE_PARAMETERS_FACTORY
41  bool init_param = ParametersFactory::Register("Action.G_Plaq", append_entry);
42 #endif
43 }
44 //- end
45 
46 //- parameters class
48 //- end
49 
50 const std::string Action_G_Plaq::class_name = "Action_G_Plaq";
51 
52 //====================================================================
54 {
55  const string str_vlevel = params.get_string("verbose_level");
56 
57  m_vl = vout.set_verbose_level(str_vlevel);
58 
59  //- fetch and check input parameters
60  double beta;
61 
62  int err = 0;
63  err += params.fetch_double("beta", beta);
64 
65  if (err) {
66  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
67  exit(EXIT_FAILURE);
68  }
69 
70 
71  set_parameters(beta);
72 }
73 
74 
75 //====================================================================
77 {
78  //- print input parameters
79  vout.general(m_vl, "%s:\n", class_name.c_str());
80  vout.general(m_vl, " beta = %8.4f\n", beta);
81 
82  //- range check
83  // NB. beta == 0 is allowed.
84 
85  //- store values
86  m_beta = beta;
87 
88  //- post-process
89  int Nc = CommonParameters::Nc();
90  int Nvol = CommonParameters::Nvol();
91  int Ndim = CommonParameters::Ndim();
92  int NinG = 2 * Nc * Nc;
93 }
94 
95 
96 //====================================================================
98 {
99  double H_U = calcH(); // calculate action H_U=beta*(1-Plaq)*Lvol*6 (SA)
100 
101  return H_U;
102 }
103 
104 
105 //====================================================================
107 {
108  int Lvol = CommonParameters::Lvol();
109  int Ndim = CommonParameters::Ndim();
110 
111  int Ndim2 = Ndim * (Ndim - 1) / 2;
112  int size_U = Lvol * Ndim2;
113 
114  double plaq = m_staple.plaquette(*m_U); // calculate plaquette (SA)
115  double H_U = m_beta * (1.0 - plaq) * Lvol * Ndim2; // action (SA)
116 
117  vout.general(m_vl, "H_Gplaq = %18.8f\n", H_U); // total action (SA)
118  vout.general(m_vl, "H_G/dof = %18.8f\n", H_U / size_U); // action per dof (SA)
119 
120  return H_U;
121 }
122 
123 
124 //====================================================================
126 {
127  // Gauge conf m_U (SA)
128  int Nin = m_U->nin();
129  int Nvol = m_U->nvol();
130  int Nex = m_U->nex();
131  int Nc = CommonParameters::Nc();
132 
133  assert(force.nin() == Nin);
134  assert(force.nvol() == Nvol);
135  assert(force.nex() == Nex);
136 
137  force.set(0.0);
138 
139  double betaNc = m_beta / Nc;
140  Mat_SU_N ut(Nc); // Nc x Nc complex matrix (SA)
141 
142  Field_G st(Nvol, 1);
143  Field_G force1(Nvol, 1);
144 
145  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
146 
147  for (int mu = 0; mu < Nex; ++mu) {
148  m_staple.staple(st, *m_U, mu);
149  // Calculate staple for m_U(all site,\mu) (SA)
150 
151  /* -->--
152  | |
153  | |
154  U_mu
155  */
156  for (int site = 0; site < Nvol; ++site) {
157  ut = m_U->mat(site, mu) * st.mat_dag(site); // U_\mu * (staple)^\dagger (SA)
158  ut.at(); // anti-hermitian and traceless (SA)
159  //ut *= -betaNc;
160  // force = -beta*{U_\mu *staple^\dagger}_{traceless & anti-hermitian) (SA)
161  force1.set_mat(site, 0, ut);
162  }
163  axpy(force, mu, -betaNc, force1, 0);
164  }
165 
166  double Fave, Fmax, Fdev;
167  force.stat(Fave, Fmax, Fdev);
168 
169  //- calculate average, max, deviation of force over (site, mu)
170  vout.general(m_vl, " Fplaq_ave = %12.6f Fplaq_max = %12.6f Fplaq_dev = %12.6f\n",
171  Fave, Fmax, Fdev);
172 }
173 
174 
175 //====================================================================
176 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:278
double langevin(RandomNumbers *)
Langevis step.
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:155
void set_parameters(const Parameters &params)
void general(const char *format,...)
Definition: bridgeIO.cpp:65
Field_G * m_U
Definition: action_G_Plaq.h:49
Container of Field-type object.
Definition: field.h:39
int nvol() const
Definition: field.h:116
double plaquette(const Field_G &)
calculates plaquette value.
Definition: staples.cpp:36
Class for parameters.
Definition: parameters.h:38
Mat_SU_N & at()
antihermitian traceless
Definition: mat_SU_N.h:329
static int Lvol()
Base class of HMC action class family.
Definition: action.h:42
int nin() const
Definition: field.h:115
SU(N) gauge field.
Definition: field_G.h:38
int nex() const
Definition: field.h:117
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:168
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
static bool Register(const std::string &realm, const creator_callback &cb)
Bridge::VerboseLevel m_vl
Definition: action.h:81
Base class of random number generators.
Definition: randomNumbers.h:39
void stat(double &Fave, double &Fmax, double &Fdev) const
determines the statistics of the field. average, maximum value, and deviation is determined over glob...
Definition: field.cpp:516
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:126
void Register_double(const string &, const double)
Definition: parameters.cpp:323
std::string m_label
Definition: action_G_Plaq.h:47
void staple(Field_G &, const Field_G &, const int mu)
constructs staples in mu-direction (summing up nu-direction).
Definition: staples.cpp:107
Staples m_staple
Definition: action_G_Plaq.h:50
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
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
double calcH()
calculate Hamiltonian of this action term.
static const std::string class_name
Definition: action_G_Plaq.h:43
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
void force(Field &)
returns force for molcular dynamical update of conjugate momenta.