Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
action_F_Ratio_lex.cpp
Go to the documentation of this file.
1 
14 #include "action_F_Ratio_lex.h"
15 
16 const std::string Action_F_Ratio_lex::class_name = "Action_F_Ratio_lex";
17 
18 //====================================================================
20 {
22 
24 }
25 
26 
27 //====================================================================
29 {
30  int Nc = CommonParameters::Nc();
31  int Nvol = CommonParameters::Nvol();
32  int Ndim = CommonParameters::Ndim();
33  int NinG = 2 * Nc * Nc;
34 
35  vout.general(m_vl, "%s:\n", class_name.c_str());
36 }
37 
38 
39 //====================================================================
41 {
42  m_U = U;
43 
46 
47  m_fopr->set_config(U);
49 }
50 
51 
52 //====================================================================
54 {
55  int Nvol = CommonParameters::Nvol();
56  int Ndim = CommonParameters::Ndim();
57 
58  int NinF = m_fopr_prec->field_nin();
59  int NvolF = m_fopr_prec->field_nvol();
60  int NexF = m_fopr_prec->field_nex();
61  int size_psf = NinF * NvolF * NexF * CommonParameters::NPE();
62 
63  assert(NvolF == Nvol);
64  m_psf.reset(NinF, NvolF, NexF);
65 
66  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
67 
68  Field xi(NinF, NvolF, NexF);
69  rand->gauss_lex_global(xi);
70 
73 
74  Field v1(NinF, NvolF, NexF), v2(NinF, NvolF, NexF);
75 
76  m_fopr->set_mode("H");
77  m_fopr->mult_dag(v2, xi);
78 
79  m_fopr_prec->set_mode("H");
80  m_fopr_prec->mult_dag(v1, v2);
81 
82  int Nconv;
83  double diff;
84 
86  m_fprop_H_prec->invert_DdagD(m_psf, v1, Nconv, diff);
87  vout.general(m_vl, " Nconv = %d diff = %.8e\n", Nconv, diff);
88 
89  double xi2 = xi.norm();
90  double H_psf = xi2 * xi2;
91 
92  vout.general(m_vl, " H_Fratio = %18.8f\n", H_psf);
93  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf / size_psf);
94 
95  return H_psf;
96 }
97 
98 
99 //====================================================================
101 {
102  int Nvol = CommonParameters::Nvol();
103  int Ndim = CommonParameters::Ndim();
104 
105  int NinF = m_fopr_prec->field_nin();
106  int NvolF = m_fopr_prec->field_nvol();
107  int NexF = m_fopr_prec->field_nex();
108  int size_psf = NinF * NvolF * NexF * CommonParameters::NPE();
109 
110  Field v1(NinF, NvolF, NexF), v2(NinF, NvolF, NexF);
111 
112  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
113 
116 
117  m_fopr_prec->set_mode("H");
118  m_fopr_prec->mult(v1, m_psf);
119 
120  int Nconv;
121  double diff;
122 
124  m_fprop_H->invert_DdagD(v2, v1, Nconv, diff);
125  vout.general(m_vl, " Nconv = %d diff = %.8e\n", Nconv, diff);
126 
127  double H_psf = dot(v1, v2);
128 
129  vout.general(m_vl, " H_Fratio = %18.8f\n", H_psf);
130  vout.general(m_vl, " H_F/dof = %18.8f\n", H_psf / size_psf);
131 
132  return H_psf;
133 }
134 
135 
136 //====================================================================
138 {
139  int Nin = m_U->nin();
140  int Nvol = m_U->nvol();
141  int Nex = m_U->nex();
142  int Nc = CommonParameters::Nc();
143  int Ndim = CommonParameters::Ndim();
144 
145  assert(force.nin() == Nin);
146  assert(force.nvol() == Nvol);
147  assert(force.nex() == Nex);
148 
149  int NinF = m_fopr_prec->field_nin();
150  int NvolF = m_fopr_prec->field_nvol();
151  int NexF = m_fopr_prec->field_nex();
152  Field eta(NinF, NvolF, NexF);
153 
154  vout.general(m_vl, " %s: %s\n", class_name.c_str(), m_label.c_str());
155 
160 
161  Field v1(NinF, NvolF, NexF), v2(NinF, NvolF, NexF);
162  Field force_tmp(Nin, Nvol, Nex);
163 
164  m_fopr_prec->set_mode("H");
165  m_fopr_prec->mult(v1, m_psf);
166 
167  int Nconv;
168  double diff;
169 
171  m_fprop_MD->invert_DdagD(v2, v1, Nconv, diff);
172  vout.general(m_vl, " Solver: Nconv = %6d diff = %12.6e\n", Nconv, diff);
173 
174  m_fopr_force->force_core(force, v2);
175 
177  m_fopr_prec_force->force_core1(force_tmp, v2, m_psf);
178  axpy(force, -1.0, force_tmp);
179 
180  m_fopr_prec_force->set_mode("Hdag");
181  m_fopr_prec_force->force_core1(force_tmp, m_psf, v2);
182  axpy(force, -1.0, force_tmp);
183 
184  double Fave, Fmax, Fdev;
185  force.stat(Fave, Fmax, Fdev);
186  vout.general(m_vl, " Fratio_ave = %12.6f Fratio_max = %12.6f Fratio_dev = %12.6f\n",
187  Fave, Fmax, Fdev);
188  vout.paranoiac(m_vl, " Fratio::force end\n");
189 }
190 
191 
192 //====================================================================
193 //============================================================END=====
BridgeIO vout
Definition: bridgeIO.cpp:495
void set_config(Field *U)
setting pointer to the gauge configuration.
double dot(const Field &y, const Field &x)
Definition: field.cpp:46
virtual void set_config(Field *)=0
void general(const char *format,...)
Definition: bridgeIO.cpp:195
virtual void set_config(Field *)=0
setting pointer to the gauge configuration.
Container of Field-type object.
Definition: field.h:39
virtual void set_config(Field *)=0
int nvol() const
Definition: field.h:116
Class for parameters.
Definition: parameters.h:46
virtual void force_core1(Field &, const Field &, const Field &)
Definition: force_F.cpp:34
virtual void gauss_lex_global(Field &)
gaussian random number defined on global lattice.
double langevin(RandomNumbers *)
Langevis step.
virtual int field_nin()=0
returns the on-site d.o.f. for which the fermion operator is defined.
void set_parameter_verboselevel(const Bridge::VerboseLevel vl)
Definition: action.h:53
int nin() const
Definition: field.h:115
virtual void set_mode(const std::string &mode)
in Force, setting the mode is optional when H is nonhermitian.
Definition: force_F.h:54
double calcH()
calculate Hamiltonian of this action term.
virtual void invert_DdagD(Field &, const Field &, int &, double &)=0
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
Definition: field.h:84
double norm() const
Definition: field.h:211
void force(Field &)
returns force for molcular dynamical update of conjugate momenta.
virtual int field_nex()=0
returns the external d.o.f. for which the fermion operator is defined.
int nex() const
Definition: field.h:117
virtual void force_core(Field &, const Field &)
Definition: force_F.cpp:18
void paranoiac(const char *format,...)
Definition: bridgeIO.cpp:229
Bridge::VerboseLevel get_VerboseLevel() const
Definition: parameters.cpp:204
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:168
Bridge::VerboseLevel m_vl
Definition: action.h:75
Base class of random number generators.
Definition: randomNumbers.h:36
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:42
virtual void mult(Field &, const Field &)=0
multiplies fermion operator to a given field (2nd argument)
virtual void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr.h:96
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
static const std::string class_name
virtual void mult_dag(Field &, const Field &)
hermitian conjugate of mult(Field&, const Field&).
Definition: fopr.h:75
virtual int field_nvol()=0
returns the volume for which the fermion operator is defined.
static int NPE()