Skip to main content

Ensemble based Reservoir Tool (ERT)

Project description

Build Status PyPI - Python Version Code Style Type checking codecov License: GPL v3

ert - Ensemble based Reservoir Tool - is designed for running ensembles of dynamical models such as reservoir models, in order to do sensitivity analysis and data assimilation. ert supports data assimilation using the Ensemble Smoother (ES), Ensemble Smoother with Multiple Data Assimilation (ES-MDA) and Iterative Ensemble Smoother (IES).

Installation

$ pip install ert
$ ert --help

or, for the latest development version (requires Python development headers):

$ pip install git+https://github.com/equinor/ert.git@main
$ ert --help

For examples and help with configuration, see the ert Documentation.

Developing

ert was originally written in C/C++ but most new code is Python.

Developing Python

You might first want to make sure that some system level packages are installed before attempting setup:

- pip
- python include headers
- (python) venv
- (python) setuptools
- (python) wheel

It is left as an exercise to the reader to figure out how to install these on their respective system.

To start developing the Python code, we suggest installing ert in editable mode into a virtual environment to isolate the install (substitute the appropriate way of sourcing venv for your shell):

# Create and enable a virtualenv
python3 -m venv my_virtualenv
source my_virtualenv/bin/activate

# Update build dependencies
pip install --upgrade pip wheel setuptools

# Download and install ert
git clone https://github.com/equinor/ert
cd ert
pip install --editable .

Test setup

Additional development packages must be installed to run the test suite:

pip install ".[dev]"
pytest tests/

Git LFS must be installed to get all the files. This is packaged as git-lfs on Ubuntu, Fedora or macOS Homebrew. For Equinor RGS node users, it is possible to use git from Red Hat Software Collections:

source /opt/rh/rh-git227/enable

test-data/block_storage is a submodule and must be checked out.

git submodule update --init --recursive

If you checked out submodules without having git lfs installed, you can force git lfs to run in all submodules with:

git submodule foreach "git lfs pull"

Style requirements

There are a set of style requirements, which are gathered in the pre-commit configuration, to have it automatically run on each commit do:

$ pip install pre-commit
$ pre-commit install

Trouble with setup

If you encounter problems during install, try deleting the _skbuild folder before reinstalling.

As a simple test of your ert installation, you may try to run one of the examples, for instance:

cd test-data/poly_example
# for non-gui trial run
ert test_run poly.ert
# for gui trial run
ert gui poly.ert

Note that in order to parse floating point numbers from text files correctly, your locale must be set such that . is the decimal separator, e.g. by setting

# export LC_NUMERIC=en_US.UTF-8

in bash (or an equivalent way of setting that environment variable for your shell).

Developing C++

C++ is the backbone of ert as in used extensively in important parts of ert. There's a combination of legacy code and newer refactored code. The end goal is likely that some core performance-critical functionality will be implemented in C++ and the rest of the business logic will be implemented in Python.

While running --editable will create the necessary Python extension module (src/ert/_clib.cpython-*.so), changing C++ code will not take effect even when reloading ert. This requires recompilation, which means reinstalling ert from scratch.

To avoid recompiling already-compiled source files, we provide the script/build script. From a fresh virtualenv:

git clone https://github.com/equinor/ert
cd ert
script/build

This command will update pip if necessary, install the build dependencies, compile ert and install in editable mode, and finally install the runtime requirements. Further invocations will only build the necessary source files. To do a full rebuild, delete the _skbuild directory.

Note: This will create a debug build, which is faster to compile and comes with debugging functionality enabled. The downside is that this makes the code unoptimised and slow. Debugging flags are therefore not present in builds of ert that we release on Komodo or PyPI. To build a release build for development, use script/build --release.

Notes

  1. If pip reinstallation fails during the compilation step, try removing the _skbuild directory.

  2. The default maximum number of open files is normally relatively low on MacOS and some Linux distributions. This is likely to make tests crash with mysterious error-messages. You can inspect the current limits in your shell by issuing the command ulimit -a. In order to increase maximum number of open files, run ulimit -n 16384 (or some other large number) and put the command in your .profile to make it persist.

Running C++ tests

The C++ code and tests require resdata. As long as you have pip install resdata'd into your Python virtualenv all should work.

# Create and enable a virtualenv
python3 -m venv my_virtualenv
source my_virtualenv/bin/activate

# Install build dependencies
pip install pybind11 conan cmake resdata

# Build ert and tests
mkdir build && cd build
cmake ../src/clib -DCMAKE_BUILD_TYPE=Debug
make -j$(nproc)

# Run tests
ctest --output-on-failure

Example usage

Basic ert test

To test if ert itself is working, go to test-data/poly_example and start ert by running poly.ert with ert gui

cd test-data/poly_example
ert gui poly.ert

This opens up the ert graphical user interface. Finally, test ert by starting and successfully running the experiment.

ert with a reservoir simulator

To actually get ert to work at your site you need to configure details about your system; at the very least this means you must configure where your reservoir simulator is installed. In addition you might want to configure e.g. queue system in the site-config file, but that is not strictly necessary for a basic test.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

ert-10.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (922.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

ert-10.2.1-cp312-cp312-macosx_11_0_arm64.whl (725.1 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

ert-10.2.1-cp312-cp312-macosx_10_15_x86_64.whl (743.1 kB view details)

Uploaded CPython 3.12 macOS 10.15+ x86-64

ert-10.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (910.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ert-10.2.1-cp311-cp311-macosx_11_0_arm64.whl (713.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ert-10.2.1-cp311-cp311-macosx_10_15_x86_64.whl (731.3 kB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

ert-10.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ert-10.2.1-cp310-cp310-macosx_10_15_x86_64.whl (726.3 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

ert-10.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (909.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ert-10.2.1-cp39-cp39-macosx_10_15_x86_64.whl (726.4 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

ert-10.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

ert-10.2.1-cp38-cp38-macosx_10_15_x86_64.whl (726.2 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

File details

Details for the file ert-10.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55938c377bf36aa8d3b1d4cbcfe9315526bf5f1aadc6f342199e82dc0156878b
MD5 84c0b930b54c3855a7050f59a93bd8bb
BLAKE2b-256 50b6b521e82d18eba01d23d9653c94d1271140a034b5ed2e28ef579e30a953c7

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 30a84dc2097bd4d3c6d749ef60c3e849f6f9331b34d55203fba8917cba72a951
MD5 b9fb289c69f9a9f2c3a9016d78e5241f
BLAKE2b-256 4b72dbe4ee26e80f640d32d8d0ad9f730241fdfc7d1e7d8345e179a585a77d8a

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 fd8fef3a71f417128b360985894711fea887bf18a663e7546307ab1f2e07eac9
MD5 ce900f6fde5d6699bb57b044ee60ee5e
BLAKE2b-256 ba2b9b1c5039cfe4dcb2e082c57edbec3e5d0a1b0acbe58e345f5b75781f9473

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11375a0644f9bf1b63b7fdc64c6c558015a865c90eb306bf3ec9cf830f0f9c61
MD5 ea255b3beea283200a53f9298ba6d7e7
BLAKE2b-256 0998a9317a7c107452a0fe77d13cf269883c95c95b5590f6a37e0ecb70357f4f

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a28cdd106922e1f246c0b7754fcb3bf48752dd263d8357db086d9b5ee6ac8f6
MD5 89ddeabaed34b990f5a92494d950aed1
BLAKE2b-256 ea636ed40c01ae4fbf971c7cfa46fc3d3653965c78cec1fbd136bae9c65d6ced

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 e5f41ada7beaeedc58ab73e50a2b3882f69fcd9237bc18d205f0669a4b850542
MD5 8ef6bcf4769a3c48d2dcf127c8fffc17
BLAKE2b-256 0a0ada3525856307b77242555fa2b48fbb1b5f276c9d50cad1cb41c67db2d791

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d365e0bdbac86ae22e200304f8e9079b377a7eb609c0cf5b3a740a11d30c5d10
MD5 75cd3789b3d79c0dc67017b85ad302bf
BLAKE2b-256 e357f8f9368bd20f87cb824ee763bef5833384d149a4b182caad8e7caa41bcfd

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 23505d8789bfeced0c925df92c23141b5a6838f38260b8dbd952102a60440ffc
MD5 c43c2a082c63d691b0676031720b82af
BLAKE2b-256 971cf56e6081c8e2a69763b39059fe02bf942913d9c316ec1f08a3718cb3c266

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 876637787a4512ad7edca95b2e7d0ebf64fa60190dafe083a1b48330f4d4170d
MD5 bef0e5ced4028c59707b43da3d925c47
BLAKE2b-256 b5fa0f460fa4a9cc6331f331ba5ab99e9d3b610f91af4e8b33da7dbd6f51e7d3

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 df3d114ef465dd098885ef9964a6bdc2d88d4cad431e56c3f16725119cec148c
MD5 f8a002b7bec48e3a8ff1e47c87f52984
BLAKE2b-256 05d544578d6edfb51eadfe7d26921140cfccd740735577b2f51494069ef1946e

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5340e8759715a1e960a6fcb36e2f471464597f7c94f8823ea050e8cc452168bb
MD5 52917d0102f037541dd9cf8674af3bb8
BLAKE2b-256 c5ce649162ce7ac795fb3bcbf33dbf8c5cf14c76346e86550df85e046386ce69

See more details on using hashes here.

File details

Details for the file ert-10.2.1-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ert-10.2.1-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 deed10df52fe074e878c9a63dcfef45e5390b6c0e0f1604da14a4aca0942465a
MD5 8826c7752e0aec65ff8ffc447c4f74cb
BLAKE2b-256 f107d66f517367c0a885a6e6da6d91a8933f5f8a7de4825f1f4b09851cd8b686

See more details on using hashes here.

Supported by

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