88 for (
int i = 0; i <
ndofs; ++i) {
89 Kernel_Random::rand_gaussian(&
randu);
94 for (
int i = 0; i <
ndofs; ++i) {
95 Kernel_Random::rand_uniform(&
randu);
97 Kernel_Random::rand_gaussian(&
randu);
103 num_real smalldt =
dt / nrespa;
104 num_real hsmalldt = 0.5f * smalldt;
105 num_real qsmalldt = 0.25f * smalldt;
106 num_real Te = 1.0f / (phys::au::k *
beta);
107 num_real* rx = nhc_r + start;
108 num_real* px =
nhc_p + start;
109 for (
int i = 0, ix = 0; i < N; ++i, rx += nchain, px += nchain) {
111 for (
int k = 0; k < nrespa; ++k) {
112 for (
int s = 0; s < size_sy; ++s) {
116 (px[nchain - 2] * px[nchain - 2] /
nhc_Q[nchain - 2] - Te) *
wgt_sy[s] * hsmalldt;
117 for (
int h = nchain - 2; h > 0; --h) {
118 px[h] *= exp(-px[h + 1] /
nhc_Q[h + 1] *
wgt_sy[s] * qsmalldt);
119 px[h] += (px[h - 1] * px[h - 1] /
nhc_Q[h - 1] - Te) *
wgt_sy[s] * hsmalldt;
120 px[h] *= exp(-px[h + 1] /
nhc_Q[h + 1] *
wgt_sy[s] * qsmalldt);
122 if (nchain > 1) px[0] -= px[1] /
nhc_Q[1] *
wgt_sy[s] * qsmalldt;
123 px[0] += (np[i] * np[i] / nm[i] - Te) *
wgt_sy[s] * hsmalldt;
124 if (nchain > 1) px[0] -= px[1] /
nhc_Q[1] *
wgt_sy[s] * qsmalldt;
127 for (
int h = 0; h < nchain; ++h) rx[h] += px[h] /
nhc_Q[h] *
wgt_sy[s] * smalldt;
128 np[i] *= exp(-px[0] /
nhc_Q[0] *
wgt_sy[s] * smalldt);
131 if (nchain > 1) px[0] -= px[1] /
nhc_Q[1] *
wgt_sy[s] * qsmalldt;
132 px[0] += (np[i] * np[i] / nm[i] - Te) *
wgt_sy[s] * hsmalldt;
133 if (nchain > 1) px[0] -= px[1] /
nhc_Q[1] *
wgt_sy[s] * qsmalldt;
134 for (
int h = 1; h < nchain - 1; ++h) {
135 px[h] *= exp(-px[h + 1] /
nhc_Q[h + 1] *
wgt_sy[s] * qsmalldt);
136 px[h] += (px[h - 1] * px[h - 1] /
nhc_Q[h - 1] - Te) *
wgt_sy[s] * hsmalldt;
137 px[h] *= exp(-px[h + 1] /
nhc_Q[h + 1] *
wgt_sy[s] * qsmalldt);
141 (px[nchain - 2] * px[nchain - 2] /
nhc_Q[nchain - 2] - Te) *
wgt_sy[s] * hsmalldt;