Skip to main content

Unified interface for running reservoir simulators

Project description

runsim

Note: This package is under active development. APIs and CLI interfaces may change.

Unified runner for reservoir simulators, data assimilation, and optimization on macOS.

Structure

runsim/
├── runsim.sh                 # Unified CLI entry point
├── pyproject.toml            # Python package config (uv + hatchling)
├── runsim/                   # Python package (flat layout)
│   ├── __init__.py
│   ├── base.py               #   Abstract Simulator class
│   ├── opm.py                #   OPM Flow wrapper
│   └── dumux.py              #   DuMux wrapper (stub)
├── simulators/
│   ├── common.sh             # Shared helpers + path resolution
│   ├── setup_env.sh          # Create venv, install packages, Docker setup
│   ├── opm/                  # OPM Flow simulator
│   │   ├── README.md
│   │   ├── install.sh        #   Build from source (macOS)
│   │   ├── install-docker.sh #   Install via Docker
│   │   ├── run.sh            #   Run bundled test suite (native)
│   │   ├── run-docker.sh     #   Run bundled test suite (Docker)
│   │   └── Dockerfile
│   ├── pet/                  # Python Ensemble Toolbox
│   │   ├── README.md
│   │   ├── install.sh        #   Download repos + pip install
│   │   └── run.sh            #   Run PET examples (DA/optimization)
│   ├── jutuldarcy/           # JutulDarcy simulator
│   │   ├── README.md
│   │   ├── install.sh        #   Install Python/Julia mode
│   │   └── run.sh            #   Run simulations
│   └── dumux/                # DuMux simulator
│       ├── README.md
│       ├── install.sh        #   Build from source (macOS)
│       ├── run.sh            #   Run simulations
│       └── Dockerfile
└── .venv/                    # Python virtual environment (auto-created)

Quick Start

# 1. Set up environment (venv + packages + OPM Docker)
./runsim.sh setup

# 2. List available PET examples
./runsim.sh pet --list

# 3. Run an example
./runsim.sh pet Quadratic           # Analytic (no Docker needed)
./runsim.sh pet 3dBox/tiny          # OPM Flow (~2 min)

CLI

./runsim.sh <command> [args...]

Commands:
  flow [flow-args...]           Run native OPM Flow (passthrough to binary)
  flow-docker [flow-args...]    Run OPM Flow via Docker (passthrough)
  jutuldarcy [args...]          Run JutulDarcy simulation
  dumux [args...]               Run DuMux simulation
  dumux-docker [args...]        Run DuMux via Docker
  pet [options] <example>       Run PET example (data assimilation / optimization)
  setup                         Bootstrap environment (venv, PET, Docker)
  help                          Show help

Running Simulators

# OPM Flow (native) -- passthrough to flow binary
./runsim.sh flow --version
./runsim.sh flow --output-dir=./out SPE1CASE1.DATA

# OPM Flow (Docker)
./runsim.sh flow-docker --version
./runsim.sh flow-docker --output-dir=./out SPE1CASE1.DATA

# JutulDarcy
./runsim.sh jutuldarcy --test
./runsim.sh jutuldarcy /path/to/DECK.DATA

# DuMux
./runsim.sh dumux /path/to/executable

Running PET Examples

./runsim.sh pet --list                                # List available examples
./runsim.sh pet LinearModel                           # Analytic DA
./runsim.sh pet 3dBox/tiny                            # 10x10x2 grid (~2 min)
./runsim.sh pet --simulator flow 3dBox/tiny           # Native OPM Flow (default)
./runsim.sh pet --simulator flow-docker 3dBox/tiny    # Docker
./runsim.sh pet 3SpotRobust --variant bhp             # Specific variant
./runsim.sh pet --clean 3dBox/tiny                    # Clean outputs then run

Bundled Test Suites

Per-simulator test suites are available via direct script access:

./simulators/opm/run.sh                               # Native OPM, all cases
./simulators/opm/run-docker.sh                         # Docker, all cases
./simulators/jutuldarcy/run.sh --test                  # JutulDarcy SPE1

Simulators

OPM Flow (Docker) -- Recommended for quick start

Runs via Docker on any platform. Simplest setup.

./simulators/opm/install-docker.sh          # Pull image + create flow wrapper
./simulators/opm/install-docker.sh --test   # + run SPE1 validation

Apple Silicon note: The Docker image is linux/amd64 and runs under Rosetta/QEMU emulation.

OPM Flow (Native macOS)

Full ARM-native performance. Builds Dune 2.10 + OPM from source.

./simulators/opm/install.sh              # Full build (~30-60 min, skips if installed)
./simulators/opm/install.sh --deps-only  # Homebrew + Dune only
./simulators/opm/install.sh --test       # Build + SPE1 test
./simulators/opm/install.sh --rebuild    # Force full rebuild

Requires: Xcode CLI tools, Homebrew, cmake, boost, suite-sparse, cjson, fmt.

JutulDarcy

Differentiable reservoir simulator (Julia). Two modes available:

./simulators/jutuldarcy/install.sh              # Python mode (pip install jutuldarcy)
./simulators/jutuldarcy/install.sh --julia      # Julia mode (JutulDarcy.jl + juliacall)
./simulators/jutuldarcy/install.sh --both       # Both modes
./simulators/jutuldarcy/install.sh --test       # Install + verify

DuMux

DUNE-based porous media simulator. Builds from source.

./simulators/dumux/install.sh              # Full build (shares Dune with OPM if available)
./simulators/dumux/install.sh --deps-only  # Homebrew + Dune only
./simulators/dumux/install.sh --rebuild    # Force full rebuild

PET (Python Ensemble Toolbox)

Download PET repositories and install Python packages:

./simulators/pet/install.sh            # Download repos + pip install PET/SimulatorWrap
./simulators/pet/install.sh --status   # Show which repos/packages are present

Verifying Installations

./runsim.sh flow --version             # e.g. "flow 2026.04-pre"
./runsim.sh flow-docker --version      # e.g. "flow 2025.10"

# JutulDarcy (Python mode)
.venv/bin/python -c "import jutuldarcy; print(jutuldarcy.__version__)"

# runsim Python package
.venv/bin/python -c "from runsim import OPMFlow; print(OPMFlow().version())"

Python Package

The runsim package provides a programmatic interface to simulators:

from runsim import OPMFlow

sim = OPMFlow()                         # auto-detect native binary
sim = OPMFlow(mode="docker")            # use Docker wrapper

# Check availability
print(sim.version())                    # "flow 2026.04-pre"
print(sim.is_available())               # True

# Run a simulation
result = sim.run("SPE1CASE1.DATA", output_dir="./output")
print(result.returncode)                # 0 on success

PET Examples

EXAMPLE                TYPE   SIMULATOR  NOTES
───────                ────   ─────────  ─────
LinearModel            DA     none
3dBox/tiny             DA     flow       needs data generation
3dBox/small            DA     flow       needs data generation
3dBox/medium           DA     flow       needs data generation
3dBox/large            DA     flow       needs data generation
3dBox/flowrock         DA     flow       needs data generation
Spe11b                 DA     flow       needs data generation
3Spot                  Opt    flow
3SpotRobust            Opt    flow       variants: bhp, rate
3SpotEcalc             Opt    flow
5SpotInverted          Opt    flow
5SpotLineSearch        Opt    flow
Rosenbrock             Opt    none
Quadratic              Opt    none

Type: DA = Data Assimilation (ES-MDA), Opt = Optimization

Dependencies

  • Python 3.11+
  • uv (recommended) or pip
  • Docker Desktop (for OPM Flow Docker mode)
  • PET -- data assimilation framework
  • SimulatorWrap -- simulator wrappers
  • OPM Flow -- reservoir simulator
  • JutulDarcy.jl -- differentiable simulator (optional)
  • DuMux -- porous media simulator (optional)

Parent Repository Layout

project/
├── runsim/                   # This project
├── pet-repos/
│   ├── PET-main/             # Python Ensemble Toolbox source
│   ├── SimulatorWrap-main/   # Simulator wrapper source
│   └── Examples-main/        # PET example cases
├── opm-repos/
│   └── opm-data-master/      # Standard OPM test data (SPE1-9, Norne)
├── opm-build/                # Native OPM build artifacts (if built)
└── dumux-build/              # Native DuMux build artifacts (if built)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

runsim-0.1.0.tar.gz (42.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runsim-0.1.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file runsim-0.1.0.tar.gz.

File metadata

  • Download URL: runsim-0.1.0.tar.gz
  • Upload date:
  • Size: 42.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for runsim-0.1.0.tar.gz
Algorithm Hash digest
SHA256 225957c04f844b5f6df0b0d2cae7a1632921863b64db4d9f15539ef75bd9490b
MD5 bba81df4e70c4e421f527e93954ca970
BLAKE2b-256 ee80e2e26b6ac9e87a2dd2e378d2cebf90ab3e45cb45ca697ff6acf11de8f26e

See more details on using hashes here.

File details

Details for the file runsim-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: runsim-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for runsim-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5a6455a214b27a623c74e2fc5e3fd0277a06a659a5f809f719aa822e83fffcdd
MD5 bf45af663fb3d07c6878adac5ad88304
BLAKE2b-256 2a15c2aafefd9683de5b89509527edc2bd7757a25b9bcb196abc3843899ec410

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page