Skip to main content

Python wrapper for BMI libraries

Project description

Python wrapper for BMI models

This is ctypes wrapper for BMI models.

The BMI describes a low level interface for numerical models.


We need a compiled BMI library (dll, so, dylib). There are a couple of common locations where we look for it.:


A convention on linux is to install the library into /opt/modelname/. If you are using one of the models above, the modelname will be 3di, dflowfm, xbeach or swan

In case you have an alternative location, you can set the LD_LIBRARY_PATH, (DYLD_LIBRARY_PATH in OSX, PATH in windows) environment variable, for example for 3Di:

$ export LD_LIBRARY_PATH=/home/user/svn/3di/trunk/subgridf90/src/.libs

(On windows the command is set instead of export).


The virtualenv way (assumes virtualenvwrapper and virtualenv are installed):

mkvirtualenv main
workon main
# get the version from pypi
pip install bmi-python
# or if you want to add your source directory to the path
pip install -e .

Combination Windows and Anaconda:

- Download + Install Anaconda
- Download and install the :faulthandler: package, from
- Download and install the :NetCDF4: package, from
- Open an (Anaconda) Python-terminal (Press :[Ctrl]:+:[Alt]+:A:).
- pip.bat install -e ``<path to your bmi-python GIT working copy>``


There are two ways to use the wrapper. A handy way is as a context manager, so with a with statement:

with BMIWrapper(engine="model", configfile='/full/path/model.ini') as model:
    # model is the actual library.

The second way is by calling start and stop yourself and using the library attribute to access the Fortran library:

wrapper = BMIWrapper(engine="model", configfile='/full/path/model.mdu')

Note: Without the mdu argument, no model is loaded and you’re free to use the library as you want.

Convenience scripts

The python bmi library contains a script that can be used as a command line runner for your model:

bmi-runner <engine> <configfile>


  • Fedor Baart
  • Gena Donchyts
  • Jack Ha
  • Stef Hummel
  • Scott Peckham
  • Reinout van Rees
  • Sander Smits

Changelog of bmi-python


  • allow relative path for config_file
  • fix exception when unicode is used as variable names

0.1 (2014-04-01)

  • Split of code from python-subgrid and openearthtools in general BMI wrapper.

Project details

Download files

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

Files for bmi-python, version 0.3.0
Filename, size File type Python version Upload date Hashes
Filename, size bmi_python-0.3.0-py2.py3-none-any.whl (15.9 kB) File type Wheel Python version 3.6 Upload date Hashes View
Filename, size bmi-python-0.3.0.tar.gz (35.4 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page