25 for (
int i = 0; i < action.size(); ++i) {
44 for (
int i = 0; i < action.size(); ++i) {
60 std::vector<Director *> director,
65 for (
int i = 0; i < action.size(); ++i) {
69 for (
int i = 0; i < director.size(); ++i) {
84 std::vector<Director *> director,
89 for (
int i = 0; i < action.size(); ++i) {
93 for (
int i = 0; i < director.size(); ++i) {
115 for (
int i = 0; i < action_set.size(); ++i) {
136 for (
int i = 0; i < action_set.size(); ++i) {
152 std::vector<Director *> director,
159 for (
int i = 0; i < action_set.size(); ++i) {
163 for (
int i = 0; i < director.size(); ++i) {
178 std::vector<Director *> director,
185 for (
int i = 0; i < action_set.size(); ++i) {
189 for (
int i = 0; i < director.size(); ++i) {
214 const string str_vlevel = params.
get_string(
"verbose_level");
221 bool Metropolis_test;
225 err += params.
fetch_int(
"number_of_steps", Nmdc);
226 err += params.
fetch_int(
"order_of_exp_iP", Nprec);
227 err += params.
fetch_bool(
"Metropolis_test", Metropolis_test);
230 int isset_ssize = params.
fetch_double(
"step_size", Estep);
231 int isset_trajlen = params.
fetch_double(
"trajectory_length", traj_length);
233 if ((isset_ssize != 0) && (isset_trajlen != 0)) {
236 }
else if ((isset_ssize == 0) && (isset_trajlen != 0)) {
238 }
else if ((isset_ssize != 0) && (isset_trajlen == 0)) {
240 Estep = traj_length / Nmdc;
243 double diff = Estep * Nmdc - traj_length;
263 vout.
crucial(
m_vl,
"%s: warning: integer variable for Metroplis_test is obsolete. use boolean parameter.\n",
class_name.c_str());
265 return set_parameters(Estep, Nmdc, Nprec, (Metropolis_test == 0 ?
false :
true));
278 vout.
general(
m_vl,
" Metropolis_test = %s\n", Metropolis_test ?
"true" :
"false");
298 for (
int i = 0; i <
m_action.size(); ++i) {
302 const int Nin = U.
nin();
303 const int Nvol = U.
nvol();
304 const int Nex = U.
nex();
312 const double H_total0 =
langevin(iP, U);
336 const double diff_H = H_total1 - H_total0;
337 const double exp_minus_diff_H = exp(-diff_H);
347 if (rand <= exp_minus_diff_H) {
367 const int NcA = Nc * Nc - 1;
383 vout.
general(
m_vl,
" H_kin/dof = %18.8f\n", H_iP / NcA / Nvol / NPE / Ndim);
386 double H_actions = 0.0;
387 for (
int i = 0; i <
m_action.size(); ++i) {
392 const double H_total = H_iP + H_actions;
400 const int Nin = U.
nin();
401 const int Nvol = U.
nvol();
402 const int Nex = U.
nex();
406 const int NcA = Nc * Nc - 1;
413 const double H_iP =
calcH_P(iP);
415 vout.
general(
m_vl,
" H_kin/dof = %18.8f\n", H_iP / NcA / Nvol / NPE / Nex);
417 double H_actions = 0.0;
418 for (
int i = 0; i <
m_action.size(); ++i) {
423 const double H_total = H_iP + H_actions;
432 const double hn = iP.
norm();
433 const double H_iP = 0.5 * hn * hn;
445 const double estep2 = 0.5 *
m_Estep;
455 for (
int imdc = 1; imdc <
m_Nmdc + 1; imdc++) {
472 const int Nin = U.
nin();
473 const int Nvol = U.
nvol();
474 const int Nex = U.
nex();
477 Field force(Nin, Nvol, Nex);
481 Field force1(Nin, Nvol, Nex);
483 for (
int i = 0; i <
m_action.size(); ++i) {
485 axpy(force, estep, force1);
489 axpy(iP, 1.0, force);
496 const int Nvol = U.
nvol();
497 const int Nex = U.
nex();
503 for (
int ex = 0; ex < Nex; ++ex) {
504 for (
int site = 0; site < Nvol; ++site) {
505 u0 = U.
mat(site, ex);
506 u1 = U.
mat(site, ex);
507 h1 = iP.
mat(site, ex);
509 for (
int iprec = 0; iprec <
m_Nprec; ++iprec) {
510 double exf = estep / (m_Nprec - iprec);
int fetch_bool(const string &key, bool &value) const
void set_parameters(const Parameters ¶ms)
static double epsilon_criterion()
void set(const int jin, const int site, const int jex, double v)
double calcH_P(const Field_G &iP)
void general(const char *format,...)
Container of Field-type object.
int fetch_double(const string &key, double &value) const
double plaquette(const Field_G &)
calculates plaquette value.
static const std::string class_name
double set_iP(Field_G &iP)
Setting conjugate momenta and returns kinetic part of Hamiltonian.
double calc_Hamiltonian(const Field_G &iP, const Field_G &U)
Langevin_Momentum * m_Langevin_P
Bridge::VerboseLevel m_vl
std::vector< Action * > m_action
ActionSet get_actions() const
int fetch_int(const string &key, int &value) const
void integrate(Field_G &iP, Field_G &U)
Common parameter class: provides parameters as singleton.
double langevin(Field_G &iP, const Field_G &U)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
void update_U(const double estep, const Field_G &iP, Field_G &U)
void crucial(const char *format,...)
std::vector< Director * > m_director
lists of actions at respective integrator levels.
Base class of random number generators.
~HMC_Leapfrog()
destructor
string get_string(const string &key) const
void set_mat(const int site, const int mn, const Mat_SU_N &U)
std::vector< Action * > ActionSet
Mat_SU_N mat(const int site, const int mn=0) const
static VerboseLevel set_verbose_level(const std::string &str)
HMC_Leapfrog(std::vector< Action * > action, RandomNumbers *rand)
constructor: with array of actions
Langevin part of HMC for conjugate momentum to link variable.
void update_P(const double estep, Field_G &iP, const Field_G &U)