Defining BMI Extensions #138
gregtucker
started this conversation in
Ideas
Replies: 1 comment
-
We've moved this discussion to a Google doc to allow people to edit what we have and add to the discussion. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This is a first, rough outline-level stab at some text that defines what an Extension is and how Extensions are proposed, reviewed, and ultimately added to the overall BMI Standard.
What are BMI Extensions?
The Basic Model Interface (BMI) is meant to be a lightweight interface standard for numerical model codes, containing the minimum "common denominator" among operation, query, and variable-modification functions. Lightweight design makes it easy for developers to implement BMI in their codes. At the same time, there are many use cases that call for standardization of more specialized capabilities. Examples might include handling of geospatial information, support for particular kinds of numerical solvers, functions for parallel computing, or capabilities related to particular grid types (such as the "sigma coordinates" used in some atmosphere and ocean models). In order to keep the Core BMI lightweight while also accommodating these and other needs, BMI uses Extensions. An Extension is a group of functions that is:
What is the design philosophy behind BMI Extensions?
Some principles of BMI Extensions:
cook_
orget_kitchen_
[THERE'S SOME VARIANCE OF OPINION HERE; PROJECT NAMES ARE POTENTIALLY PROBLEMATIC]; in some cases, good practice would be to extend the names of existing functions, such asget_var_
andset_var_
as long as the remainder of the function name is sufficiently specialized that it is unlikely to conflict with future names.bmix_
so developers and readers of code can immediately tell whether a given function is core or extension? What alternative methods could there be to distinguish?Who can design and propose a BMI Extension?
Anyone! BMI is an open community standard. The process for proposing a new Extension is described below.
How are BMI Extensions proposed, evaluated, and ultimately added to the overall BMI Standard?
Extension definitions are proposed, evaluated, and added using the same procedures for BMI as a whole, which are outlined in the BMI Governance Document.
A complete proposal for an extension should be implemented as a Pull Request. It should include a specification in at least one language. It should include at least one example, such as the heat example included in the Core BMI documentation [ADD LINK].
(summarize what these are)
What in Core BMI needs to be modified to accommodate the existence of extensions?
Core BMI will need a function to query what extensions and versions are supported.
How and where are Extensions listed and documented?
What are some example Extensions?
What are some guidelines for frameworks to implement support for Extensions?
[include at least one example of how csdms would do it]
ISSUES TO CONSIDER
Beta Was this translation helpful? Give feedback.
All reactions