[[CSDMS meeting abstract presentation::In order to simplify conversion of an existing model to a reusable, plug-and-play model component, CSDMS has developed a simple interface called the Basic Model Interface or BMI that model developers are asked to implement. In this context, an interface is a named set of functions with prescribed function names, argument types and return types. By design, the BMI functions are straightforward to implement in any of the languages supported by CSDMS, which include C, C++, Fortran (all years), Java and Python. Also by design, the BMI functions are noninvasive. A BMI-compliant model does not make any calls to CSDMS components or tools and is not modified to use CSDMS data structures. BMI therefore introduces no dependencies into a model and the model can still be used in a "stand-alone" manner. Any model that provides the BMI functions can be easily converted to a CSDMS plug-and-play component that has a CSDMS Component Model Interface or CMI.
Once a BMI-enabled model has been wrapped by CSDMS staff to become a CSDMS component, it automatically gains many new capabilities. This includes the ability to be coupled to other models even if their (1) programming language, (2) variable names, (3) variable units, (4) time-stepping scheme or (5) computational grid is different. It also gains (1) the ability to write output variables to standardized NetCDF files, (2) a "tabbed-dialog" graphical user interface (GUI), (3) a standardized HTML help page and (4) the ability to run within the CSDMS Modeling Tool (CMT).
This clinic will explain the key concepts of BMI, with step-by-step examples. It will also include an overview of the new CSDMS Standard Names, which provide a standard way to map input and output variable names between component models as part of BMI implementation. Participants are encouraged to read the associated CSDMS wiki pages in advance and bring model code with specific questions. See
1) BMI Page: BMI_Description
2) Standard Names Page: CSDMS_Standard_Names