27 for (
int i = 0; i < action.size(); ++i) {
46 for (
int i = 0; i < action.size(); ++i) {
62 std::vector<Director *> director,
67 for (
int i = 0; i < action.size(); ++i) {
71 for (
int i = 0; i < director.size(); ++i) {
86 std::vector<Director *> director,
91 for (
int i = 0; i < action.size(); ++i) {
95 for (
int i = 0; i < director.size(); ++i) {
117 for (
int i = 0; i < action_set.size(); ++i) {
138 for (
int i = 0; i < action_set.size(); ++i) {
154 std::vector<Director *> director,
161 for (
int i = 0; i < action_set.size(); ++i) {
165 for (
int i = 0; i < director.size(); ++i) {
180 std::vector<Director *> director,
187 for (
int i = 0; i < action_set.size(); ++i) {
191 for (
int i = 0; i < director.size(); ++i) {
216 const string str_vlevel = params.
get_string(
"verbose_level");
222 int Nmdc, Nprec, Metropolis_test;
226 err += params.
fetch_int(
"number_of_steps", Nmdc);
227 err += params.
fetch_int(
"order_of_exp_iP", Nprec);
228 err += params.
fetch_int(
"Metropolis_test", Metropolis_test);
270 for (
int i = 0; i <
m_action.size(); ++i) {
308 double diff_H = H_total1 - H_total0;
309 double exp_minus_diff_H = exp(-diff_H);
318 if (rand <= exp_minus_diff_H) {
339 int NcA = Nc * Nc - 1;
341 int size_iP = NcA * Lvol * Ndim;
357 double H_actions = 0.0;
358 for (
int i = 0; i <
m_action.size(); ++i) {
363 double H_total = H_iP + H_actions;
378 int NcA = Nc * Nc - 1;
380 int size_iP = NcA * Lvol * Nex;
393 double H_actions = 0.0;
394 for (
int i = 0; i <
m_action.size(); ++i) {
399 double H_total = H_iP + H_actions;
408 double hn = iP.
norm();
409 double H_iP = 0.5 * hn * hn;
431 for (
int imdc = 1; imdc <
m_Nmdc + 1; imdc++) {
453 Field force(Nin, Nvol, Nex);
457 Field force1(Nin, Nvol, Nex);
459 for (
int i = 0; i <
m_action.size(); ++i) {
461 axpy(force, estep, force1);
465 axpy(iP, 1.0, force);
479 for (
int ex = 0; ex < Nex; ++ex) {
480 for (
int site = 0; site < Nvol; ++site) {
481 u0 = U.
mat(site, ex);
482 u1 = U.
mat(site, ex);
483 h1 = iP.
mat(site, ex);
485 for (
int iprec = 0; iprec <
m_Nprec; ++iprec) {
486 double exf = estep / (m_Nprec - iprec);
void set_parameters(const Parameters ¶ms)
void set(const int jin, const int site, const int jex, double v)
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.
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
int fetch_int(const string &key, int &value) const
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.
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
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.