Structural reflection can separate concerns for generic handling. Small pay in Fortran-native reflection can have large return on code reusability. We share a generic data structure which supports reflection and generic I/O.
Embracing emulated reflection allows generically-written codes that are highly re-usable across projects, and we argue this framework will greatly accelerate earth system model development across the board.
Geoscientific models such as the Community Land Model manage myriad and increasingly complex data structures as trans-disciplinary models are integrated. They often incur significant redundancy with cross-cutting tasks. Reflection, the ability of a program to inspect and modify its structure and behavior at runtime, is known as a powerful tool to improve code reusability, abstraction, and separation of concerns. Reflection is rarely adopted in high-performance Geoscientific models, especially with Fortran, where it was previously deemed implausible. Practical constraints of language and legacy often limit us to feather-weight, native-language solutions. We demonstrate the usefulness of a structural-reflection-emulating, dynamically-linked metaObjects (objects that manipulate, create, describe, or implement other objects), gd. We show real-world examples including data structure self-assembly, effortless save/restart and upgrade to parallel I/O, recursive actions and batch operations. We share gd and a derived module that reproduces MATLAB-like structure in Fortran and C++. We suggest that both a gd representation and a Fortran-native representation are maintained to access the data, each for separate purposes. Embracing emulated reflection allows generically-written codes that are highly re-usable across projects, and we argue this framework will greatly accelerate earth system model development across the board.