Description Versions Reference

1. gd, The "generic data" structure that is hyper useful for Fortran programmers
2. "matTable" , a tool to load the contents of a Matlab .mat file with one command.
3. "autoLink" , a Matlab tool to scan Fortran source file for metadata about structure declarations
4. Examples of using gd
[Description] This case comes from a practical application of PAWS. Though a 'linkGDMod' created automatically by GeneralTypeScanner and autoLink, the program easily reads the data hierarchy stored in .mat file.
[Description] This case comes from CLM4.5 code. It takes like 40 repeated commands and 120 lines to 'restart' -- reading data from a netcdf file. When they modified the I/O from netcdf to parallel netcdf, similar bunches of codes needed to be rewritten.
Here we shows a case that we can just finish reading input by two lines with GD, calling a subroutine that generated by matlab script, which is shown in RobotforScript.

Nov 2016  

Geoscientific models 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, 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.