This respository serves as a companion to the PHYSOR 2026 paper: "Validation of a Two-Step Neutronics Workflow using Gnat and OpenMC with the ZED-2 Research Reactor" by C. Moore, K. Sawatzky, A. Novak, and K. Atkinson. It contains a series of models of the ZED-2 tank-type reactor at Chalk River Laboratory using OpenMC and Gnat. The OpenMC models are based on the three criticality experiments from the "simplified" ZED-2 benchmark published by J. E. Atfield in 2012. The Gnat model is based on the first criticality experiment.
As discussed in the PHYSOR paper, the workflow contained in this repository is three part:
- Validation of the continuous-energy OpenMC model and generation of multi-group cross sections;
- Verification of the generated multi-group cross sections with multi-group OpenMC;
- Verification and validation of Gnat.
The OpenMC input files are contained in openmc/, and the Gnat input files are contained in gnat/. The mesh of the first experiment can be found
in mesh/ (requires the installation of git lfs). See the instructions below for more information on running individual models
and components of the workflow. Note: it is assumed that a Gnat and OpenMC executable are available on your system path, and you've exported
OPENMC_CROSS_SECTIONS.
The parameterized model for all three experimental configurations can be found at openmc/zed2.py. The script can be executed with the following
command in the /openmc directory:
./zed2.py --case CASEwhere CASE is 1, 2, or 3 (to select a criticality experiment). To generate cross sections for OpenMC and Gnat, add --openmc-mgxs and
--gnat-mgxs to the command line when running. Please note that this is a production model which runs with 100000 particles per batch, 10000
active batches, and 1000 inactive batches by default. You can run with fewer particles, batches, etc. by using the appropriate command line arguments:
--case CASE The case to run. Must be between 1 and 3.
--gnat-mgxs Whether cross sections should be generated for Gnat.
--openmc-mgxs Whether cross sections should be generated for OpenMC multi-group mode.
--entropy Whether source convergence should be assessed with Shannon entropy or not.
-r Whether the script should run OpenMC and post-process cross sections, or dump the model.xml file and exit.
-p PARTICLES Number of particles to run per batch. Defaults to 100000.
--active ACTIVE_BATCHES Number of active batches. Defaults to 10000.
--inactive INACTIVE_BATCHES Number of inactive batches. Defaults to 1000.
The parameterized model for all three criticality experiments using OpenMC running in multi-group mode can be found at openmc/zed2_mg.py.
The script can be executed with the following command in the /openmc directory:
./zed2.py --case CASE --xs-file=PATH_TO_XS_FILEwhere CASE is 1, 2, or 3 (to select a criticality experiment) and PATH_TO_XS_FILE is the path of an OpenMC multi-group cross section library
generated in step 1. Similar to the continuous energy model this is a production model which defaults to 100000 particles per batch, 10000 active
batches, and 1000 inactive batches. You can run with fewer particles, batches, etc. by using the appropriate command line arguments:
--case CASE The case to run. Must be between 1 and 3.
--xs-file XS_FILE The MGXS file to load.
--entropy Whether source convergence should be assessed with Shannon entropy or not.
-r Whether the script should run OpenMC, or dump the model.xml file and exit.
-p PARTICLES Number of particles to run per batch. Defaults to 100000.
--active ACTIVE_BATCHES Number of active batches. Defaults to 10000.
--inactive INACTIVE_BATCHES Number of inactive batches. Defaults to 1000.
The Gnat simulations require substantial high performance computing resources. We recommend a minimum of 2240 cores with 2 GB of RAM per core for the 2/4 group calculations, and 4480 cores with 2 GB of RAM per core for the 8 group calculations.
Due to the large memory requirements of the self-adjoint angular flux method employed by Gnat, the input files for the Gnat simulation utilize a
pre-split distributed mesh. To pre-split the mesh, run the following series of commands in the /mesh directory:
mpiexec -np RANKS gnat-opt -i scale_split_mesh.i --split-mesh SPLITS --split-file zed2_v4.cprwhere RANKS are the number of processes doing the work of splitting the mesh and SPLITS are the number of subdivisions of the mesh. SPLITS
must be equal to the number of MPI processes you want to run the Gnat simulations with. To execute one of the Gnat simulations, run the following
out of the /gnat subdirectory:
mpiexec -np SPLITS gnat-opt -i gnat_casmo_2.i(using gnat_casmo_2.i as an example).