diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2018-07-10 12:37:02 -0400 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2018-07-10 12:37:02 -0400 |
commit | e53a4c09eb78e4c5a8365f1328a69ba7f9ff8992 (patch) | |
tree | 3c252af9ffafacab8392bf864270dcd034ed07ed /src/wolff_heisenberg.cpp | |
parent | 609fb52b670d8ed74584a988b8c63da82d8d523b (diff) | |
parent | 1810103bc9ac4c9a8d432d113f5ca6eae6560fb4 (diff) | |
download | c++-e53a4c09eb78e4c5a8365f1328a69ba7f9ff8992.tar.gz c++-e53a4c09eb78e4c5a8365f1328a69ba7f9ff8992.tar.bz2 c++-e53a4c09eb78e4c5a8365f1328a69ba7f9ff8992.zip |
Merge branch 'master' of m5:/srv/git/wolff
Diffstat (limited to 'src/wolff_heisenberg.cpp')
-rw-r--r-- | src/wolff_heisenberg.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/wolff_heisenberg.cpp b/src/wolff_heisenberg.cpp new file mode 100644 index 0000000..d1ebd48 --- /dev/null +++ b/src/wolff_heisenberg.cpp @@ -0,0 +1,77 @@ + +#include <getopt.h> + +#include <wolff.h> + +int main(int argc, char *argv[]) { + + count_t N = (count_t)1e7; + + D_t D = 2; + L_t L = 128; + double T = 2.26918531421; + double *H = (double *)calloc(MAX_Q, sizeof(double)); + + bool silent = false; + + int opt; + q_t J_ind = 0; + q_t H_ind = 0; + + while ((opt = getopt(argc, argv, "N:q:D:L:T:J:H:s")) != -1) { + switch (opt) { + case 'N': // number of steps + N = (count_t)atof(optarg); + break; + case 'D': // dimension + D = atoi(optarg); + break; + case 'L': // linear size + L = atoi(optarg); + break; + case 'T': // temperature + T = atof(optarg); + break; + case 'H': // external field. nth call couples to state n + H[H_ind] = atof(optarg); + H_ind++; + break; + case 's': // don't print anything during simulation. speeds up slightly + silent = true; + break; + default: + exit(EXIT_FAILURE); + } + } + + unsigned long timestamp; + + { + struct timespec spec; + clock_gettime(CLOCK_REALTIME, &spec); + timestamp = spec.tv_sec*1000000000LL + spec.tv_nsec; + } + + 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); + + for (q_t i = 0; i < 2; i++) { + fprintf(outfile_info, "%.15f", H[i]); + if (i < 2 - 1) { + fprintf(outfile_info, ", "); + } + } + + fprintf(outfile_info, "} |>\n"); + + fclose(outfile_info); + + + wolff <orthogonal_t <3, double>, vector_t <3, double>> (N, D, L, T, dot <3, double>, std::bind(H_vector <3, double>, std::placeholders::_1, H), timestamp, silent); + + free(H); + + return 0; +} + |