# 2 Dimensional Ising Model: Ising Model

Loading...
Searching...
No Matches
Ising Model

Repo

Documentation

# Requirements

## Operating systems

- Linux
  - Has been tested on Fedora 38
  - Will most likely work on other Linux distributions
- MacOS
  - Might work, but hasn't been tested
- Windows
  - Will most likely not work

## Tools

- Profiling
  - score-p

## Libraries

- Python
  - matplotlib
  - numpy
- C++
  - Openmp
  - OpenMPI
  - Armadillo

# Compiling

The commands shown here should be run from the root of this project.

## Normal binaries

Compiling regular binaries is as easy as running this command:

make

The binaries will then be inside the **./bin** directory.

## Profiling binaries

If you want to profile the programs (specifically the MPI program), then run this command

make profile

The binaries will then be inside the **./prof** directory.

## Debugging binaries

If you want to debug the code, then use this command:

make debug

The binaries will then be inside the **./debug** directory.

# Running programs

## C++ binaries

To run any of the programs, just use the following command:

./<bin|prof|debug>/<program-name> <args>

If you need help with any of the programs, you can use the -h or –help flag to show you how to use the programs. Here is an example:

./bin/main --help

## Python scripts

### Install libraries

Before running the scripts, make sure that all libraries are installed. Using pip, you can install all requirements like this:

pip install -r requirements.txt

This recursively install all the packages that are listed in requirements.txt.

### Running scripts

For the Python scripts, run them from the root of the project:

python python_scripts/<script-name>

If you have any problems running the scripts, you might have to run this instead:

python3 python_scripts/<script-name>

## Batch system

For the phase_transition_mpi program, there are scripts in the **./slurm_scripts** directory that come along with it. This is to be able to run it on a batch system using Slurm if you have access to one. The only program that should be executed by the user is the **./slurm_scripts/execute.script** script. You can see how to use this script by doing:

./slurm_scripts/execute.script --help

This is the recommended way to use this program as it takes approximately 90 minutes to complete when using 8 processes where each process has 10 threads.

If you happen to have such a system available to you, then you should clone this repo on that system, then compile the MPI program like this:

make bin/phase_transition_mpi

After compiling, you can schedule it by using the **./slurm_scripts/execute.script**:

./slurm_scripts/execute.script <parameters>

# Performance

This section aims to give an idea to the time it takes for the phase transition program to run so that you know a bit what to expect if you decide to run it for yourself.

## CPU

The times mentioned here are times achieved on a computer with these specifications:

- CPU model
  - Intel i7-9850H
- Threads
  - 12
- Clock speed
  - 4.6GHz

## Times

Note that all times here are recorded using the OpenMP implementation of the MCMC algorithm.

lattice size | points | samples | burn-in time | time (seconds)
--- | --- | --- | --- | ---
20 | 20 | 100000 | 0 | 3.20
20 | 40 | 100000 | 0 | 6.17
20 | 80 | 100000 | 0 | 12.11

lattice size | points | samples | burn-in time | time (seconds)
--- | --- | --- | --- | ---
20 | 20 | 100000 | 0 | 3.20
40 | 20 | 100000 | 0 | 11.91
80 | 20 | 100000 | 0 | 47.88

lattice size | points | samples | burn-in time | time (seconds)
--- | --- | --- | --- | ---
20 | 20 | 100000 | 0 | 3.20
20 | 20 | 1000000 | 0 | 29.95
20 | 20 | 10000000 | 0 | 305.849

lattice size | points | samples | burn-in time | time (seconds)
--- | --- | --- | --- | ---
20 | 20 | 100000 | 0 | 3.20
20 | 20 | 100000 | 5000 | 4.93
20 | 20 | 100000 | 10000 | 6.58

We can see that changing the number of points, samples and burn-in time changes the time in a linear fashion, while changing the size of the lattice changes the time in a square fashion.

# Credits

The Doxygen theme used here is doxygen-awesome-css.