16 #ifdef USE_PARAMETERS_FACTORY
33 #ifdef USE_PARAMETERS_FACTORY
46 const string str_vlevel = params.
get_string(
"verbose_level");
52 int Nmdc, Nprec, Mtpl_test;
56 err += params.
fetch_int(
"number_of_steps", Nmdc);
57 err += params.
fetch_int(
"order_of_exp_iP", Nprec);
58 err += params.
fetch_int(
"Metropolis_test", Mtpl_test);
61 vout.
crucial(
m_vl,
"HMC_Leapfrog: fetch error, input parameter not found.\n");
100 for (
int i = 0; i <
m_action.size(); ++i) {
138 double diff_H = H_tot1 - H_tot0;
139 double Arprob = exp(-diff_H);
165 int NcA = Nc * Nc - 1;
167 int size_iP = NcA * Lvol * Ndim;
171 for (
int i = 0; i <
m_action.size(); ++i) {
185 double H_actions = 0.0;
186 for (
int i = 0; i <
m_action.size(); ++i) {
191 double H_tot = H_iP + H_actions;
200 int Nvol = iP.
nvol();
204 int NcA = Nc * Nc - 1;
209 Field Hrand(NcA, Nvol, Nex);
213 double sq3r = 1.0 / sqrt(3.0);
214 double sq3r2 = 2.0 * sq3r;
216 for (
int ex = 0; ex < Nex; ++ex) {
217 for (
int site = 0; site < Nvol; ++site) {
220 double hc1 = Hrand.
cmp(0, site, ex);
221 double hc2 = Hrand.
cmp(1, site, ex);
222 double hc3 = Hrand.
cmp(2, site, ex);
223 double hc4 = Hrand.
cmp(3, site, ex);
224 double hc5 = Hrand.
cmp(4, site, ex);
225 double hc6 = Hrand.
cmp(5, site, ex);
226 double hc7 = Hrand.
cmp(6, site, ex);
227 double hc8 = Hrand.
cmp(7, site, ex);
236 iP.
set(0, site, ex, 0.0);
237 iP.
set(1, site, ex, hc3 + hc8 * sq3r);
238 iP.
set(2, site, ex, hc2);
239 iP.
set(3, site, ex, hc1);
240 iP.
set(4, site, ex, hc5);
241 iP.
set(5, site, ex, hc4);
242 iP.
set(6, site, ex, -hc2);
243 iP.
set(7, site, ex, hc1);
244 iP.
set(8, site, ex, 0.0);
245 iP.
set(9, site, ex, -hc3 + hc8 * sq3r);
246 iP.
set(10, site, ex, hc7);
247 iP.
set(11, site, ex, hc6);
248 iP.
set(12, site, ex, -hc5);
249 iP.
set(13, site, ex, hc4);
250 iP.
set(14, site, ex, -hc7);
251 iP.
set(15, site, ex, hc6);
252 iP.
set(16, site, ex, 0.0);
253 iP.
set(17, site, ex, -hc8 * sq3r2);
257 double iP2 = iP.
norm();
258 iP2 = 0.5 * iP2 * iP2;
274 int NcA = Nc * Nc - 1;
276 int size_iP = NcA * Lvol * Nex;
277 int size_U = Lvol * 6.0;
278 int size_psf = Lvol * Nc * Nd;
288 double H_actions = 0.0;
289 for (
int i = 0; i <
m_action.size(); ++i) {
294 double H_tot = H_iP + H_actions;
303 double hn = iP.
norm();
304 double H_iP = 0.5 * hn * hn;
326 for (
int imdc = 1; imdc <
m_Nmdc + 1; imdc++) {
348 Field force(Nin, Nvol, Nex);
352 Field force1(Nin, Nvol, Nex);
353 double H_actions = 0.0;
354 for (
int i = 0; i <
m_action.size(); ++i) {
356 force += estep * force1;
373 for (
int ex = 0; ex < Nex; ++ex) {
374 for (
int site = 0; site < Nvol; ++site) {
375 u0 = U.
mat(site, ex);
376 u1 = U.
mat(site, ex);
377 h1 = iP.
mat(site, ex);
379 for (
int iprec = 0; iprec <
m_Nprec; ++iprec) {
380 double exf = estep / (m_Nprec - iprec);
392 for (
int i = 0; i <
m_action.size(); ++i) {