# 2 Dimensional Ising Model: src/phase_transition.cpp Source File

Loading...
Searching...
No Matches
phase_transition.cpp
Go to the documentation of this file.
/** @file phase_transition.cpp
*
* @author Cory Alexander Balaton (coryab)
* @author Janita Ovidie Sandtrøen Willumsen (janitaws)
*
* @version 1.0
*
* @brief Sweep over different temperatures and generate data.
*
* @details This program takes in 4 arguments: the start temperature,
* the end temperature, the amount of temperature points to simulate, and
* the amount of monte carlo samples to collect, in that order.
*
* @bug No known bugs
* */
#include "data_type.hpp"
#include "monte_carlo.hpp"
#include "utils.hpp"
#include <getopt.h>
#include <omp.h>
#include <string>
/** @brief A function that displays how to use the program and quits.*/
void usage(std::string filename)
{
std::cout << "Usage: " << filename
<< " <start temperature> <end temperature> <points> "
"<lattice size> <cycles> <burn-in-time> <output file>\n\n"
<< "\t[ -h | --help ]\n";
exit(-1);
}
/** @brief The main function.*/
int main(int argc, char **argv)
{
// Command options
struct option long_options[] = {{"help", 0, 0, 0}, {NULL, 0, NULL, 0}};
int option_index = -1;
int c;
while (true) {
c = getopt_long(argc, argv, "h", long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
switch (option_index) {
case 0: // Not a mistake. This just goes to the default.
default:
usage(argv[0]);
}
break;
case 'h':
default:
usage(argv[0]);
}
}
// Check that the number of arguments is at least 8.
if (argc < 8) {
usage(argv[0]);
}
// Timing variables
double t0, t1;
t0 = omp_get_wtime();
// Define/initialize variables
double start = atof(argv[1]), end = atof(argv[2]);
int points = atoi(argv[3]), cycles = atoi(argv[5]), L = atoi(argv[4]),
burn_in_time = atoi(argv[6]), N = L * L;
std::string outfile = argv[7];
montecarlo:: phase_transition(L, start, end, points, cycles,
montecarlo:: mcmc_parallel, outfile, burn_in_time);
t1 = omp_get_wtime();
std::cout << "Time: " << t1 - t0 << " seconds\n";
}
main
int main(int argc, char **argv)
The main function.
Definition: main.cpp:125
usage
void usage(std::string filename)
A function that displays how to use the program and quits.
Definition: main.cpp:110
montecarlo::phase_transition
void phase_transition(int L, double start_T, double end_T, int points_T, int cycles, std::function< data_t(int, double, int, int)> monte_carlo, std::string outfile, int burn_in_time=BURN_IN_TIME)
Perform the MCMC algorithm using a range of temperatures.
Definition: monte_carlo.cpp:169
montecarlo::mcmc_parallel
data_t mcmc_parallel(int L, double T, int cycles, int burn_in_time=BURN_IN_TIME)
Execute the Metropolis algorithm for a certain amount of Monte Carlo cycles in parallel.
Definition: monte_carlo.cpp:141