mirror of
https://github.com/OPM/opm-simulators.git
synced 2026-10-26 07:30:08 -05:00
When no --python-versions is specified at runtime, auto-detect which Python versions are actually installed in the container instead of defaulting to all versions from python_versions.json. This resolves the issue where: 1. Building with --python-versions=3.12 installs only Python 3.12 2. Running without --python-versions would try to test all versions from JSON 3. Tests would fail for non-installed versions (3.8, 3.9, 3.10, 3.11, 3.13) Now the runtime logic: 1. Uses `pyenv versions --bare` to detect installed versions 2. Maps full versions (3.12.9) to short versions (3.12) 3. Uses detected versions as default for testing 4. Falls back to JSON versions if detection fails Example behavior: - Build: --python-versions=3.12 (installs only 3.12.9) - Runtime: auto-detects 3.12, tests only that version - Explicit: --python-versions=3.11,3.12 still works as before
Python bindings for the OPM-common module of the Open Porous Media project.
To compile with python support:
- Add the cmake flags
-DOPM_ENABLE_PYTHON=ONand-DOPM_INSTALL_PYTHON=ON - Optionally add prefix
-DCMAKE_INSTALL_PREFIX=/opt/opmto install outside the standard distro directories - Optionally specify python binary
-DPython3_EXECUTABLE=/home/user/miniconda3/envs/rkt/bin/python3if you don't want to use the system python, e.g. use a python frompyenvor from acondaenvironment
Sample compilation on linux:
#! /bin/bash
flags="-DPython3_EXECUTABLE=/home/hakon/miniconda3/envs/rkt/bin/python3 -DOPM_ENABLE_PYTHON=ON -DOPM_INSTALL_PYTHON=ON -DCMAKE_INSTALL_PREFIX=/opt/opm"
for repo in opm-common opm-grid opm-models opm-simulators
do
cd "$repo"
mkdir -p build
cd build
cmake $flags ..
make -j8
sudo make install
cd ..
cd ..
done
Then you should be able to use the module from a Python script. If you installed in
a non-standard directory by specifying -DCMAKE_INSTALL_PREFIX you may need to set the
PYTHONPATH environment variable before running your Python script, for example:
$ PYTHONPATH=/opt/opm/lib/python3.11/site-packages python3 spe1case1.py
and spe1case1.py could be:
import os
from opm.simulators import BlackOilSimulator
from opm.io.parser import Parser
from opm.io.ecl_state import EclipseState
from opm.io.schedule import Schedule
from opm.io.summary import SummaryConfig
os.chdir("SPE1CASE1")
deck = Parser().parse('SPE1CASE1.DATA')
state = EclipseState(deck)
schedule = Schedule( deck, state )
summary_config = SummaryConfig(deck, state, schedule)
sim = BlackOilSimulator(deck, state, schedule, summary_config)
sim.step_init()
sim.step()
poro = sim.get_porosity()
poro = poro *.95
sim.set_porosity(poro)
sim.step()
sim.step_cleanup()