PyJutulDarcy
Python wrapper for JutulDarcy.jl, a fully differentiable reservoir simulator written in Julia. Key features:
- Immiscible, black-oil and compositional multiphase flow
- Geothermal simulation and simulation of CO2 sequestration
- Can read standard input files and corner-point grids, or make your own
This package facilitates automatic installation of JutulDarcy from Python, as well as a minimal interface that allows fast simulation of .DATA files in pure Python. For more details about JutulDarcy.jl, please see the Julia Documentation. If you want to run MPI accelerated simulations we recommend working either in Julia or the standalone compiled version.
For wrapper-specific installation, Python/Julia conversions and API reference, see the Python documentation.
The package also provides access to all the functions of the Julia version under jutuldarcy.jl.JutulDarcy, jutuldarcy.jl.GeoEnergyIO and jutuldarcy.jl.Jutul. These functions are directly wrapped using JuliaCall. For more details, see the JuliaCall Documentation on converting of types.
Installation
Requires Python 3.10 or newer.
python -m pip install jutuldarcy
The first import automatically installs Julia and the registered JutulDarcy dependencies. Initial installation and compilation take several minutes and need network access.
Quick start
import jutuldarcy as jd
path = jd.test_file_path("SPE9", "SPE9.DATA")
output = jd.simulate_data_file(path, convert=True)
pressure = output["STATES"][-1]["Pressure"] # NumPy array in Pa
Converted results contain FIELD and WELLS summary dictionaries, a DAYS array
and one reservoir state dictionary per output time in STATES. Omit
convert=True to retain the native Julia result. Cell and well coordinates in
wrapper inputs are one-based; Python/NumPy array indexing is zero-based.
The Python documentation includes executed examples for building a model, running SPE9, plotting and computing gradients. Every documentation build runs these scripts and publishes their output and figures.
For interactive 3D plots, run jd.install_plotting() once (requires OpenGL).
For headless rendering, use jd.install_plotting("CairoMakie"). See the
user guide for results,
execution backends and Julia configuration, and the
Julia manual for model physics
and the complete simulator API.
Paper and citing
The main paper describing JutulDarcy.jl is JutulDarcy.jl - a Fully Differentiable High-Performance Reservoir Simulator Based on Automatic Differentiation, available as open access from Springer:
@article{jutuldarcy,
title={JutulDarcy.jl - a fully differentiable high-performance reservoir simulator based on automatic differentiation},
author={M{\o}yner, Olav},
journal={Computational Geosciences},
volume={29},
number={30},
year={2025},
publisher={Springer}
}
Contributing
Contributions that expose additional functionality is welcome. See the contributor guide for tests and documentation builds.
Releasing to PyPI
The release workflow publishes a wheel and source
distribution when a tag named v<version> is pushed. The tag must exactly match
project.version in pyproject.toml, for example v1.2.2 for version 1.2.2.
Prereleases use the same convention, for example v1.3.0rc1.
To release, update project.version in pyproject.toml, merge the change into
main, then create and push an annotated tag for that commit:
git switch main
git pull --ff-only
git tag -a v1.2.2 -m "Release 1.2.2"
git push origin v1.2.2
Use the version being released in place of 1.2.2. After the workflow builds and
validates the distributions, review the tagged commit and approve the pypi
environment deployment. Publishing uses short-lived OIDC credentials and creates
PyPI attestations; no PyPI API token or GitHub secret is needed. The publishing
job only downloads the artifacts built in the same workflow run and uploads them
to PyPI. Action dependencies are pinned to commit SHAs, and Dependabot proposes
updates monthly.
Each PyPI version can only be published once. If a release fails partway through uploading, inspect the files already on PyPI before retrying; the workflow fails on existing files rather than silently skipping them.
Metadata
Release files for jutuldarcy 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jutuldarcy-1.3.0.tar.gz | 31.0 kB | With provenance | Details for jutuldarcy-1.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jutuldarcy-1.3.0-py3-none-any.whl | Python 3 | none | any | Details for jutuldarcy-1.3.0-py3-none-any.whl |
Total release size: 50.8 kB
Release files / jutuldarcy-1.3.0.tar.gz
| Download URL | jutuldarcy-1.3.0.tar.gz |
|---|---|
| Size | 31.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
acec65b592aa6382abc7936e40d8688d30e517d9ffa41811f77930b083697f01
|
|
BLAKE2b-256 checksum How to use checksums |
fe9400221e93877732bc95f1ba080d1cb29807346f90a88d9b6a967c01071be5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logRelease files / jutuldarcy-1.3.0-py3-none-any.whl
| Download URL | jutuldarcy-1.3.0-py3-none-any.whl |
|---|---|
| Size | 19.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3d16c2e5a2551d00079d0bb604d62b828c84db63d50555a45de673cdb4c39413
|
|
BLAKE2b-256 checksum How to use checksums |
28902a3b78aa27c9ef46075e88060dac152d271a539eab30f73de10df9310505
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logSecurity for jutuldarcy 1.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for jutuldarcy-1.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.