Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
action_G_Plaq.cpp
Go to the documentation of this file.
1 
14 #include "action_G_Plaq.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_double("beta", 0.0);
25 
26  param.Register_string("verbose_level", "NULL");
27  }
28 
29 
30 #ifdef USE_PARAMETERS_FACTORY
31  bool init_param = ParametersFactory::Register("Action.G_Plaq", append_entry);
32 #endif
33 }
34 //- end
35 
36 //- parameters class
38 //- end
39 
40 const std::string Action_G_Plaq::class_name = "Action_G_Plaq";
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  double beta;
51 
52  int err = 0;
53  err += params.fetch_double("beta", beta);
54 
55  if (err) {
56  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
57  abort();
58  }
59 
60 
61  set_parameters(beta);
62 }
63 
64 
65 //====================================================================
67 {
68  //- print input parameters
69  vout.general(m_vl, "%s:\n", class_name.c_str());
70  vout.general(m_vl, " beta = %8.4f\n", beta);
71 
72  //- range check
73  // NB. beta == 0 is allowed.
74 
75  //- store values
76  m_beta = beta;
77 
78  //- post-process
79  int Nc = CommonParameters::Nc();
80  int Nvol = CommonParameters::Nvol();
81  int Ndim = CommonParameters::Ndim();
82  int NinG = 2 * Nc * Nc;
83  m_force.reset(NinG, Nvol, Ndim);
84 
85  m_status_linkv = 0;
86 }
87 
88 
89 //====================================================================
91 {
92  double H_U = calcH(); // calculate action H_U=beta*(1-Plaq)*Lvol*6 (SA)
93 
94  m_status_linkv = 0;
95 
96  return H_U;
97 }
98 
99 
100 //====================================================================
102 {
103  int Lvol = CommonParameters::Lvol();
104  int Ndim = CommonParameters::Ndim();
105 
106  int Ndim2 = Ndim * (Ndim - 1) / 2;
107  int size_U = Lvol * Ndim2;
108 
109  double plaq = m_staple.plaquette(*m_U); // calculate plaquette (SA)
110  double H_U = m_beta * (1.0 - plaq) * Lvol * Ndim2; // action (SA)
111 
112  vout.general(m_vl, "H_Gplaq = %18.8f\n", H_U); // total action (SA)
113  vout.general(m_vl, "H_G/dof = %18.8f\n", H_U / size_U); // action per dof (SA)
114 
115  return H_U;
116 }
117 
118 
119 //====================================================================
121 {
122  // Gauge conf m_U (SA)
123  if (m_status_linkv == 0) {
124  int Nin = m_U->nin();
125  int Nvol = m_U->nvol();
126  int Nex = m_U->nex();
127  int Nc = CommonParameters::Nc();
128 
129  double betaNc = m_beta / Nc;
130  Mat_SU_N ut(Nc); // Nc x Nc complex matrix (SA)
131 
132  Field_G force(Nvol, Nex);
133  Field_G st(Nvol, 1);
134 
135  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
136 
137  for (int mu = 0; mu < Nex; ++mu) {
138  m_staple.staple(st, *m_U, mu);
139  // Calculate staple for m_U(all site,\mu) (SA)
140 
141  /* -->--
142  | |
143  | |
144  U_mu
145  */
146  for (int site = 0; site < Nvol; ++site) {
147  ut = m_U->mat(site, mu) * st.mat_dag(site); // U_\mu * (staple)^\dagger (SA)
148  ut.at(); // anti-hermitian and traceless (SA)
149  ut *= -betaNc;
150  // force = -beta*{U_\mu *staple^\dagger}_{traceless & anti-hermitian) (SA)
151  force.set_mat(site, mu, ut);
152  }
153  }
154 
155  m_force = (Field)force; // set all force at m_force (SA)
156  ++m_status_linkv; // frag showing that force is calculated
157 
158  double Fave, Fmax, Fdev;
159  m_force.stat(Fave, Fmax, Fdev);
160 
161  //- calculate average, max, deviation of force over (site, mu)
162  vout.general(m_vl, " Fplaq_ave = %12.6f Fplaq_max = %12.6f Fplaq_dev = %12.6f\n",
163  Fave, Fmax, Fdev);
164 
165  return m_force;
166  } else {
167  vout.general(m_vl, " %s returns previous force.\n", class_name.c_str());
168  return m_force;
169  }
170 }
171 
172 
173 //====================================================================
174 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:207
double langevin(RandomNumbers *)
Langevis step.
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
void set_parameters(const Parameters &params)
void general(const char *format,...)
Definition: bridgeIO.cpp:38
Field_G * m_U
Definition: action_G_Plaq.h:50
Container of Field-type object.
Definition: field.h:37
int nvol() const
Definition: field.h:101
double plaquette(const Field_G &)
calculates plaquette value.
Definition: staples.cpp:32
Class for parameters.
Definition: parameters.h:40
Mat_SU_N & at()
antihermitian traceless
Definition: mat_SU_N.h:329
const Field force()
returns force for molcular dynamical update of conjugate momenta.
static int Lvol()
int nin() const
Definition: field.h:100
SU(N) gauge field.
Definition: field_G.h:36
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:82
int nex() const
Definition: field.h:102
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
static bool Register(const std::string &realm, const creator_callback &cb)
Bridge::VerboseLevel m_vl
Definition: action.h:64
Base class of random number generators.
Definition: randomNumbers.h:40
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:544
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:123
void Register_double(const string &, const double)
Definition: parameters.cpp:324
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:102
Staples m_staple
Definition: action_G_Plaq.h:52
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:156
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:110
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:191