summaryrefslogtreecommitdiff
path: root/lib/cluster.c
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2018-03-27 16:12:20 -0400
committerJaron Kent-Dobias <jaron@kent-dobias.com>2018-03-27 16:12:20 -0400
commit9dcc45d90b09d75d053ebb2d4e33a71a9fb2d069 (patch)
tree87e10b12c3ba1c31c3d744cd15ca1fc0ef786837 /lib/cluster.c
parent0793838129e228d92ba4d4e2c0f95946e2e6a0f7 (diff)
downloadc++-9dcc45d90b09d75d053ebb2d4e33a71a9fb2d069.tar.gz
c++-9dcc45d90b09d75d053ebb2d4e33a71a9fb2d069.tar.bz2
c++-9dcc45d90b09d75d053ebb2d4e33a71a9fb2d069.zip
some optimizations
Diffstat (limited to 'lib/cluster.c')
-rw-r--r--lib/cluster.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/lib/cluster.c b/lib/cluster.c
index fa417fa..7274eb9 100644
--- a/lib/cluster.c
+++ b/lib/cluster.c
@@ -193,8 +193,13 @@ v_t flip_cluster_vector(vector_state_t *s, v_t v0, double *rot, gsl_rng *r) {
// if (!tree_contains(T, v)) { // if the vertex hasn't already been flipped
if (!marks[v]) {
+ bool v_is_external = false;
double *s_old, *s_new, *R_tmp;
+ if (v == s->g->nv - 1) {
+ v_is_external = true;
+ }
+
//tree_insert(&T, v);
marks[v] = true;
@@ -209,17 +214,24 @@ v_t flip_cluster_vector(vector_state_t *s, v_t v0, double *rot, gsl_rng *r) {
for (v_t i = 0; i < nn; i++) {
v_t vn = s->g->v_adj[s->g->v_i[v] + i];
+
+ bool vn_is_external = false;
+
+ if (vn == s->g->nv - 1) {
+ vn_is_external = true;
+ }
+
double *sn;
- if (vn != s->g->nv - 1) {
+
+ if (!vn_is_external) {
sn = &(s->spins[s->n * vn]);
}
- double prob;
- bool is_ext = (v == s->g->nv - 1 || vn == s->g->nv - 1);
+ double prob;
- if (is_ext) {
+ if (v_is_external || vn_is_external) {
double *rs_old, *rs_new;
- if (vn == s->g->nv - 1) {
+ if (vn_is_external) {
rs_old = vector_rotate_inverse(s->n, s->R, s_old);
rs_new = vector_rotate_inverse(s->n, s->R, s_new);
} else {
@@ -237,8 +249,6 @@ v_t flip_cluster_vector(vector_state_t *s, v_t v0, double *rot, gsl_rng *r) {
} else {
double dE = (s->J)(vector_dot(s->n, sn, s_old)) - (s->J)(vector_dot(s->n, sn, s_new));
prob = 1.0 - exp(-dE / s->T);
- //printf("(%g %g) (%g %g) (%g %g) %g\n", s_old[0], s_old[1], s_new[0], s_new[1], sn[0], sn[1], dE);
- //getchar();
s->E += dE;
}