OpenFOAM-8 solvers for the Molten Salt Fast Reactor with an additional layer of hastelloy to mimic the outer reflector region.
OpenFOAM v8 (CFD Direct version)
To install the solver, navigate to msfr-multiregion-dev/OpenFOAM-nrg/src and run ./Allwmake (OpenFOAM environment must be active).
Run msfrSimpleStructureFoam from your $HOME folder. If you encounter the error 'cannot find file "......./src/system/controlDict', the installation was successful.
- The mesh included in the test case is the 2D-EVOL geometry (defined in blockMeshDict).
- We don't simulate the fertile blanket or the inner neutron absorber.
- We simulate the primary fluid loop and the reflector layer outside.
Note: This solver is not a chtMultiRegionSolver (this is something we plan to do). Fluid and solid are treated as two materials at the same phase separated by an interface. A brief description of the solver can be found in the attached paper (Section 3).
Navigate to msfr-multiregion-dev/OpenFOAM-nrg/tutorials. There are two types of solvers:
SIMPLE- steady state solverPIMPLE- transient solver
In both cases, run the ./Allrun script in the OF case folder. To clean the case, run ./Allclean.
You may need to give yourself permission to run: chmod 777 Allrun ; chmod 777 Allclean.
blockMesh- build the 2D meshtopoSet- create the pump regionsetFields- set the nuclear parameters as internalFields (see 0 folder)decomposePar- perform the case decomposition to run in parallelrenumberMesh- renumber the mesh cells to optimize the parallel runmsfrSimpleStructureFoam- run the solverreconstructPar- reconstruct the case
Note: The final time step in controlDict has been set to 5 (SIMPLE) and 1 (PIMPLE) just to check everything works.
All nuclear parameters are treated as fields initialized using setFields (see 0 folder after running ./Allrun). dynamiccode allows setting semiImplicitSources for pump (momentum) and heat exchanger (heat transfer).
- In the
constantfolder, thefvOptionsfile allows setting momentum and heat sources at every time-step during runtime. Here infvOptions, you can set the pump velocity and the heat transfer coefficient at the HX. constant/nuclearProperties- determine the number of delayed neutrons and decay heat precursors, the energy groups, the properties for the Doppler effect for transport.
The postProcessing folder gives you averaged quantities in time:
- Pump: mass flow rate at the outlet of the pump and pump average velocity
- Core: core average power
- HX: power at the HX
- Reactor parameters: k_effective, reactivity and Q
In the System folder:
- Specify the core nominal power in
controlDict - Specify the values of the nuclear parameters in
setFieldsDictin both fluid and structure topoSetcreates the pump region
Different probes are stored in postProcessing (after solver run). For the PIMPLE case, you set up the transient you want to simulate in fvOptions. Currently, we can simulate:
- ULOHS (unprotected loss of heat sink) by setting, for example, an exponential decay in time (x is the time variable)
- OVERSPEED of the pump, by setting, for example, an exponential increase in the velocity of the pump
- ULOFF (unprotected loss of flow), by setting, for example, an exponential decrease in the velocity of the pump
In the msfr-multiregion-dev folders, you can find some Jupyter notebooks (*.ipynb) which we use to visualize the data. You can open them using Jupyter notebook (in Ubuntu: pip install jupyterlab ; pip install notebook).
msfr_transients.ipynb- visualize the transients you are going to impose on the transient caseRoutinesForPostProcess/plot_postProcess_*.ipynb- plot the residuals (you can modify this to plot also the rest of the contents ofpostProcessing)
In the RoutinesForParametricSolution folder, you can find some Python routines to run the cases in a parametric way.
The Singular Value Decomposition is used to store the results (only some variables) in a compressed way to save storage space.
The run.py script includes the RITUAL for the Polimi Cluster, contact stefano.riva@polimi.it for more information.
The original version of the solver was developed within the SAMOFAR and SAMOSAFER H2020 European Projects (https://samofar.eu and https://samosafer.eu/):
@article{CERVI2019209,
title = {Development of an SP3 neutron transport solver for the analysis of the Molten Salt Fast Reactor},
journal = {Nuclear Engineering and Design},
volume = {346},
pages = {209-219},
year = {2019},
issn = {0029-5493},
doi = {https://doi.org/10.1016/j.nucengdes.2019.03.001},
url = {https://www.sciencedirect.com/science/article/pii/S0029549319300354},
author = {E. Cervi and S. Lorenzi and A. Cammi and L. Luzzi},
}The credits for the inclusion of the external Hastelloy reflector layer are:
@article{doi:10.1080/00295639.2025.2531477,
author = {Riva,Stefano and Deanesi,Sophie and Introini,Carolina and Lorenzi,Stefano and Cammi,Antonio},
title = {Real-Time State Estimation of Neutron Flux in Molten Salt Fast Reactors from Out-Core Sparse Measurements},
journal = {Nuclear Science and Engineering},
year = {2025},
doi = {10.1080/00295639.2025.2531477},
}If you use the present solve, please cite the above reference and the following: