From 4740abed9fcd40359a9ced3a97ac1b9f56e379a0 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Mon, 20 Jul 2020 13:35:48 -0400 Subject: Thesis work. --- spheres.cpp | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) (limited to 'spheres.cpp') diff --git a/spheres.cpp b/spheres.cpp index 4b2237d..8165403 100644 --- a/spheres.cpp +++ b/spheres.cpp @@ -3,6 +3,7 @@ #include #include +#include "title.hpp" #include "space_wolff.hpp" #include "torus_symmetries.hpp" #include "animation.hpp" @@ -10,6 +11,12 @@ const unsigned D = 2; typedef Model, Radius> model; +std::function&)> sphereTitle(double L, double H) { + return [L, H](const Spin& s) -> double { + return 1e8 * critical[(320+(511 - unsigned(s.x(1) * 512 / L))) % 512][unsigned(s.x(0) * 512 / L)] + H * s.x(1); + }; +} + int main(int argc, char* argv[]) { const unsigned D = 2; @@ -18,10 +25,14 @@ int main(int argc, char* argv[]) { double T = 2.0 / log(1.0 + sqrt(2.0)); double H = 1.0; unsigned n = 25; + double ε = 0.1; + + double k = 1e8; + double a = 0.0; int opt; - while ((opt = getopt(argc, argv, "n:N:L:T:H:")) != -1) { + while ((opt = getopt(argc, argv, "n:N:L:T:H:e:k:a:")) != -1) { switch (opt) { case 'n': n = (unsigned)atof(optarg); @@ -38,14 +49,20 @@ int main(int argc, char* argv[]) { case 'H': H = atof(optarg); break; + case 'e': + ε = atof(optarg); + break; + case 'k': + k = atof(optarg); + break; + case 'a': + a = atof(optarg); + break; default: exit(1); } } - double k = 1e8; - double a = 0.0; - std::function&, const Spin&)> Z = [L, a, k](const Spin& s1, const Spin& s2) -> double { Vector d = diff(L, s1.x, s2.x); @@ -62,14 +79,17 @@ int main(int argc, char* argv[]) { } }; + /* std::function)> B = [L, H](Spin s) -> double { return H * s.x(1); }; + */ - auto g = uniformGenTorus(L); - std::ofstream ofile("test.dat"); - Animation, Radius> A(L, 750, argc, argv, 1000, true); - model sphere(L, Z, B); + auto g1 = rotateSwapTorus(L, ε); + auto g2 = nudgeGenTorus(L, ε); + auto g3 = uniformGenTorus(L); + Animation, Radius> A(L, 750, argc, argv, 1e7, true); + model sphere(L, Z, sphereTitle(L, H)); randutils::mt19937_rng rng; @@ -84,7 +104,15 @@ int main(int argc, char* argv[]) { sphere.dict.insert(ss); } - sphere.wolff(T, {g}, A, N); + sphere.wolff(T, {g1, g2, g3}, A, N); + + std::ofstream ofile("sphere_snap.dat"); + + for (const Spin* ss : sphere.s) { + Vector sx = sphere.s0.inverse().act(ss->x); + ofile << ss->s << " " << sx(0) << " " << sx(1) << "\n"; + } + ofile.close(); return 0; -- cgit v1.2.3-54-g00ecf