Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add a geospatial extension #20

Draft
wants to merge 23 commits into
base: master
Choose a base branch
from
Draft

Conversation

mdpiper
Copy link
Member

@mdpiper mdpiper commented Feb 7, 2024

This pull request explores how a BMI extension could work in Fortran. It's modeled on @mcflugen's csdms/bmi-example-python#31, with some differences based on the language and the choices I made.

Like the Fortran specification for the core BMI functions, the geospatial BMI extension resides in a separate repository: https://github.com/mdpiper/bmi-geospatial-fortran. The code there defines an abstract type, bmi_geo, that is intended to be overridden by a concrete type in an implementation.

This PR implements bmi_geo through the type bmi_geo_heat. A key feature of a bmi_geo_heat type is that it has a reference to the bmi_heat type that implements the core BMI functions for the heat model.

I included an example program, bmi_geospatial_ex, that demostrates how to call both the core BMI functions and the extension functions for the heat model.

@mdpiper
Copy link
Member Author

mdpiper commented Feb 7, 2024

A UML diagram depicting the relationships between the different types in the example.

bmi-geo-fortran

A key point is that bmi_geo_heat "has a" bmi_heat, and the relationship only goes one way, with the extension being able to access the core BMI but not the other way around.

@mdpiper mdpiper changed the title Add a geosptial extension Add a geospatial extension Feb 7, 2024
@mdpiper
Copy link
Member Author

mdpiper commented Feb 7, 2024

My Fortran is rusty, so I welcome any suggestions for improvement to the code in this PR.

This matchesthe change in 77407c8.

[ci skip]
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant