summaryrefslogtreecommitdiff
path: root/src/wolff.c
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2017-06-22 16:05:05 -0400
committerJaron Kent-Dobias <jaron@kent-dobias.com>2017-06-22 16:05:05 -0400
commit9db6ee734df8477a2529f56e4a6f4b1784bf941b (patch)
tree363a384753ce52cb681fbb07ba4575e592390651 /src/wolff.c
parentf2639be5d5006079868f69b0c7105a066166bec6 (diff)
downloadc++-9db6ee734df8477a2529f56e4a6f4b1784bf941b.tar.gz
c++-9db6ee734df8477a2529f56e4a6f4b1784bf941b.tar.bz2
c++-9db6ee734df8477a2529f56e4a6f4b1784bf941b.zip
many changes, simplification of some functions, removal of unneeded ones
Diffstat (limited to 'src/wolff.c')
-rw-r--r--src/wolff.c140
1 files changed, 84 insertions, 56 deletions
diff --git a/src/wolff.c b/src/wolff.c
index 0c369b7..7675889 100644
--- a/src/wolff.c
+++ b/src/wolff.c
@@ -1,5 +1,5 @@
-#include "wolff.h"
+#include <wolff.h>
int main(int argc, char *argv[]) {
int opt;
@@ -22,55 +22,56 @@ int main(int argc, char *argv[]) {
while ((opt = getopt(argc, argv, "N:L:T:H:m:e:oq:D")) != -1) {
switch (opt) {
- case 'N':
- N = (uint64_t)atof(optarg);
+ case 'N':
+ N = (uint64_t)atof(optarg);
+ break;
+ case 'L':
+ L = atoi(optarg);
+ break;
+ case 'T':
+ T = atof(optarg);
+ break;
+ case 'H':
+ H = atof(optarg);
+ break;
+ case 'm':
+ min_runs = atoi(optarg);
+ break;
+ case 'e':
+ eps = atof(optarg);
+ break;
+ case 'o':
+ output_state = true;
+ break;
+ case 'D':
+ use_dual = true;
+ break;
+ case 'q':
+ lattice_i = atoi(optarg);
+ switch (lattice_i) {
+ case 0:
+ lat = SQUARE_LATTICE;
break;
- case 'L':
- L = atoi(optarg);
+ case 1:
+ lat = DIAGONAL_LATTICE;
break;
- case 'T':
- T = atof(optarg);
+ case 2:
+ lat = TRIANGULAR_LATTICE;
break;
- case 'H':
- H = atof(optarg);
+ case 3:
+ lat = VORONOI_HYPERUNIFORM_LATTICE;
break;
- case 'm':
- min_runs = atoi(optarg);
+ case 4:
+ lat = VORONOI_LATTICE;
break;
- case 'e':
- eps= atof(optarg);
- break;
- case 'o':
- output_state = true;
- break;
- case 'D':
- use_dual = true;
- break;
- case 'q':
- lattice_i = atoi(optarg);
- switch (lattice_i) {
- case 0:
- lat = SQUARE_LATTICE;
- break;
- case 1:
- lat = DIAGONAL_LATTICE;
- break;
- case 2:
- lat = TRIANGULAR_LATTICE;
- break;
- case 3:
- lat = VORONOI_HYPERUNIFORM_LATTICE;
- break;
- case 4:
- lat = VORONOI_LATTICE;
- break;
- default:
- printf("lattice specifier must be 0 (VORONOI_LATTICE), 1 (DIAGONAL_LATTICE), or 2 (VORONOI_HYPERUNIFORM_LATTICE).\n");
- exit(EXIT_FAILURE);
- }
- break;
default:
+ printf("lattice specifier must be 0 (VORONOI_LATTICE), 1 "
+ "(DIAGONAL_LATTICE), or 2 (VORONOI_HYPERUNIFORM_LATTICE).\n");
exit(EXIT_FAILURE);
+ }
+ break;
+ default:
+ exit(EXIT_FAILURE);
}
}
@@ -94,12 +95,26 @@ int main(int argc, char *argv[]) {
double E1, E2, dE1, M1, M2, dM1, C, dC, X, dX, Mmu2, Mmu4, Emu2, Emu4;
double clust_per_sweep = 0;
- E1 = 0; E2 = 0; M1 = 0; M2 = 0; C = 0; dC = 0; X = 0; dX = 0;
- dE1 = 0; dM1 = 0; Mmu2 = 0; Mmu4 = 0; Emu2 = 0; Emu4 = 0;
+ E1 = 0;
+ E2 = 0;
+ M1 = 0;
+ M2 = 0;
+ C = 0;
+ dC = 0;
+ X = 0;
+ dX = 0;
+ dE1 = 0;
+ dM1 = 0;
+ Mmu2 = 0;
+ Mmu4 = 0;
+ Emu2 = 0;
+ Emu4 = 0;
printf("\n");
while (diff > eps || diff == 0. || n_runs < min_runs) {
- printf("\033[F\033[JWOLFF: sweep %lu, dH/H = %.4f, dM/M = %.4f, dC/C = %.4f, dX/X = %.4f, cps: %.1f\n", n_runs, fabs(dE1 / E1), dM1 / M1, dC / C, dX / X, clust_per_sweep);
+ printf("\033[F\033[JWOLFF: sweep %" PRIu64
+ ", dH/H = %.4f, dM/M = %.4f, dC/C = %.4f, dX/X = %.4f, cps: %.1f\n",
+ n_runs, fabs(dE1 / E1), dM1 / M1, dC / C, dX / X, clust_per_sweep);
uint32_t n_flips = 0;
uint32_t n_clust = 0;
@@ -114,19 +129,27 @@ int main(int argc, char *argv[]) {
E2 = E2 * (n_runs / (n_runs + 1.)) + pow(s->H, 2) * 1. / (n_runs + 1.);
M2 = M2 * (n_runs / (n_runs + 1.)) + pow(s->M, 2) * 1. / (n_runs + 1.);
- Mmu2 = Mmu2 * (n_runs / (n_runs + 1.)) + pow(s->M - M1, 2) * 1. / (n_runs + 1.);
- Mmu4 = Mmu4 * (n_runs / (n_runs + 1.)) + pow(s->M - M1, 4) * 1. / (n_runs + 1.);
- Emu2 = Emu2 * (n_runs / (n_runs + 1.)) + pow(s->H - E1, 2) * 1. / (n_runs + 1.);
- Emu4 = Emu4 * (n_runs / (n_runs + 1.)) + pow(s->H - E1, 4) * 1. / (n_runs + 1.);
+ Mmu2 = Mmu2 * (n_runs / (n_runs + 1.)) +
+ pow(s->M - M1, 2) * 1. / (n_runs + 1.);
+ Mmu4 = Mmu4 * (n_runs / (n_runs + 1.)) +
+ pow(s->M - M1, 4) * 1. / (n_runs + 1.);
+ Emu2 = Emu2 * (n_runs / (n_runs + 1.)) +
+ pow(s->H - E1, 2) * 1. / (n_runs + 1.);
+ Emu4 = Emu4 * (n_runs / (n_runs + 1.)) +
+ pow(s->H - E1, 4) * 1. / (n_runs + 1.);
if (n_runs > 1) {
double Msigma2 = n_runs / (n_runs - 1) * (M2 - pow(M1, 2));
X = Msigma2 / T;
- dX = sqrt((Mmu4 - (n_runs - 3.) / (n_runs - 1.) * pow(Mmu2, 2)) / n_runs) / T;
+ dX =
+ sqrt((Mmu4 - (n_runs - 3.) / (n_runs - 1.) * pow(Mmu2, 2)) / n_runs) /
+ T;
double Esigma2 = n_runs / (n_runs - 1) * (E2 - pow(E1, 2));
C = Esigma2 / T;
- dC = sqrt((Emu4 - (n_runs - 3.) / (n_runs - 1.) * pow(Emu2, 2)) / n_runs) / T;
+ dC =
+ sqrt((Emu4 - (n_runs - 3.) / (n_runs - 1.) * pow(Emu2, 2)) / n_runs) /
+ T;
dE1 = sqrt(Esigma2 / n_runs);
dM1 = sqrt(Msigma2 / n_runs);
@@ -134,14 +157,20 @@ int main(int argc, char *argv[]) {
diff = fabs(dX / X);
}
- clust_per_sweep = clust_per_sweep * (n_runs / (n_runs + 1.)) + (n_clust * 1. / N) * 1. / (n_runs + 1.);
+ clust_per_sweep = clust_per_sweep * (n_runs / (n_runs + 1.)) +
+ (n_clust * 1. / N) * 1. / (n_runs + 1.);
n_runs++;
}
- printf("\033[F\033[JWOLFF: sweep %lu, dH/H = %.4f, dM/M = %.4f, dC/C = %.4f, dX/X = %.4f, cps: %.1f\n", n_runs, fabs(dE1 / E1), dM1 / M1, dC / C, dX / X, clust_per_sweep);
+ printf("\033[F\033[JWOLFF: sweep %" PRIu64
+ ", dH/H = %.4f, dM/M = %.4f, dC/C = %.4f, dX/X = %.4f, cps: %.1f\n",
+ n_runs, fabs(dE1 / E1), dM1 / M1, dC / C, dX / X, clust_per_sweep);
FILE *outfile = fopen("out.dat", "a");
- fprintf(outfile, "%u %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f\n", L, T, H, E1 / h->nv, dE1 / h->nv, M1 / h->nv, dM1 / h->nv, C / h->nv, dC / h->nv, X / h->nv, dX / h->nv);
+ fprintf(outfile,
+ "%u %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f\n", L,
+ T, H, E1 / h->nv, dE1 / h->nv, M1 / h->nv, dM1 / h->nv, C / h->nv,
+ dC / h->nv, X / h->nv, dX / h->nv);
fclose(outfile);
free(bond_probs);
@@ -164,4 +193,3 @@ int main(int argc, char *argv[]) {
return 0;
}
-