diff options
Diffstat (limited to 'lib/wolff.h')
-rw-r--r-- | lib/wolff.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/wolff.h b/lib/wolff.h new file mode 100644 index 0000000..6beb03e --- /dev/null +++ b/lib/wolff.h @@ -0,0 +1,51 @@ + +#include <string.h> +#include <math.h> +#include <getopt.h> +#include <float.h> +#include <sys/types.h> +#include <inttypes.h> +#include <gsl/gsl_randist.h> +#include <gsl/gsl_rng.h> +#include <stdbool.h> +#include <assert.h> +#include <omp.h> + +#include <jst/graph.h> +#include <jst/rand.h> + +typedef struct { + graph_t *g; + bool *spins; + int32_t M; + double H; +} ising_state_t; + +typedef struct ll_tag { + uint32_t x; + struct ll_tag *next; +} ll_t; + +typedef struct { + int32_t nv; + double dH; +} cluster_t; + +double get_hamiltonian(graph_t *g, double *coupling, bool *x); + +void stack_push(ll_t **q, uint32_t x); + +uint32_t stack_pop(ll_t **q); + +bool stack_contains(const ll_t *q, uint32_t x); + +cluster_t *flip_cluster(const graph_t *g, const double *ps, double H, bool *x, gsl_rng *r); + +graph_t *graph_add_ext(const graph_t *g); + +double hh(double th); + +double *get_bond_probs(double T, double H, ising_state_t *s); + +int32_t wolff_step(double T, double H, ising_state_t *s, gsl_rng *r, double *ps); + |