25   bool init = GaugeFixing::Factory::Register(
"Landau", create_object);
 
   34   const string str_vlevel = params.
get_string(
"verbose_level");
 
   39   int    Niter, Nnaive, Nmeas, Nreset;
 
   43   err += params.
fetch_int(
"maximum_number_of_iteration", Niter);
 
   44   err += params.
fetch_int(
"number_of_naive_iteration", Nnaive);
 
   45   err += params.
fetch_int(
"interval_of_measurement", Nmeas);
 
   46   err += params.
fetch_int(
"iteration_to_reset", Nreset);
 
   47   err += params.
fetch_double(
"convergence_criterion_squared", Enorm);
 
   48   err += params.
fetch_double(
"overrelaxation_parameter", wp);
 
   61                                         const int Nmeas, 
const int Nreset,
 
   62                                         const double Enorm, 
const double wp)
 
  100   const int Nvol = Uorg.
nvol();
 
  101   const int Nex  = Uorg.
nex();
 
  103   const int Nvol2 = Nvol / 2;
 
  114   const double plaq = staple.
plaquette(Uorg);
 
  120   for (
int iter = 0; iter < 
m_Niter; ++iter) {
 
  140     if (((iter % m_Nreset) == 0) && (iter > 0)) {
 
  162   const double plaq2     = staple.
plaquette(Ufix);
 
  163   const double plaq_diff = abs(plaq - plaq2);
 
  168   if ( plaq_diff > sqrt(
m_Enorm) ) {
 
  181   const int Nvol2 = Ue.
nvol();
 
  187   for (
int ieo = 0; ieo < 2; ++ieo) {
 
  196     for (
int site = 0; site < Nvol2; ++site) {
 
  198       ut  = Geo.
mat(site, 0);
 
  212   const int Nvol = Geo.
nvol();
 
  213   const int Nex  = Geo.
nex();
 
  217   for (
int ex = 0; ex < Nex; ++ex) {
 
  218     for (
int site = 0; site < Nvol; ++site) {
 
  229                                         const Field_G& Geo, 
const int Ieo)
 
  234   const int Nvol2 = Geo.
nvol();
 
  240     for (
int mu = 0; mu < Ndim; ++mu) {
 
  251     for (
int mu = 0; mu < Ndim; ++mu) {
 
  271   const int Nvol2 = Ue.
nvol();
 
  272   const int Nex   = Ue.
nex();
 
  277   for (
int ieo = 0; ieo < 2; ++ieo) {
 
  280     double tsg = DLT.
norm2();
 
  283   sg = sg / (Nex * Nc * 2 * Nvol2 * NPE);
 
  285   for (
int mu = 0; mu < Nex; ++mu) {
 
  286     for (
int site = 0; site < Nvol2; ++site) {
 
  288       ut    = Ue.
mat(site, mu);
 
  291       ut    = Uo.
mat(site, mu);
 
  296   Fval = Fval / (Nex * 2 * Nvol2 * NPE);
 
  305   const int Nvol2 = Ue.
nvol();
 
  314     for (
int mu = 0; mu < Ndim; ++mu) {
 
  325     for (
int mu = 0; mu < Ndim; ++mu) {
 
  337   for (
int site = 0; site < Nvol2; ++site) {
 
  339     u_tmp = DLT.
mat(site, 0);
 
  352   const int Nvol2 = Ue.
nvol();
 
  356   assert(Weo.
nex() == 1);
 
  363     for (
int mu = 0; mu < Ndim; ++mu) {
 
  370       shift.forward_h(Ut2, Ut1, mu, 0);
 
  371       for (
int site = 0; site < Nvol2; ++site) {
 
  377   } 
else if (Ieo == 1) { 
 
  378     for (
int mu = 0; mu < Ndim; ++mu) {
 
  385       shift.forward_h(Ut2, Ut1, mu, 1);
 
  386       for (
int site = 0; site < Nvol2; ++site) {
 
  404   const int Nvol2 = G0.
nvol();
 
  411   for (
int site = 0; site < Nvol2; ++site) {
 
  415   for (
int imt = 0; imt < Nmt; ++imt) {
 
  427   const int Nvol2 = W.
nvol();
 
  429   for (
int site = 0; site < Nvol2; ++site) {
 
  440     double fn1 = (wt.
r(0) + wt.
r(4)) * (wt.
r(0) + wt.
r(4))
 
  441                  + (wt.
i(0) - wt.
i(4)) * (wt.
i(0) - wt.
i(4));
 
  442     double fn2 = (wt.
r(1) - wt.
r(3)) * (wt.
r(1) - wt.
r(3))
 
  443                  + (wt.
i(1) + wt.
i(3)) * (wt.
i(1) + wt.
i(3));
 
  444     double fn = 1.0 / sqrt(fn1 + fn2);
 
  446     gt.
set(0, fn * (wt.
r(0) + wt.
r(4)), fn * (-wt.
i(0) + wt.
i(4)));
 
  447     gt.
set(1, fn * (-wt.
r(1) + wt.
r(3)), fn * (-wt.
i(1) - wt.
i(3)));
 
  448     gt.
set(3, fn * (wt.
r(1) - wt.
r(3)), fn * (-wt.
i(1) - wt.
i(3)));
 
  449     gt.
set(4, fn * (wt.
r(0) + wt.
r(4)), fn * (wt.
i(0) - wt.
i(4)));
 
  456     gt2 = G.
mat(site, 0);
 
  467   const int Nvol2 = W.
nvol();
 
  469   for (
int site = 0; site < Nvol2; ++site) {
 
  480     double fn1 = (wt.
r(8) + wt.
r(0)) * (wt.
r(8) + wt.
r(0))
 
  481                  + (wt.
i(8) - wt.
i(0)) * (wt.
i(8) - wt.
i(0));
 
  482     double fn2 = (wt.
r(2) - wt.
r(6)) * (wt.
r(2) - wt.
r(6))
 
  483                  + (wt.
i(2) + wt.
i(6)) * (wt.
i(2) + wt.
i(6));
 
  484     double fn = 1.0 / sqrt(fn1 + fn2);
 
  486     gt.
set(0, fn * (wt.
r(8) + wt.
r(0)), fn * (wt.
i(8) - wt.
i(0)));
 
  487     gt.
set(2, fn * (wt.
r(6) - wt.
r(2)), fn * (-wt.
i(6) - wt.
i(2)));
 
  488     gt.
set(6, fn * (-wt.
r(6) + wt.
r(2)), fn * (-wt.
i(6) - wt.
i(2)));
 
  489     gt.
set(8, fn * (wt.
r(8) + wt.
r(0)), fn * (-wt.
i(8) + wt.
i(0)));
 
  496     gt2 = G.
mat(site, 0);
 
  507   const int Nvol2 = W.
nvol();
 
  511   for (
int site = 0; site < Nvol2; ++site) {
 
  522     double fn1 = (wt.
r(4) + wt.
r(8)) * (wt.
r(4) + wt.
r(8))
 
  523                  + (wt.
i(4) - wt.
i(8)) * (wt.
i(4) - wt.
i(8));
 
  524     double fn2 = (wt.
r(7) - wt.
r(5)) * (wt.
r(7) - wt.
r(5))
 
  525                  + (wt.
i(7) + wt.
i(5)) * (wt.
i(7) + wt.
i(5));
 
  526     double fn = 1.0 / sqrt(fn1 + fn2);
 
  528     gt.
set(4, fn * (wt.
r(4) + wt.
r(8)), fn * (-wt.
i(4) + wt.
i(8)));
 
  529     gt.
set(5, fn * (-wt.
r(5) + wt.
r(7)), fn * (-wt.
i(5) - wt.
i(7)));
 
  530     gt.
set(7, fn * (wt.
r(5) - wt.
r(7)), fn * (-wt.
i(5) - wt.
i(7)));
 
  531     gt.
set(8, fn * (wt.
r(4) + wt.
r(8)), fn * (wt.
i(4) - wt.
i(8)));
 
  538     gt2 = G.
mat(site, 0);
 
void scal(Field &x, const double a)
scal(x, a): x = a * x 
 
void detailed(const char *format,...)
 
Mat_SU_N & set_random(RandomNumbers *rand)
 
void set(const int jin, const int site, const int jex, double v)
 
void maxTr2(Field_G &, Field_G &)
 
void general(const char *format,...)
 
static const std::string class_name
 
int fetch_double(const string &key, double &value) const 
 
double plaquette(const Field_G &)
calculates plaquette value. 
 
Mat_SU_N & at()
antihermitian traceless 
 
void convertField(Field &eo, const Field &lex)
 
void addpart_ex(int ex, const Field &w, int exw)
 
void gauge_trans_eo(Field_G &Ue, Field_G &Uo, const Field_G &Geo, const int Ieo)
 
int square_non_zero(const double v)
 
void maxTr1(Field_G &, Field_G &)
 
void calc_DLT(Field_G &Weo, const Field_G &Ue, const Field_G &Uo, const int Ieo)
 
int fetch_int(const string &key, int &value) const 
 
void maxTr3(Field_G &, Field_G &)
 
void set_parameters(const Parameters ¶ms)
 
Methods to shift the even-odd field. 
 
void mult_Field_Gnn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
 
void crucial(const char *format,...)
 
Bridge::VerboseLevel m_vl
 
void reverseField(Field &lex, const Field &eo)
 
int non_zero(const double v)
 
Mat_SU_N mat_dag(const int site, const int mn=0) const 
 
int non_negative(const int v)
 
static int reduce_sum(int count, double *recv_buf, double *send_buf, int pattern=0)
make a global sum of an array of double over the communicator. pattern specifies the dimensions to be...
 
void backward_h(Field &, const Field &, const int mu, const int ieo)
 
void calc_W(Field_G &Weo, const Field_G &Ue, const Field_G &Uo, const int Ieo)
 
void set(int c, double re, const double &im)
 
void fix(Field_G &Ufix, const Field_G &Uorg)
 
void setpart_ex(int ex, const Field &w, int exw)
 
void maxTr(Field_G &, Field_G &)
 
string get_string(const string &key) const 
 
void set_mat(const int site, const int mn, const Mat_SU_N &U)
 
Mat_SU_N mat(const int site, const int mn=0) const 
 
void add_mat(const int site, const int mn, const Mat_SU_N &U)
 
void forward_h(Field &, const Field &, const int mu, const int ieo)
 
static VerboseLevel set_verbose_level(const std::string &str)
 
void calc_SG(double &sg, double &Fval, const Field_G &Ue, const Field_G &Uo)
 
double ReTr(const Mat_SU_N &m)
 
void gfix_step(Field_G &Ue, Field_G &Uo, const double wp)
one step of gauge fixing with overrelaxation parameter wp. 
 
void set_randomGaugeTrans(Field_G &Geo)
 
void mult_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)