Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
FABM comes with a "pyfabm" package for the Python programming language. This package enables you to access FABM's biogeochemical models directly from Python. For instance, you can enumerate a model's parameters and variables, or obtain temporal derivatives and diagnostics for any given environment and model state. In combination with a Python-based time integration scheme (e.g., scipy.integrate.odeint), this also allows you to perform model simulations.
Building the Python driver
First, obtain the FABM code from GitHub. You can either download the latest official release of the source code as a zip or tar.gz file, or check out the current developer's version of the code from its git repository (recommended!)
You will need:
- CMake, version 2.8.11 or later
- Python 2.7 or Python 3.4 or later
- pip (installed by default with Python 2 >= 2.7.9 or Python 3 >= 3.4)
wheel (install with
python -m pip install --user wheel)
On Linux-like systems, pyfabm is built and installed by creating a new directory for building the code, executing cmake with the path to the FABM-Python source code, and then running "make install". For instance:
mkdir -p ~/build/python-fabm cd ~/build/python-fabm cmake <FABMDIR>/src/drivers/python make install
make install creates the pyfabm package within the build directory, packs it in wheel format, and then calls pip to install it (default install location: the per user site-packages directory). To skip the installation step, use
make all instead of
make install. You can then still import pyfabm if you first add the build directory to your Python path (
CMake will try to locate your default Python interpreter to create the pyfabm wheel and call pip. If CMake does not select the correct Python interpreter, you will need to set the
PYTHON_EXECUTABLE variable to the full path of your Python interpreter. To do so when using cmake on the command line, add
-DPYTHON_EXECUTABLE=<PYTHONPATH>; when using cmake-gui or ccmake, edit this variable in the user interface, then configure and generate.
After the pyfabm package has been built and installed, you can access it from python by typing
import pyfabm. Please try this before continuing.
FABM comes with a number of example Python scripts that shows how to access FABM. These are located at
<FABMDIR>/testcases/python. Each of these scripts can be run on the command line with
-h as argument; this will list information about the script and its command line arguments.
import pyfabm model = pyfabm.Model('fabm.yaml') for variable in model.state_variables: print ' %s = %s (%s)' % (variable.name, variable.long_name, variable.units)
Run a simulation
import numpy import scipy.integrate import pyfabm # Create model (loads fabm.yaml) model = pyfabm.Model() # Configure the environment # Note: the set of environmental dependencies depends on the loaded biogeochemical model. model.findDependency('surface_downwelling_photosynthetic_radiative_flux').value = 50. model.findDependency('downwelling_photosynthetic_radiative_flux').value = 25. # Verify the model is ready to be used assert model.checkReady(), 'One or more model dependencies have not been fulfilled.' # Time derivative def dy(y, t0): model.state[:] = y return model.getRates() # Time-integrate over 200 days (note: FABM's internal time unit is seconds!) t = numpy.linspace(0, 200., 100) y = scipy.integrate.odeint(dy, model.state, t*86400) # Plot results import pylab pylab.plot(t, y) pylab.legend([variable.path for variable in model.state_variables]) pylab.show()