Skip to content

msleigh/fcimc

Repository files navigation

fcimc

Python and Fortran implementations of Fleck and Cummings's implicit Monte Carlo (IMC) scheme, published in Journal of Computational Physics (JCP) in 1971.

![Build status (`main`)](https://github.com/msleigh/fcimc/actions/workflows/build.yml/badge.svg?branch=main)

For each implementation, the results from the published paper (Fleck and Cummings 1971) are reproduced via a set of predefined runs included in the repository.

Fleck and Cummings (1971) Fortran implementation Python implementation

Dependencies

Python implementation

  • Python 3
  • Numpy

Fortran implementation

  • GFortran

Bundled calculations

  • Matplotlib
  • Jupyter

Documentation

Installation

To create a Conda env with the necessary dependencies:

conda env create -f environment.yml
conda activate fcimc

Usage

Execution

To build and run everything from scratch, run the top-level script:

./runall clobber  # Removes latest graphs
./runall

To see the aggregated output:

jupyter notebook verification.ipynb

To open the documentation:

open docs/html/index.html

Cleaning

To clean up intermediate build files etc.:

./runall clean

and to clean out everything (output files, executables, etc.) for a clean start:

./runall clobber

Fine control

Each part of the project has its own Makefile which can be invoked directly:

./fortran/src/Makefile
./fortran/calcs/Makefile
./python/calcs/Makefile
./docs/Makefile

to either clean up one part, e.g.:

make -C fortran/src clean
make -C docs clobber

or build/execute, e.g.:

make -C python/calcs -j 4 all

Building the documentation is a special case:

make -C docs html

Ford docs

To build the Ford documentation:

ford ford.md

The configuration is in fpm.toml.

Verification

Run the Jupyer notebook to plot the results:

jupyter notebook verification.ipynb

Verification against the original Fleck and Cummings (1971) results (shown on the left) of both a Fortran (middle) and a Python (right) implementation of the IMC scheme described therein.