Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
force_G_Plaq.cpp
Go to the documentation of this file.
1 
14 #include "force_G_Plaq.h"
15 
16 
17 #ifdef USE_FACTORY
18 namespace {
19  Force_G *create_object()
20  {
21  return new Force_G_Plaq();
22  }
23 
24 
25  bool init = Force_G::Factory::Register("Force_G_Plaq", create_object);
26 }
27 #endif
28 
29 
30 const std::string Force_G_Plaq::class_name = "Force_G_Plaq";
31 
32 //====================================================================
34 {
35  const string str_vlevel = params.get_string("verbose_level");
36 
37  m_vl = vout.set_verbose_level(str_vlevel);
38 
39  //- fetch and check input parameters
40  double beta;
41 
42  int err = 0;
43  err += params.fetch_double("beta", beta);
44 
45  if (err) {
46  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
47  exit(EXIT_FAILURE);
48  }
49 
50 
51  set_parameters(beta);
52 }
53 
54 
55 //====================================================================
56 void Force_G_Plaq::set_parameters(const double beta)
57 {
58  //- print input parameters
59  vout.general(m_vl, "%s:\n", class_name.c_str());
60  vout.general(m_vl, " beta = %8.4f\n", beta);
61 
62  //- range check
63  // NB. kappa == 0 is allowed.
64 
65  //- store values
66  m_beta = beta;
67 }
68 
69 
70 //====================================================================
72 {
73  int Nc = CommonParameters::Nc();
74  int Nvol = CommonParameters::Nvol();
75  int Ndim = CommonParameters::Ndim();
76 
77  assert(m_U->nin() == Nc * Nc * 2);
78  assert(m_U->nvol() == Nvol);
79  assert(m_U->nex() == Ndim);
80 
81  assert(force.nin() == Nc * Nc * 2);
82  assert(force.nvol() == Nvol);
83  assert(force.nex() == Ndim);
84 
85  Mat_SU_N ut(Nc); // Nc x Nc complex matrix (SA)
86  Field_G st(Nvol, 1);
87  Field_G force1(Nvol, 1);
88 
89  for (int mu = 0; mu < Ndim; ++mu) {
90  m_staple.staple(st, *m_U, mu);
91  // Calculate staple for m_U(all site,\mu) (SA)
92 
93  /* -->--
94  | |
95  | |
96  U_mu
97  */
98  for (int site = 0; site < Nvol; ++site) {
99  ut = m_U->mat(site, mu) * st.mat_dag(site); // U_\mu * (staple)^\dagger (SA)
100  ut.at(); // anti-hermitian and traceless (SA)
101  //ut *= -beta/Nc;
102  // force = -beta*{U_\mu *staple^\dagger}_{traceless & anti-hermitian) (SA)
103  force1.set_mat(site, 0, ut);
104  }
105 
106  axpy(force, mu, -(m_beta / Nc), force1, 0);
107  }
108 
109  double Fave, Fmax, Fdev;
110  force.stat(Fave, Fmax, Fdev);
111 
112  //- calculate average, max, deviation of force over (site, mu)
113  vout.general(m_vl, " Fave = %12.6f Fmax = %12.6f Fdev = %12.6f\n",
114  Fave, Fmax, Fdev);
115 }
116 
117 
118 //====================================================================
119 //============================================================END=====
void set_parameters(const Parameters &params)
BridgeIO vout
Definition: bridgeIO.cpp:495
Field_G * m_U
Definition: force_G.h:34
void general(const char *format,...)
Definition: bridgeIO.cpp:195
Container of Field-type object.
Definition: field.h:39
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:211
double m_beta
Definition: force_G_Plaq.h:42
int nvol() const
Definition: field.h:116
Staple_lex m_staple
Definition: force_G_Plaq.h:43
Class for parameters.
Definition: parameters.h:46
Mat_SU_N & at()
antihermitian traceless
Definition: mat_SU_N.h:329
void staple(Field_G &, const Field_G &, const int mu)
constructs staple in mu-direction (summing up nu-direction).
Definition: staple_lex.cpp:135
int nin() const
Definition: field.h:115
SU(N) gauge field.
Definition: field_G.h:38
Base class of gauge force calculation.
Definition: force_G.h:31
Bridge::VerboseLevel m_vl
Definition: force_G.h:35
int nex() const
Definition: field.h:117
static const std::string class_name
Definition: force_G_Plaq.h:36
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:178
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
void force_core(Field &force)
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:126
string get_string(const string &key) const
Definition: parameters.cpp:116
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
HMC force class for plaquette gauge action.
Definition: force_G_Plaq.h:33
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:131