From fc242f52e835be85cc6030b6cae5619d18df7670 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Mon, 30 Jul 2018 06:32:51 -0400 Subject: various changes --- lib/state.h | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'lib/state.h') diff --git a/lib/state.h b/lib/state.h index 5abf65b..550d100 100644 --- a/lib/state.h +++ b/lib/state.h @@ -9,6 +9,10 @@ template class state_t { + private: + // updating fourier terms F requires many cos and sin calls, faster to do it beforehand. + std::vector> precomputed_cos; + std::vector> precomputed_sin; public: D_t D; L_t L; @@ -23,9 +27,6 @@ class state_t { v_t last_cluster_size; std::vector ReF; std::vector ImF; - // updating fourier terms F requires many cos and sin calls, faster to do it beforehand. - std::vector precomputed_cos; - std::vector precomputed_sin; std::function J; std::function H; @@ -44,11 +45,35 @@ class state_t { ReF[i] = spins[0] * 0.0; ImF[i] = spins[0] * 0.0; } - precomputed_cos.resize(L); - precomputed_sin.resize(L); - for (L_t i = 0; i < L; i++) { - precomputed_cos[i] = cos(2 * M_PI * (double)i / (double)L); - precomputed_sin[i] = sin(2 * M_PI * (double)i / (double)L); + precomputed_cos.resize(nv); + precomputed_sin.resize(nv); + for (v_t i = 0; i < nv; i++) { + precomputed_cos[i].resize(D); + precomputed_sin[i].resize(D); + for (D_t j = 0; j < D; j++) { + precomputed_cos[i][j] = cos(2 * M_PI * g.coordinate[i][j] / (double)L); + precomputed_sin[i][j] = sin(2 * M_PI * g.coordinate[i][j] / (double)L); + } + } + } + + void update_magnetization(const X_t& s_old, const X_t& s_new) { + M -= s_old; + M += s_new; + } + + void update_energy(const double& dE) { + E += dE; + } + + void update_fourierZero(v_t v, const X_t& s_old, const X_t& s_new) { +#ifdef DIMENSION + for (D_t i = 0; i < DIMENSION; i++) { +#else + for (D_t i = 0; i < D; i++) { +#endif + ReF[i] += (s_new - s_old) * precomputed_cos[v][i]; + ImF[i] += (s_new - s_old) * precomputed_sin[v][i]; } } }; -- cgit v1.2.3-70-g09d2