diff options
Diffstat (limited to 'src/wolff_potts.cpp')
-rw-r--r-- | src/wolff_potts.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/wolff_potts.cpp b/src/wolff_potts.cpp index 3b55472..74e0ea9 100644 --- a/src/wolff_potts.cpp +++ b/src/wolff_potts.cpp @@ -90,21 +90,21 @@ int main(int argc, char *argv[]) { state_t <symmetric_t<POTTSQ>, potts_t<POTTSQ>> s(D, L, T, Z, B); // define function that generates self-inverse rotations - std::function <symmetric_t<POTTSQ>(gsl_rng *, const sim_t *)> gen_R = [] (gsl_rng *r, const sim_t *s) -> symmetric_t<POTTSQ> { + std::function <symmetric_t<POTTSQ>(gsl_rng *, potts_t<POTTSQ>)> gen_R = [] (gsl_rng *r, potts_t<POTTSQ> v) -> symmetric_t<POTTSQ> { symmetric_t<POTTSQ> rot; init(&rot); - for (int i = POTTSQ - 1; i >= 0; i--) { - if (rot.perm[i] == i) { - q_t j = gsl_rng_uniform_int(r, i + 1); - if (rot.perm[j] == j) { - q_t tmp = rot.perm[i]; - rot.perm[i] = rot.perm[j]; - rot.perm[j] = tmp; - } - } + q_t j = gsl_rng_uniform_int(r, POTTSQ - 1); + q_t swap_v; + if (j < v.x) { + swap_v = j; + } else { + swap_v = j + 1; } + rot.perm[v.x] = swap_v; + rot.perm[swap_v] = v.x; + return rot; }; |