Bridge++  Ver. 1.1.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 //====================================================================
42 {
43  const string str_vlevel = params.get_string("verbose_level");
44 
45  m_vl = vout.set_verbose_level(str_vlevel);
46 
47  //- fetch and check input parameters
48  double beta;
49 
50  int err = 0;
51  err += params.fetch_double("beta", beta);
52 
53  if (err) {
54  vout.crucial(m_vl, "Action_G_Plaq: fetch error, input parameter not found.\n");
55  abort();
56  }
57 
58 
59  set_parameters(beta);
60 }
61 
62 
63 //====================================================================
65 {
66  //- print input parameters
67  vout.general(m_vl, "Action_G_Plaq:\n");
68  vout.general(m_vl, " beta = %8.4f\n", beta);
69 
70  //- range check
71  // NB. beta == 0 is allowed.
72 
73  //- store values
74  m_beta = beta;
75 
76  //- post-process
77  int Nc = CommonParameters::Nc();
78  int Nvol = CommonParameters::Nvol();
79  int Ndim = CommonParameters::Ndim();
80  int NinG = 2 * Nc * Nc;
81  m_force.reset(NinG, Nvol, Ndim);
82 
83  m_status_linkv = 0;
84 }
85 
86 
87 //====================================================================
89 {
90  double H_U = calcH(); // calculate action H_U=beta*(1-Plaq)*Lvol*6 (SA)
91 
92  m_status_linkv = 0;
93 
94  return H_U;
95 }
96 
97 
98 //====================================================================
100 {
101  int Lvol = CommonParameters::Lvol();
102  int Ndim = CommonParameters::Ndim();
103 
104  int Ndim2 = Ndim * (Ndim - 1) / 2;
105  int size_U = Lvol * Ndim2;
106 
107  double plaq = m_staple.plaquette(*m_U); // calculate plaquette (SA)
108  double H_U = m_beta * (1.0 - plaq) * Lvol * Ndim2; // action (SA)
109 
110  vout.general(m_vl, "H_Gplaq = %18.8f\n", H_U); // total action (SA)
111  vout.general(m_vl, "H_G/dof = %18.8f\n", H_U / size_U); // action per dof (SA)
112 
113  return H_U;
114 }
115 
116 
117 //====================================================================
119 {
120  // Gauge conf m_U (SA)
121  if (m_status_linkv == 0) {
122  int Nin = m_U->nin();
123  int Nvol = m_U->nvol();
124  int Nex = m_U->nex();
125  int Nc = CommonParameters::Nc();
126 
127  double betaNc = m_beta / Nc;
128  Mat_SU_N ut(Nc); // Nc x Nc complex matrix (SA)
129 
130  Field_G force(Nvol, Nex);
131  Field_G st(Nvol, 1);
132 
133  vout.general(m_vl, " Action_G_Plaq: %s\n", m_label.c_str());
134 
135  for (int mu = 0; mu < Nex; ++mu) {
136  m_staple.staple(st, *m_U, mu);
137  // Calculate staple for m_U(all site,\mu) (SA)
138 
139  /* -->--
140  | |
141  | |
142  U_mu
143  */
144  for (int site = 0; site < Nvol; ++site) {
145  ut = m_U->mat(site, mu) * st.mat_dag(site); // U_\mu * (staple)^\dagger (SA)
146  ut.at(); // anti-hermitian and traceless (SA)
147  ut *= -betaNc;
148  // force = -beta*{U_\mu *staple^\dagger}_{traceless & anti-hermitian) (SA)
149  force.set_mat(site, mu, ut);
150  }
151  }
152 
153  m_force = (Field)force; // set all force at m_force (SA)
154  ++m_status_linkv; // frag showing that force is calculated
155 
156  double Fave, Fmax, Fdev;
157  m_force.stat(Fave, Fmax, Fdev);
158 
159  //- calculate average, max, deviation of force over (site, mu)
160  vout.general(m_vl, " Fplaq_ave = %12.6f Fplaq_max = %12.6f Fplaq_dev = %12.6f\n",
161  Fave, Fmax, Fdev);
162 
163  return m_force;
164  } else {
165  vout.general(m_vl, " Action_G_Plaq returns previous force.\n");
166  return m_force;
167  }
168 }
169 
170 
171 //====================================================================
172 //============================================================END=====