diff options
| -rw-r--r-- | src/wolff_On.cpp | 28 | 
1 files changed, 15 insertions, 13 deletions
| diff --git a/src/wolff_On.cpp b/src/wolff_On.cpp index 336869f..329f468 100644 --- a/src/wolff_On.cpp +++ b/src/wolff_On.cpp @@ -5,10 +5,12 @@  #include <correlation.h>  #include <measure.h> -typedef state_t <orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> planar_t; +typedef orthogonal_t <N_COMP, double> orthogonal_R_t; +typedef vector_t <N_COMP, double> vector_R_t; +typedef state_t <orthogonal_R_t, vector_R_t> On_t;  // angle from the x-axis of a two-vector -double theta(vector_t <N_COMP, double> v) { +double theta(vector_R_t v) {    double x = v.x[0];    double y = v.x[1]; @@ -23,7 +25,7 @@ double theta(vector_t <N_COMP, double> v) {    }  } -double H_modulated(vector_t <N_COMP, double> v, int order, double mag) { +double H_modulated(vector_R_t v, int order, double mag) {    return mag * cos(order * theta(v));  } @@ -47,7 +49,7 @@ int main(int argc, char *argv[]) {    q_t H_ind = 0;    double epsilon = 1; -  unsigned char measurement_flags = 0; +  unsigned char measurement_flags = measurement_energy | measurement_clusterSize;    while ((opt = getopt(argc, argv, "N:q:D:L:T:J:H:spe:mo:M:")) != -1) {      switch (opt) { @@ -100,7 +102,7 @@ int main(int argc, char *argv[]) {    const char *pert_type; -  std::function <orthogonal_t <N_COMP, double>(gsl_rng *, const planar_t *)> gen_R; +  std::function <orthogonal_R_t(gsl_rng *, const On_t *)> gen_R;    if (use_pert) {      gen_R = std::bind(generate_rotation_perturbation <N_COMP>, std::placeholders::_1, std::placeholders::_2, epsilon); @@ -113,7 +115,7 @@ int main(int argc, char *argv[]) {    FILE *outfile_info = fopen("wolff_metadata.txt", "a"); -  fprintf(outfile_info, "<| \"ID\" -> %lu, \"MODEL\" -> \"%s\", \"q\" -> %d, \"D\" -> %" PRID ", \"L\" -> %" PRIL ", \"NV\" -> %" PRIv ", \"NE\" -> %" PRIv ", \"T\" -> %.15f, \"H\" -> {", timestamp, ON_strings[N_COMP], N_COMP, D, L, L * L, D * L * L, T); +  fprintf(outfile_info, "<| \"ID\" -> %lu, \"MODEL\" -> \"%s\", \"q\" -> %d, \"D\" -> %" PRID ", \"L\" -> %" PRIL ", \"NV\" -> %" PRIv ", \"NE\" -> %" PRIv ", \"T\" -> %.15f, \"H\" -> {", timestamp, ON_strings[N_COMP], N_COMP, D, L, pow(L, D), D * pow(L, D), T);    for (q_t i = 0; i < N_COMP; i++) {      fprintf(outfile_info, "%.15f", H_vec[i]); @@ -127,7 +129,7 @@ int main(int argc, char *argv[]) {    fclose(outfile_info);    unsigned int n_measurements = 0; -  std::function <void(const planar_t *)> *measurements = (std::function <void(const planar_t *)> *)calloc(POSSIBLE_MEASUREMENTS, sizeof(std::function <void(const planar_t *)>)); +  std::function <void(const On_t *)> *measurements = (std::function <void(const On_t *)> *)calloc(POSSIBLE_MEASUREMENTS, sizeof(std::function <void(const On_t *)>));    FILE *outfile_M, *outfile_E, *outfile_S, *outfile_F;    double *fftw_in, *fftw_out;    fftw_plan plan; @@ -137,7 +139,7 @@ int main(int argc, char *argv[]) {      sprintf(filename_E, "wolff_%lu_E.dat", timestamp);      outfile_E = fopen(filename_E, "wb");      free(filename_E); -    measurements[n_measurements] = measurement_energy_file<orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> (outfile_E); +    measurements[n_measurements] = measurement_energy_file<orthogonal_R_t, vector_R_t> (outfile_E);      n_measurements++;    } @@ -146,7 +148,7 @@ int main(int argc, char *argv[]) {      sprintf(filename_S, "wolff_%lu_S.dat", timestamp);      outfile_S = fopen(filename_S, "wb");      free(filename_S); -    measurements[n_measurements] = measurement_cluster_file<orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> (outfile_S); +    measurements[n_measurements] = measurement_cluster_file<orthogonal_R_t, vector_R_t> (outfile_S);      n_measurements++;    } @@ -155,7 +157,7 @@ int main(int argc, char *argv[]) {      sprintf(filename_M, "wolff_%lu_M.dat", timestamp);      outfile_M = fopen(filename_M, "wb");      free(filename_M); -    measurements[n_measurements] = measurement_magnetization_file<orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> (outfile_M); +    measurements[n_measurements] = measurement_magnetization_file<orthogonal_R_t, vector_R_t> (outfile_M);      n_measurements++;    } @@ -179,11 +181,11 @@ int main(int argc, char *argv[]) {      free(n);      free(kind); -    measurements[n_measurements] = measurement_fourier_file<orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> (outfile_F, plan, fftw_in, fftw_out); +    measurements[n_measurements] = measurement_fourier_file<orthogonal_R_t, vector_R_t> (outfile_F, plan, fftw_in, fftw_out);      n_measurements++;    } -  std::function <double(vector_t <N_COMP, double>)> H; +  std::function <double(vector_R_t)> H;    if (modulated_field) {      H = std::bind(H_modulated, std::placeholders::_1, order, H_vec[0]); @@ -191,7 +193,7 @@ int main(int argc, char *argv[]) {      H = std::bind(H_vector <N_COMP, double>, std::placeholders::_1, H_vec);    } -  wolff <orthogonal_t <N_COMP, double>, vector_t <N_COMP, double>> (N, D, L, T, dot <N_COMP, double>, H, gen_R, n_measurements, measurements, silent); +  wolff <orthogonal_R_t, vector_R_t> (N, D, L, T, dot <N_COMP, double>, H, gen_R, n_measurements, measurements, silent);    free(measurements); | 
