From e3fbb92e68f0410f106285c9a49ecf8cd0a488a9 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Sat, 21 Jul 2018 19:43:16 -0400 Subject: added visualization, and started potts --- lib/symmetric.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) (limited to 'lib/symmetric.h') diff --git a/lib/symmetric.h b/lib/symmetric.h index c71521d..0b292a6 100644 --- a/lib/symmetric.h +++ b/lib/symmetric.h @@ -5,6 +5,10 @@ #include "types.h" +#ifdef __cplusplus +extern "C" { +#endif + q_t *symmetric_compose(q_t q, const q_t *g1, const q_t *g2); q_t symmetric_act(const q_t *g, q_t s); @@ -13,3 +17,87 @@ q_t *symmetric_invert(q_t q, const q_t *g); q_t *symmetric_gen_transformations(q_t q); +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +template +class symmetric_t { + public: + q_t *perm; +}; + +template +void init(symmetric_t *p) { + p->perm = (q_t *)malloc(q * sizeof(q_t)); + + for (q_t i = 0; i < q; i++) { + p->perm[i] = i; + } +} + +template +void free_spin(symmetric_t p) { + free(p->perm); +} + +template +symmetric_t copy(symmetric_t x) { + symmetric_t x2; + x2.perm = (q_t *)malloc(q * sizeof(q_t)); + + for (q_t i = 0; i < q; i++) { + x2.perm[i] = x.perm[i]; + } + + return x2; +} + +template +potts_t act(symmetric_t r, potts_t s) { + potts_t s2; + s2.x = r.perm[s.x]; + return s2; +} + +template +symmetric_t act(symmetric_t r1, symmetric_t r2) { + symmetric_t r3; + r3.perm = (q_t *)malloc(q * sizeof(q_t)); + for (q_t i = 0; i < q; i++) { + r3.perm[i] = r1.perm[r2.perm[i]]; + } + + return r3; +} + +template +potts_t act_inverse(symmetric_t r, potts_t s) { + potts_t s2; + + q_t i; + + for (i = 0; i < q; i++) { + if (r.perm[i] == s.x) { + break; + } + } + + s2.x = i; + + return s2; +} + +template +symmetric_t act_inverse(symmetric_t r1, symmetric_t r2) { + symmetric_t r3; + r3.perm = (q_t *)malloc(q * sizeof(q_t)); + for (q_t i = 0; i < q; i++) { + r3.perm[r1.perm[i]] = r2.perm[i]; + } + + return r3; +} +#endif + -- cgit v1.2.3-70-g09d2