PyMT is an Open Source Python package, developed by the Community Surface Dynamics Modeling System, that provides the necessary tools used for the coupling of models that expose the Basic Modeling Interface (BMI). It contains:
- Tools necessary for coupling models of disparate time and space scales (including grid mappers)
- Time-steppers that coordinate the sequencing of coupled models
- Exchange of data between BMI-enabled models
- Wrappers that automatically load BMI-enabled models into the PyMT framework
- Utilities that support open-source interfaces (UGRID, SGRID, CSDMS Standard Names, etc.)
- A collection of community-submitted models, written in a variety of programming languages, from a variety of process domains - but all usable from within the Python programming language
- A plug-in framework for adding additional BMI-enabled models to the framework
Eric Hutton eric.hutton@colorado.edu
Python Modeling Toolkit
PyMT
Eric Hutton eric.hutton@colorado.edu
Earth-Systems modelers
Terrestrial, Coastal, Marine, Hydrology, Tectonics
CSDMS
Yes
MIT
Source is publicly available from GitHub. Binary distributions are available from the csdms-stack channel on Anaconda Cloud.
Email, GitHub issue tracker, meetings
GitHub pull requests
This section asks questions about architectural characteristics of the infrastructure.
Which of the following best describes the infrastructure's representation of model components? If none apply, please use the other category and describe the infrastructure's component construct.
Both of these:
- There is a component construct based on registering with the infrastructure function pointers to user-written code
- There is a component construct based on implementing an interface in an object-oriented lanaguage (e.g., Python or Java)
Is the infrastructure a calling framework (in which user-written methods or subroutines are registered and invoked) or called (such as a traditional library or "toolbox")? Check all that apply.
- The infrastructure is a calling framework, invoking user-written methods or subroutines
Does the infrastructure require init, run, and finalize methods/subroutine to be written?
Yes
Does the infrastructure allow init, run, and finalize methods/subroutines to have multiple phases?
Yes
Does the infrastructure explicitly implement a mechanism for nesting components?
Yes
To what degree are generic coupler components provided and what level of customization is expected?
Fully generic coupler component(s) is/are provided and no customization is required
To what degree are generic driver components provided and what level of customization is expected?
Fully generic driver component(s) is/are provided and no customization is required
Does the infrastructure allow the same model to be instantiated multiple times for ensemble runs?
Yes
Can ensemble members run in the same memory space or must they be on disjoint processors? Yes (but depends on a component's implementation)
How can the model execution sequence be modified? Check all that apply.
- By specializing a generic driver
- By changing the configuration metadata
Do models execute sequentially, concurrently, or both? Check all that apply.
- Sequentially
Which components, if any, can run as separate executables in a coupled system? Check all that apply.
- Entire can run as a single executable
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This section asks questions about how the infrastructure is implemented.
What language(s) is the infrastructure itself written in? Choose all that apply.
- C
- C++
- Fortran
- Python
What language bindings are supported for interfacing with the infrastructure? These are the languages that someone writes code in to use the infrastructure. Choose all that apply.
Python
What is the level of support for programming language interoperability, i.e., mediating between models written in different programming languages?
The infrastructure specifically provides interoperability between models written in different programming languages
List any required software dependencies (e.g., MPI, NetCDF).
- NetCDF
- UDUNITS
- ESMPy
- scipy
List any optional software dependencies.
None
On what operating systems will the infrastructure execute? Choose all that apply.
- Linux
- Mac
On what class of computing platform/hardware will the infrastructure execute? Choose all that apply.
- Desktop/laptop
- Cluster
- HPC
List the set of supported compilers and versions.
- gcc 4.2+
- Python 2.7
What is the largest amount of parallelism (in terms of concurrent threads or processes) that the infrastructure supports?
No parallelism (Components can be parallel, though)
To what degree does the infrastructure provide parallel data structures/operators for distributed memory (i.e., by abstracting MPI communication)?
MPI or similar library is not used (or used only trivially) within the infrastructure
To what degree does the infrastructure provide parallel data structures/operators in shared memory, e.g., abstractions over a threading library like pthreads?
No explicit provision of parallel data structures/operators for multi-threaded environments
Does the infrastructure provide functions to explicitly recognize and exploit hardware accelerators?
No
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This category contains questions about mediation services supported by the modeling infrastructure. For each question, selecting "Directly provided by the infrastructure" means there is an API or similar mechanism to access the service "out of the box" with little coding required by the user. Selecting "Supplied by user" means that there is a place where the user needs to provide his or her own code to complete the mediation. "No support" means implementing the mediation is outside the scope of the infrastructure.
What is the level of support for spatial interpolation?
Directly provided by the infrastructure
What is the level of support for temporal interpolation?
Directly provided by the infrastructure
What is the level of support for different kinds of calendars (i.e., to manage model time)?
Directly provided by the infrastructure (as provided by cfunits)
What is the level of support for unit conversion?
Directly provided by the infrastructure
What is the level of support for angle conversion, i.e., transforming angles to a different reference line?
Directly provided by the infrastructure (yes, but limited. azimuth <-> math)
What is the level of support for field merging?
- No support (I don't really know what this means so I'm going with "no support")
What is the level of support for ensuring domain consistency, e.g., checking for consistent land/sea masks?
- Supplied by user (through CSDMS Standard Names)
What is the level of support for parallel to serial repartitioning (often called scatter/gather)?
- No support
What is the level of support for parallel-to-parallel repartitioning (often called MxN redistribution)?
- No support
What is the level of support for scientific or domain-specific mediation (e.g., flux calculations)?
- Supplied by user
What is the level of support for load balancing?
- No support
What is the level of support for halo exchanges (i.e., filling in field values on one process that are owned by a neighboring process)?
- No support
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This category is about assumptions that this infrastructure makes about spatial/geographic grids. In each question, only choose an option if it represents an assumption that ALWAYS made.
Which of the following does the modeling infrastructure ALWAYS ASSUME about the model grid topological structure? Do not check an option unless it is ALWAYS ASSUMED. Choose one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about model grid topological dimensions? Do not check an option unless it is ALWAYS ASSUMED. Choose one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about the grid's coordinate dimensionality (i.e., the number of coordinates associated with a point)? Note this may be greater than the topological dimensionality. Choose one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about the grid's coordinate system? Choose one.
- Cartesian
Which of the following does the modeling infrastructure ALWAYS ASSUME about the distance measure used between points? Choose one.
- Straight line distance
Which of the following does the modeling infrastructure ALWAYS ASSUME about the grid's parallel decomposition? Choose one.
N/A
Which of the following does the modeling infrastructure ALWAYS ASSUME about specifying the parallel decomposition? Choose one.
N/A
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This section describes how spatial/geographic grids are represented in this infrastructure.
Does the infrastructure have an explicit data structure or object for representing model grids?
- Yes
What grid topological structures are supported? Check all that apply.
- Logically rectangular uniform
- Logically rectangular rectilinear
- Logically rectangular curvilinear
- Unstructured
- Point cloud / point list
How many topological dimensions are supported (i.e., the dimension of the modeled surface, volume, etc?) Check all that apply.
- One dimension
- Two dimensions
- Three dimensions
What coordinate systems are supported by the modeling infrastructure? Check all that apply.
- Cartesian
How many coordinate dimensions are supported (this may be greater than the number of topological dimensions)? Check all that apply.
- Three dimensions
What distance measure(s) can be used (e.g., for calculating interpolation weights)? Check all that apply.
- Straight line distance
If unstructured grids/meshes are supported, what is the max number of polygon edges?
None (if using ESMF mapper - field mapping is limited by whatever ESMPy provides)
Describe any supported options for representing poles.
None
What kinds of decomposition specification does the infrastructure support natively?
None
How are parallel decompositions specified to the infrastructure? Check all that apply.
None
Can grid cells be masked, indicating that some cells have no value (e.g., land/sea mask)? Choose one.
- Yes
Can grids made up of multiple tiles be represented within the infrastructure? Choose one.
- No
Can nested grids (i.e., a finer resolution grid embedded in a coarser grid) be represented by the infrastructure? Choose one.
- No
Can adaptive grids (i.e., that change in structure over time) be represented by the infrastructure? Choose one.
- Yes but the user must manage the adaptions (e.g. by re-specifying the grid)
Does the infrastructure have an explicit data structure or object for representing model fields, i.e., data situated on a model grid?
- Yes
Which of the following does the infrastructure support (e.g., APIs) for initializing a field's data? Check all that apply.
- From file
- From a constant or function
- From memory
What additional field options are supported? Check all that apply.
- Bundles (i.e., collections of related fields)
- Vectors
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This section asks questions about support for interpolation.
Is a sparse matrix multiple function provided? Choose one.
- Yes (through scipy, does that count?)
When generating weights and addresses, what interpolation method(s) are supported? Check all that apply.
+Nearest neighbour +Bilinear/Trilinear +Higher order non-conservative +First order conservative +Non-geometrical (e.g. runoffs, calving, etc) +Extrapolation outside of the source domain +Other:
How are interpolation weights applied?
-With a sparse matrix multiplication operation -Not supported -Other :
How are interpolation weights and addresses generated? Check all that apply.
- During the model run in serial
How can interpolation weights and addresses be applied? Check all that apply.
- Online, i.e., during a coupled model run
What temporal transformations can be supported? Check all that apply.
- Averaging
- Interpolation - linear
- Extrapolation
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This category is about assumptions that the modeling infrastructure makes about the driving and the model's iterative properties, such as time stepping. In each question, only choose an option if it represents an assumption ALWAYS made by the infrastructure.
Which of the following does the modeling infrastructure ALWAYS ASSUME about the model's stepping scheme? Select one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about the model's step size? Select one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about the frequency of coupling data exchanges? Choose one.
- none of these are ALWAYS ASSUMED
Which of the following does the modeling infrastructure ALWAYS ASSUME about the models participating in a coupled simulation? Choose one.
- The set of models participating in a coupled simulation start together, run the entire length of the simulation, and stop together.
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This section asks questions about the infrastructure's driving and iterative properties.
Which time stepping schemes does the infrastructure support? Check all that apply.
- Explicit time step (dependence only on previous step)
What kinds of step sizes are supported by the infrastructure? Check all that apply.
- Goblal fixed (time step size is fixed in space and time)
- Global adaptive (time step size varies in time but applies to the whole domain)
Which of the following does the modeling infrastructure support?
- Fixed coupling frequency between any two models
- The coupling frequency can change dynamically
Which of the following does the modeling infrastructure support?
- The set of models participating in a coupled simulation start together, run the entire length of the simulation, and stop together.
- The set of models in a simulation can change dynamically (e.g. models can join and leave the simulation at runtime).
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
These questions have to do with how the infrastructure is configured, e.g., via API calls, files, etc.
How is the infrastructure configured with information about the model grid? Check all that apply.
- API call(s)
How is the infrastructure configured with information about the parallel decomposition? Check all that apply.
N/A
How is the infrastructure configured with information about the model's temporal properties (start, stop, step size)? Check all that apply.
- API call(s)
How is the infrastructure configured with information about the model's stepping scheme? Check all that apply.
- API call(s)
How is the infrastructure configured with information about the model's input fields? Check all that apply.
- API call(s)
How is the infrastructure configured with information about the model's output fields? Check all that apply.
- API call(s)
- Configuration file in an infrastructure-specific format
How is the infrastructure configured with information about the model's execution methods (e.g., initialize, run, finalize)? Check all that apply.
- Assumed
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.
This sections asks questions about the infrastructure's use of metadata.
What model metadata can be queried at runtime? Check all that apply.
- Temporal metadata
- Stepping method
- List of input fields
- List of output fields
- Field connections (between models that are coupled)
- Field coupling frequency
- Grid properties
- Execution methods
What model metadata can be queried prior to execution (i.e., statically)? Check all that apply.
- Temporal metadata
- Stepping method
- List of input fields
- List of output fields
- Execution methods
- Field connections (between models that are coupled)
- Field coupling frequency
If the infrastructure outputs metadata, what standards are supported (e.g. CF, CIM)?
- CSDMS Standard Names (CF)
- udunits
- ugrid
List any metadata formats that the infrastructure can output (e.g. xml, csv, json). If none indicate such.
- netcdf
If the infrastructure inputs metadata, what standards are supported (e.g. CF, CIM)?
- CSDMS Standard Names (CF)
- udunits
List any metadata formats that the infrastructure can input (e.g. xml, csv, json). If none, indicate such.
- YAML
Do you have any additional comments about the questions in this section? Were all questions relevant and clear? For multiple choice questions, were the possible responses adequate? Are there any missing questions that should be added? Please provide any comments that will help improve future versions of this questionnaire.