#include #include #include #include #include #include #include #include #include #include #include #include #include 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);