From 8a6109a78a6f7b9e9585cd89e8a10d1f626b3af1 Mon Sep 17 00:00:00 2001 From: Jaron Kent-Dobias Date: Tue, 17 Jul 2018 22:37:57 -0400 Subject: made many changes to implement alternate reflection generators, this is broken --- src/wolff_heisenberg.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/wolff_heisenberg.cpp') diff --git a/src/wolff_heisenberg.cpp b/src/wolff_heisenberg.cpp index aed4156..83ea503 100644 --- a/src/wolff_heisenberg.cpp +++ b/src/wolff_heisenberg.cpp @@ -13,12 +13,14 @@ int main(int argc, char *argv[]) { double *H = (double *)calloc(MAX_Q, sizeof(double)); bool silent = false; + bool use_pert = false; int opt; q_t J_ind = 0; q_t H_ind = 0; + double epsilon = 1; - while ((opt = getopt(argc, argv, "N:q:D:L:T:J:H:s")) != -1) { + while ((opt = getopt(argc, argv, "N:q:D:L:T:J:H:spe:")) != -1) { switch (opt) { case 'N': // number of steps N = (count_t)atof(optarg); @@ -39,6 +41,12 @@ int main(int argc, char *argv[]) { case 's': // don't print anything during simulation. speeds up slightly silent = true; break; + case 'p': + use_pert = true; + break; + case 'e': + epsilon = atof(optarg); + break; default: exit(EXIT_FAILURE); } @@ -52,6 +60,18 @@ int main(int argc, char *argv[]) { timestamp = spec.tv_sec*1000000000LL + spec.tv_nsec; } + std::function (gsl_rng *, const state_t , vector_t <3, double>> *)> gen_R; + + const char *pert_type; + + if (use_pert) { + gen_R = std::bind(generate_rotation_perturbation <3>, std::placeholders::_1, std::placeholders::_2, epsilon); + pert_type = "PERTURB"; + } else { + gen_R = generate_rotation_uniform <3>; + pert_type = "UNIFORM"; + } + FILE *outfile_info = fopen("wolff_metadata.txt", "a"); fprintf(outfile_info, "<| \"ID\" -> %lu, \"MODEL\" -> \"HEISENBERG\", \"q\" -> 3, \"D\" -> %" PRID ", \"L\" -> %" PRIL ", \"NV\" -> %" PRIv ", \"NE\" -> %" PRIv ", \"T\" -> %.15f, \"H\" -> {", timestamp, D, L, L * L, D * L * L, T); @@ -63,12 +83,12 @@ int main(int argc, char *argv[]) { } } - fprintf(outfile_info, "} |>\n"); + fprintf(outfile_info, "}, \"GENERATOR\" -> \"%s\", \"EPS\" -> %g |>\n", pert_type, epsilon); fclose(outfile_info); - wolff , vector_t <3, double>> (N, D, L, T, dot <3, double>, std::bind(H_vector <3, double>, std::placeholders::_1, H), timestamp, silent); + wolff , vector_t <3, double>> (N, D, L, T, dot <3, double>, std::bind(H_vector <3, double>, std::placeholders::_1, H), gen_R, timestamp, silent); free(H); -- cgit v1.2.3-70-g09d2