Source code: Mathematical Modeling of Salt Precipitation and Multi-Phase Flow in High Enthalpy Fractured Geothermal Systems
Authors/Creators
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)