16 #ifdef USE_PARAMETERS_FACTORY
30 #ifdef USE_PARAMETERS_FACTORY
43 const string str_vlevel = params.
get_string(
"verbose_level");
51 err += params.
fetch_int(
"Metropolis_test", Mtpl_test);
54 vout.
crucial(
m_vl,
"HMC_General: fetch error, input parameter not found.\n");
87 for (
int i = 0; i <
m_action.size(); ++i) {
124 double diff_H = H_tot1 - H_tot0;
125 double Arprob = exp(-diff_H);
151 int NcA = Nc * Nc - 1;
153 int size_iP = NcA * Lvol * Ndim;
157 for (
int i = 0; i <
m_action.size(); ++i) {
172 double H_actions = 0.0;
173 for (
int i = 0; i <
m_action.size(); ++i) {
177 double H_tot = H_iP + H_actions;
186 int Nvol = iP.
nvol();
190 int NcA = Nc * Nc - 1;
195 Field Hrand(NcA, Nvol, Nex);
199 double sq3r = 1.0 / sqrt(3.0);
200 double sq3r2 = 2.0 * sq3r;
202 for (
int ex = 0; ex < Nex; ++ex) {
203 for (
int site = 0; site < Nvol; ++site) {
205 double hc1 = Hrand.
cmp(0, site, ex);
206 double hc2 = Hrand.
cmp(1, site, ex);
207 double hc3 = Hrand.
cmp(2, site, ex);
208 double hc4 = Hrand.
cmp(3, site, ex);
209 double hc5 = Hrand.
cmp(4, site, ex);
210 double hc6 = Hrand.
cmp(5, site, ex);
211 double hc7 = Hrand.
cmp(6, site, ex);
212 double hc8 = Hrand.
cmp(7, site, ex);
213 iP.
set(0, site, ex, 0.0);
214 iP.
set(1, site, ex, hc3 + hc8 * sq3r);
215 iP.
set(2, site, ex, hc2);
216 iP.
set(3, site, ex, hc1);
217 iP.
set(4, site, ex, hc5);
218 iP.
set(5, site, ex, hc4);
219 iP.
set(6, site, ex, -hc2);
220 iP.
set(7, site, ex, hc1);
221 iP.
set(8, site, ex, 0.0);
222 iP.
set(9, site, ex, -hc3 + hc8 * sq3r);
223 iP.
set(10, site, ex, hc7);
224 iP.
set(11, site, ex, hc6);
225 iP.
set(12, site, ex, -hc5);
226 iP.
set(13, site, ex, hc4);
227 iP.
set(14, site, ex, -hc7);
228 iP.
set(15, site, ex, hc6);
229 iP.
set(16, site, ex, 0.0);
230 iP.
set(17, site, ex, -hc8 * sq3r2);
234 double iP2 = iP.
norm();
235 iP2 = 0.5 * iP2 * iP2;
251 int NcA = Nc * Nc - 1;
253 int size_iP = NcA * Lvol * Nex;
254 int size_U = Lvol * 6.0;
255 int size_psf = Lvol * Nc * Nd;
266 double H_actions = 0.0;
267 for (
int i = 0; i <
m_action.size(); ++i) {
271 double H_tot = H_iP + H_actions;
279 double hn = iP.
norm();
280 double H_iP = 0.5 * hn * hn;