Python bindings

DuMux Python bindings

Using DuMux from Python

  • Based on just-in-time (JIT) compilation of Python binding code
  • Experimental feature: only a small subset of functionality is available
  • See Python test apps

Configuration

  • Enabled and built by default!

  • dune-common configures a Python virtual environment (dune-common/build-cmake/dune-env)

  • Automatically created and set up when running dunecontrol

  • On Ubuntu systems you need to install python3-venv (e.g. sudo apt install python3-venv) for venv to work properly.

  • To activate:

    source dune-common/build-cmake/dune-env/bin/activate

Configuration

For more control, follow

./dune-common/bin/dunecontrol bexec rm -r CMakeFiles CMakeCache.txt
python3 -m venv venv
source venv/bin/activate
./dune-common/bin/dunecontrol --opts=dumux/cmake.opts configure
./dune-common/bin/dunecontrol --opts=dumux/cmake.opts make -j

which installs Python bindings into the activated virtual environment.

Example Python code

python3 test_1p.py
  • First time takes very long, due to a lot of JIT
  • Second run is much faster

Small exercise

  • Increase the number of grid cells to \(100 \times 100\)
  • Add a constant source term of \(10.0\)
  • Note that you don’t have to recompile
  • Visualization: pip install pyvista and append
import pyvista as pv
mesh = pv.read("test_1p_box_numeric-00000.vtu")
mesh.plot(show_edges=True, full_screen=True)

Further resources