# Ising Model

[Repo](https://github.uio.no/FYS3150-G2-2023/Project-4)

[Documentation](https://pages.github.uio.no/FYS3150-G2-2023/Project-4/)

## Requirements

### Operating systems

- Linux
    - Has been tested on [Fedora 38](https://fedoraproject.org/)
    - Will most likely work on other Linux distributions
- MacOS
    - Might work, but hasn't been tested
- Windows
    - Will most likely not work

### Tools

- Profiling
    - [gprof](https://ftp.gnu.org/old-gnu/Manuals/gprof-2.9.1/html_mono/gprof.html)
    - [scalasca](https://www.scalasca.org/)
    - [score-p](https://www.vi-hps.org/projects/score-p)

### Libraries

- Python
    - [matplotlib](https://matplotlib.org/)
    - [numpy](https://numpy.org/)

- C++
    - [Openmp](https://www.openmp.org/)
    - [OpenMPI](https://www.open-mpi.org/)
    - [Armadillo](https://arma.sourceforge.net/)


## Compiling

Compiling is as easy as running this command while being inside the src directory:

```shell
    make
```

## Running programs

### C++ binaries

To run **main** or **test_suite**, just run this command while being inside src:

```shell
    ./<program-name>
```

### Python scripts

#### Install libraries

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

```shell
    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 src directory like this:

```shell
    python scripts/<script-name>
```

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

```shell
    python3 scripts/<script-name>
```

### Batch system

For the **phase_transition_mpi** program, there are scripts in the **src/jobs**
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. 
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 it by running:

```shell
    make phase_transition_mpi
```

You might have to load the Armadillo library using the **module** system before compiling.

After compiling, you can schedule it by running:

```shell
    sbatch jobs/<script-name>
```

## Performance

This section aims to give an idea to the time it takes for the 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

## Credits

The Doxygen theme used here is 
[doxygen-awesome-css](https://github.com/jothepro/doxygen-awesome-css).
