From 5ffaf0a1bb0f0b47d57d0f24ee1134659775dacb Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Fri, 20 Jul 2018 22:57:39 -0400 Subject: added ising example to cpp collection --- lib/ising.h | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/ising.h (limited to 'lib/ising.h') diff --git a/lib/ising.h b/lib/ising.h new file mode 100644 index 0000000..4e5164b --- /dev/null +++ b/lib/ising.h @@ -0,0 +1,80 @@ +#pragma once + +#include +#include + +#include "types.h" + +class ising_t { + public: + bool x; + + typedef int M_t; + typedef double F_t; +}; + +void init(ising_t *p) { + p->x = false; +} + +void free_spin(ising_t s) { + // do nothing! +} + +void free_spin(int s) { + // do nothing +} + +void free_spin(double s) { + // do nothing +} + +ising_t copy(ising_t s) { + return s; +} + +template +void add(T *s1, T a, ising_t s2) { + if (s2.x) { + *s1 -= a; + } else { + *s1 += a; + } +} + +int scalar_multiple(int factor, ising_t s) { + if (s.x) { + return -factor; + } else { + return factor; + } +} + + +double norm_squared(double s) { + return pow(s, 2); +} + +template +void write_magnetization(T M, FILE *outfile) { + fwrite(&M, sizeof(T), 1, outfile); +} + +// below this line is unnecessary, but convenient + +double ising_dot(ising_t s1, ising_t s2) { + if (s1.x == s2.x) { + return 1.0; + } else { + return -1.0; + } +} + +double scalar_field(ising_t s, double H) { + if (s.x) { + return -H; + } else { + return H; + } +} + -- cgit v1.2.3-70-g09d2