Skip to content

csdms/bmi-cxx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DOI Build and Test Anaconda-Server Badge Anaconda-Server Badge Anaconda-Server Badge

bmi-cxx

C++ bindings for the CSDMS Basic Model Interface.

Build/Install

The C++ BMI bindings can be built on Linux, macOS, and Windows. Instructions are given below.

Prerequisites:

  • A C++ compiler
  • CMake

Alternately, conda binaries have been built for Linux, macOS, and Windows. Install the C++ BMI bindings (no build needed) into an Anaconda distribution with

conda install bmi-cxx -c conda-forge

Linux and macOS

To install the C++ BMI bindings from source with cmake, run

mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=<path-to-installation>
make install

where <path-to-installation> is the base directory in which to install the bindings (/usr/local is the default). When using a conda environment, use the $CONDA_PREFIX environment variable.

The installation will look like:

.
|-- include
|   `-- bmi.hxx
`-- lib
    `-- pkgconfig
        `-- bmicxx.pc

Windows

An additional prerequisite is needed for Windows:

  • Microsoft Visual Studio 2017 or Microsoft Build Tools for Visual Studio 2017

To configure and install the C++ BMI bindings from source with cmake, run the following in a Developer Command Prompt

mkdir _build && cd _build
cmake .. ^
  -G "NMake Makefiles" ^
  -DCMAKE_INSTALL_PREFIX=<path-to-installation> ^
  -DCMAKE_BUILD_TYPE=Release
cmake --build . --target install --config Release

where <path-to-installation> is the base directory in which to install the bindings. The default is "C:\Program Files (x86)". Note that quotes and an absolute path are needed. When using a conda environment, use "%CONDA_PREFIX%\Library".

Use

To write a BMI for a model, include the bmi.hxx header and implement all the BMI functions included in the interface defined therein. BMI functions that aren't used (e.g., get_grid_x for a uniform rectilinear grid) can simply return the BMI_FAILURE status code. A sample implementation is given in the https://github.com/csdms/bmi-example-cxx repository.