diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2017-06-21 16:44:09 -0400 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2017-06-21 16:44:09 -0400 |
commit | db6f6556ff4e138de72dfba9a095659264235b71 (patch) | |
tree | 481dcb4d5e6ba59bc1b44771d752acf556ddceff /lib | |
parent | 3089143613a89f680c9c8b2dcbd774b4145c4eeb (diff) | |
download | c++-db6f6556ff4e138de72dfba9a095659264235b71.tar.gz c++-db6f6556ff4e138de72dfba9a095659264235b71.tar.bz2 c++-db6f6556ff4e138de72dfba9a095659264235b71.zip |
made some simplifications to the computation of magnetization and energy
Diffstat (limited to 'lib')
-rw-r--r-- | lib/wolff.h | 1 | ||||
-rw-r--r-- | lib/wolff_tools.c | 13 |
2 files changed, 5 insertions, 9 deletions
diff --git a/lib/wolff.h b/lib/wolff.h index 6beb03e..ca7635a 100644 --- a/lib/wolff.h +++ b/lib/wolff.h @@ -29,6 +29,7 @@ typedef struct ll_tag { typedef struct { int32_t nv; double dH; + int32_t dM; } cluster_t; double get_hamiltonian(graph_t *g, double *coupling, bool *x); diff --git a/lib/wolff_tools.c b/lib/wolff_tools.c index adef40f..d361344 100644 --- a/lib/wolff_tools.c +++ b/lib/wolff_tools.c @@ -123,10 +123,7 @@ cluster_t *flip_cluster(const graph_t *g, const double *ps, double H, bool *x, g } c->dH = n_bonds + H * n_h_bonds; - - if (x0) { - c->nv = -c->nv; - } + c->dM = n_h_bonds; return c; } @@ -137,7 +134,7 @@ double hh(double th) { double *get_bond_probs(double T, double H, ising_state_t *s) { double p = 1 - exp(-2 / T); - double q = 1 - exp(-2 * H / T); + double q = 1 - exp(-2 * fabs(H) / T); double *ps = (double *)malloc(s->g->ne * sizeof(double)); @@ -167,13 +164,11 @@ int32_t wolff_step(double T, double H, ising_state_t *s, gsl_rng *r, double *ps) cluster_t *c = flip_cluster(s->g, ps, H, s->spins, r); - s->M += 2 * c->nv; + s->M += -2 * c->dM; s->H += 2 * c->dH; - int32_t n_flipped = c->nv; - free(c); - return n_flipped; + return c->nv; } |