29 #ifdef USE_PARAMETERS_FACTORY
48 for (
int i = 0; i < action.size(); ++i) {
67 for (
int i = 0; i < action.size(); ++i) {
83 std::vector<Director *> director,
88 for (
int i = 0; i < action.size(); ++i) {
92 for (
int i = 0; i < director.size(); ++i) {
107 std::vector<Director *> director,
112 for (
int i = 0; i < action.size(); ++i) {
116 for (
int i = 0; i < director.size(); ++i) {
138 for (
int i = 0; i < action_set.size(); ++i) {
159 for (
int i = 0; i < action_set.size(); ++i) {
175 std::vector<Director *> director,
182 for (
int i = 0; i < action_set.size(); ++i) {
186 for (
int i = 0; i < director.size(); ++i) {
201 std::vector<Director *> director,
208 for (
int i = 0; i < action_set.size(); ++i) {
212 for (
int i = 0; i < director.size(); ++i) {
237 const string str_vlevel = params.
get_string(
"verbose_level");
243 int Nmdc, Nprec, Metropolis_test;
247 err += params.
fetch_int(
"number_of_steps", Nmdc);
248 err += params.
fetch_int(
"order_of_exp_iP", Nprec);
249 err += params.
fetch_int(
"Metropolis_test", Metropolis_test);
291 for (
int i = 0; i <
m_action.size(); ++i) {
329 double diff_H = H_total1 - H_total0;
330 double exp_minus_diff_H = exp(-diff_H);
339 if (rand <= exp_minus_diff_H) {
360 int NcA = Nc * Nc - 1;
362 int size_iP = NcA * Lvol * Ndim;
378 double H_actions = 0.0;
379 for (
int i = 0; i <
m_action.size(); ++i) {
384 double H_total = H_iP + H_actions;
399 int NcA = Nc * Nc - 1;
401 int size_iP = NcA * Lvol * Nex;
414 double H_actions = 0.0;
415 for (
int i = 0; i <
m_action.size(); ++i) {
420 double H_total = H_iP + H_actions;
429 double hn = iP.
norm();
430 double H_iP = 0.5 * hn * hn;
452 for (
int imdc = 1; imdc <
m_Nmdc + 1; imdc++) {
474 Field force(Nin, Nvol, Nex);
478 Field force1(Nin, Nvol, Nex);
480 for (
int i = 0; i <
m_action.size(); ++i) {
482 axpy(force, estep, force1);
486 axpy(iP, 1.0, force);
500 for (
int ex = 0; ex < Nex; ++ex) {
501 for (
int site = 0; site < Nvol; ++site) {
502 u0 = U.
mat(site, ex);
503 u1 = U.
mat(site, ex);
504 h1 = iP.
mat(site, ex);
506 for (
int iprec = 0; iprec <
m_Nprec; ++iprec) {
507 double exf = estep / (m_Nprec - iprec);
void set_parameters(const Parameters ¶ms)
void Register_string(const string &, const string &)
void set(const int jin, const int site, const int jex, double v)
void general(const char *format,...)
void Register_int(const string &, const int)
Container of Field-type object.
static const std::string class_name
double set_iP(Field_G &iP)
Setting conjugate momenta and returns kinetic part of Hamiltonian.
double plaquette(const Field_G &)
calculates plaquette value.
Langevin_Momentum * m_Langevin_P
void update_P(double estep, Field_G &iP, Field_G &U)
Bridge::VerboseLevel m_vl
std::vector< Action * > m_action
ActionSet get_actions() const
Parameters_HMC_Leapfrog()
void integrate(Field_G &iP, Field_G &U)
void update_U(double estep, Field_G &iP, Field_G &U)
Common parameter class: provides parameters as singleton.
double langevin(Field_G &iP, Field_G &U)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
double calcH_P(Field_G &iP)
void crucial(const char *format,...)
std::vector< Director * > m_director
lists of actions at respective integrator levels.
static bool Register(const std::string &realm, const creator_callback &cb)
Base class of random number generators.
void Register_double(const string &, const double)
~HMC_Leapfrog()
destructor
int fetch_double(const string &key, double &val) const
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
int fetch_int(const string &key, int &val) const
double calc_Hamiltonian(Field_G &iP, Field_G &U)
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.