#pragma once #include #include #include #include #include #include #include #include #include #include #include "types.h" #include "rand.h" #include "stack.h" #include "convex.h" #include "graph.h" #include "tree.h" #include "measurement.h" #include "orthogonal.h" #include "dihedral.h" #include "dihinf.h" #include "yule_walker.h" typedef struct { graph_t *g; q_t *spins; double T; double *J; double *H; double *J_probs; double *H_probs; dihedral_t *R; double E; v_t *M; q_t q; } ising_state_t; typedef struct { graph_t *g; h_t *spins; double T; double (*J)(h_t); double (*H)(double *, h_t); double *H_info; dihinf_t *R; double E; h_t M; } dgm_state_t; typedef struct { graph_t *g; double *spins; double T; double (*J)(double); double (*H)(q_t, double *, double *); double *H_info; double *R; double E; double *M; q_t n; } vector_state_t; typedef enum { VECTOR, MODULATED, CUBIC, QUADRATIC } vector_field_t; v_t flip_cluster(ising_state_t *s, v_t v0, q_t s1, gsl_rng *r); v_t flip_cluster_vector(vector_state_t *s, v_t v0, double *rot, gsl_rng *r); v_t flip_cluster_dgm(dgm_state_t *s, v_t v0, h_t rot, gsl_rng *r); graph_t *graph_add_ext(const graph_t *g);