Bridge++  Ver. 2.0.4
energyDensity.cpp
Go to the documentation of this file.
1 
14 #include "energyDensity.h"
15 
16 const std::string EnergyDensity::class_name = "EnergyDensity";
17 
18 //====================================================================
20 {
21  m_filename_output = params.get_string("filename_output");
22  if (m_filename_output.empty()) {
23  m_filename_output = "stdout";
24  }
25 
26  const string str_vlevel = params.get_string("verbose_level");
27  m_vl = vout.set_verbose_level(str_vlevel);
28 
29  //- fetch and check input parameters
30  double c_plaq, c_rect;
31 
32  int err = 0;
33  err += params.fetch_double("c_plaq", c_plaq);
34  err += params.fetch_double("c_rect", c_rect);
35 
36  if (err) {
37  vout.crucial(m_vl, "Error at %s: input parameter not found.\n", class_name.c_str());
38  exit(EXIT_FAILURE);
39  }
40 
41 
42  set_parameters(c_plaq, c_rect);
43 }
44 
45 
46 //====================================================================
47 void EnergyDensity::set_parameters(const double c_plaq, const double c_rect)
48 {
49  //- print input parameters
50  vout.general(m_vl, "Energy density measurement:\n");
51  vout.general(m_vl, " c_plaq = %12.6f\n", c_plaq);
52  vout.general(m_vl, " c_rect = %12.6f\n", c_rect);
53 
54  //- range check
55  // NB. beta,c_plaq,c_rect == 0 is allowed.
56 
57  //- store values
58  m_c_plaq = c_plaq;
59  m_c_rect = c_rect;
60 }
61 
62 
63 //====================================================================
65 {
66  const double plaq = m_staple.plaquette(U);
67  const double E_plaq = 36.0 * (1.0 - plaq);
68 
69  //- output
70  const bool use_outputfile = (m_filename_output != "stdout");
71  if (use_outputfile) {
72  int rank_io = 0;
73  vout.init(m_filename_output, rank_io, std::ios::app);
74  }
75 
76  vout.general(m_vl, " E_plaq = %20.16e\n", E_plaq);
77 
78  if (use_outputfile) {
79  vout.unset();
80  }
81 
82  return E_plaq;
83 }
84 
85 
86 //====================================================================
88 {
89  const int Ndim = CommonParameters::Ndim();
90  const int Nvol = CommonParameters::Nvol();
91  const int NPE = CommonParameters::NPE();
92 
93  static const double eps = CommonParameters::epsilon_criterion();
94 
95  //--- 1x1 part ---
96  double E_clover_1x1 = 0.0;
97 
98  {
99  // NB. #(mu,nu)=6 i.e. (1,2),(1,3),(1,4),(2,3),(2,4),(3,4)
100  std::vector<Field_G> Fmunu_1x1(6);
101 
102  int i_munu = 0;
103 
104  for (int mu = 0; mu < Ndim; ++mu) {
105  for (int nu = mu + 1; nu < Ndim; ++nu) {
106  m_field_strength.construct_Fmunu_1x1_traceless(Fmunu_1x1[i_munu], mu, nu, U);
107 
108  ++i_munu;
109  }
110  }
111 
112  double F2_1x1 = 0.0;
113  for (int site = 0; site < Nvol; ++site) {
114  for (int i_munu = 0; i_munu < 6; i_munu++) {
115  F2_1x1 += ReTr(Fmunu_1x1[i_munu].mat(site) * Fmunu_1x1[i_munu].mat(site));
116  }
117  }
118  E_clover_1x1 = Communicator::reduce_sum(F2_1x1) / Nvol / NPE;
119  }
120  //----------------
121 
122 
123  //--- 1x2 part ---
124  double E_clover_1x2 = 0.0;
125 
126  {
127  // NB. skip this part, if m_c_rect = 0.0
128  if (fabs(m_c_rect) > eps) {
129  // NB. #(mu,nu)=6 i.e. (1,2),(1,3),(1,4),(2,3),(2,4),(3,4)
130  std::vector<Field_G> Fmunu_1x2(6);
131 
132  int i_munu = 0;
133  for (int mu = 0; mu < Ndim; ++mu) {
134  for (int nu = mu + 1; nu < Ndim; ++nu) {
135  m_field_strength.construct_Fmunu_1x2_traceless(Fmunu_1x2[i_munu], mu, nu, U);
136 
137  ++i_munu;
138  }
139  }
140 
141  double F2_1x2 = 0.0;
142  for (int site = 0; site < Nvol; ++site) {
143  for (int i_munu = 0; i_munu < 6; i_munu++) {
144  F2_1x2 += ReTr(Fmunu_1x2[i_munu].mat(site) * Fmunu_1x2[i_munu].mat(site));
145  }
146  }
147  E_clover_1x2 = Communicator::reduce_sum(F2_1x2) / Nvol / NPE;
148 
149  // extra factor "2" for 1x2
150  E_clover_1x2 *= 2.0;
151  }
152  }
153  //----------------
154 
155 
156  const double E_clover = (m_c_plaq * E_clover_1x1 + m_c_rect * E_clover_1x2);
157 
158 
159  //- output
160  const bool use_outputfile = (m_filename_output != "stdout");
161  if (use_outputfile) {
162  int rank_io = 0;
163  vout.init(m_filename_output, rank_io, std::ios::app);
164  }
165 
166  vout.general(m_vl, " E_clover_1x1 = %20.16e\n", E_clover_1x1);
167  if (fabs(m_c_rect) > eps) {
168  vout.general(m_vl, " E_clover_1x2 = %20.16e\n", E_clover_1x2);
169  }
170  vout.general(m_vl, " E_clover = %20.16e\n", E_clover);
171 
172  if (use_outputfile) {
173  vout.unset();
174  }
175 
176  return E_clover;
177 }
178 
179 
180 //====================================================================
181 //============================================================END=====
EnergyDensity::m_staple
Staple_lex m_staple
Definition: energyDensity.h:44
Bridge::BridgeIO::init
void init(const std::string &filename)
Definition: bridgeIO.cpp:62
EnergyDensity::m_c_plaq
double m_c_plaq
Definition: energyDensity.h:40
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Parameters
Class for parameters.
Definition: parameters.h:46
Staple_lex::plaquette
double plaquette(const Field_G &)
calculates plaquette value.
Definition: staple_lex.cpp:89
EnergyDensity::class_name
static const std::string class_name
Definition: energyDensity.h:32
EnergyDensity::m_filename_output
std::string m_filename_output
Definition: energyDensity.h:38
Bridge::BridgeIO::unset
void unset()
Definition: bridgeIO.cpp:142
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
energyDensity.h
EnergyDensity::m_vl
Bridge::VerboseLevel m_vl
Definition: energyDensity.h:35
FieldStrength::construct_Fmunu_1x2_traceless
void construct_Fmunu_1x2_traceless(Field_G &Fmunu, const int mu, const int nu, const Field_G &U)
Constructs the anti-Hermitian traceless field strength with eight 1x2 rectangular clover leaves.
Definition: fieldStrength.cpp:395
Communicator::reduce_sum
static int reduce_sum(int count, dcomplex *recv_buf, dcomplex *send_buf, int pattern=0)
make a global sum of an array of dcomplex over the communicator. pattern specifies the dimensions to ...
Definition: communicator.cpp:263
EnergyDensity::E_plaq
double E_plaq(const Field_G &U)
Definition: energyDensity.cpp:64
CommonParameters::NPE
static int NPE()
Definition: commonParameters.h:101
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
FieldStrength::construct_Fmunu_1x1_traceless
void construct_Fmunu_1x1_traceless(Field_G &Fmunu, const int mu, const int nu, const Field_G &U)
Constructs the anti-Hermitian traceless field strength with four 1x1 plquette clover leaves.
Definition: fieldStrength.cpp:324
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
EnergyDensity::m_c_rect
double m_c_rect
Definition: energyDensity.h:41
Parameters::get_string
string get_string(const string &key) const
Definition: parameters.cpp:221
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
EnergyDensity::set_parameters
virtual void set_parameters(const Parameters &params)
Definition: energyDensity.cpp:19
SU_N::ReTr
double ReTr(const Mat_SU_N &m)
Definition: mat_SU_N.h:534
Field_G
SU(N) gauge field.
Definition: field_G.h:38
EnergyDensity::E_clover
double E_clover(const Field_G &U)
Definition: energyDensity.cpp:87
EnergyDensity::m_field_strength
FieldStrength m_field_strength
Definition: energyDensity.h:43
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:569
CommonParameters::epsilon_criterion
static double epsilon_criterion()
Definition: commonParameters.h:119