Published May 29, 2026 | Version v1.0.0
Software Open

Source code: Mathematical Modeling of Salt Precipitation and Multi-Phase Flow in High Enthalpy Fractured Geothermal Systems

  • 1. ROR icon University of Bergen
  • 2. Stanford University

Description

This Docker image enables full reproduction of the simulations and figures presented in the manuscript:

Oguntola, M. B., Duran, O., Keilegavlen, E., Berre, I. (2026). Mathematical Modeling of Salt Precipitation and Multi-Phase Flow in High Enthalpy Fractured Geothermal Systems.

The image bundles the PorePy branch (cf-dfm-salt-precipitation), ParaView 6.1.0, Python plotting dependencies, LaTeX support for Matplotlib text rendering, and the H2O–NaCl thermodynamic lookup tables required by the simulations. No additional installation is required on the host beyond Docker.

==================================================
1. Load the image
==================================================

docker load -i h2o_nacl_geothermal_simulator_v1.0.0.tar.gz

==================================================
2. Start the container
==================================================

mkdir -p work
docker run -dit \
  --name geothermal-run \
  -v "$PWD/work:/workdir/data" \
  h2o-nacl-geothermal-simulator:v1.0.0
docker exec -it geothermal-run /bin/bash

The container runs in detached mode. If your terminal session is interrupted, the simulations continue running, and you can re-attach at any time with:

docker exec -it geothermal-run /bin/bash

After attaching to the container, the command prompt should change to something similar to:

root@f07f81fb5ea6:~/porepy/src/porepy/examples#

==================================================
3. Run the simulations
==================================================

The four simulation cases are independent and can be run in any order. Several configurations are computationally intensive — runtimes vary from minutes (benchmark and Example 2) to several hours (Example 1 and 3) depending on hardware.

Section 4 — 1D benchmark (verification against CSMP++):

python -m geothermal_flow.simulation_driver \
  --config geothermal_flow/configs/benchmark.yaml

Section 5.1 — Example 1:

python -m geothermal_flow.simulation_driver \
  --config geothermal_flow/configs/example1.yaml

Section 5.2 — Example 2:

python -m geothermal_flow.simulation_driver \
  --config geothermal_flow/configs/example2.yaml

Section 5.3 — Example 3:

python -m geothermal_flow.simulation_driver \
  --config geothermal_flow/configs/example3.yaml

Note: Figures 14 and 15 compare Examples 1 and 2 and require both simulations to complete before they can be generated.

==================================================
4. Generate figures
==================================================

Once the relevant simulations have completed, generate all figures with:

python -m geothermal_flow.make_figures \
  --config geothermal_flow/configs/figures.yaml

Selected figures can be generated with:

python -m geothermal_flow.make_figures \
  --config geothermal_flow/configs/figures.yaml \
  --figures figure8 figure10

Final figures are written to work/figures/ on the host machine.

==================================================
5. Clean up
==================================================

When finished, stop and remove the container:

docker stop geothermal-run
docker rm geothermal-run

Simulation outputs in work/ remain on the host after the container is removed.

==================================================
Notes on hardware
==================================================

The image is built for linux/amd64. On Apple Silicon Macs (M1/M2/M3/M4), Docker runs the image under emulation. This is functional but may be slower than running on native linux/amd64 hardware.

==================================================
Related deposits
==================================================

The H2O–NaCl thermodynamic lookup tables used during the original Docker build are separately archived at: https://doi.org/10.5281/zenodo.20394023

Full instructions, troubleshooting, and figure-to-simulation dependency details are available in the README of the GitHub repository: https://github.com/mikeljordan/cf-brine-simulation

==================================================
Acknowledgement
==================================================

This result is part of a project that has received funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 101002507).

Files

Files (4.7 GB)

Name Size Download all
md5:585d485a105aac2947339e70d9f5a42b
4.7 GB Download

Additional details

Related works

References
Dataset: 10.5281/zenodo.20394023 (DOI)

Funding

European Commission
MaPSI - Mathematical and Numerical Modelling of Process-Structure Interaction in Fractured Geothermal Systems 101002507