BMI

From CSDMS
Basic Model Interface (BMI)
Bmi-logo-below-lowercase.png

Version 2.0

Automobiles benefit from a standard interface. Regardless of whether you drive a pickup truck or an electric two-seater, you use an ignition, an accelerator, and steering wheel. Imagine having to spend weeks of study to switch from one type of automobile to another, or from one brand to another. At CSDMS, we believe that numerical models, and the sub-components that make up these models, should offer a similar kind of standardization. To this end, we have developed the Basic Model Interface (BMI): a set of standard query and control functions that, when added to a model code, make that model both easier to learn and easier to couple with other software.

BMI is an element of the CSDMS Workbench, an integrated system of software tools, technologies, and standards for building and coupling models.

Links

  • The latest BMI documentation. Check it out! Last updated February 2020 for BMI 2.0.
  • The central BMI repository on GitHub: Go here to contribute to BMI, ask a BMI-related question, or submit an issue.
  • The BMI 2.0 language specifications for C, C++, Fortran, and Python. If you have a model in one of these supported languages, implement the corresponding spec to create a BMI.
  • Sample implementations in C, C++, Fortran, and Python. These examples demonstrate how to implement a BMI for a simple model.
  • The Peckham et al. (2013) article in Computers & Geosciences where the concept of BMI was proposed.
  • The Hutton et al. (2020) article in Journal of Open Source Software describing BMI 2.0.
  • The latest materials for the BMI Live instructional clinic.

Citation

If you use BMI in your work, please cite:

  • Peckham, S.D., Hutton, E.W., and Norris, B., 2013. A component-based approach to integrated modeling in the geosciences: The design of CSDMS. Computers & Geosciences, 53, pp.3-12, http://dx.doi.org/10.1016/j.cageo.2012.04.002.
  • Hutton, E.W.H., Piper, M.D., and Tucker, G.E., 2020. The Basic Model Interface 2.0: A standard interface for coupling numerical models in the geosciences. Journal of Open Source Software, 5(51), 2317, https://doi.org/10.21105/joss.02317.