Restructure alloc space calls into simpler smaller files (#2068)
TYPE: enhancement
KEYWORDS: intel, compilation, llvm, memory
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
The Intel oneAPI compilers (and others like nvhpc) struggle with some of
the larger (15k+ lines of code) files within WRF. This causes intense
memory usage that is not often available to the average user not in a
resource-rich environment. This often limits compilation to single
threaded if even possible or to a dedicated environment with enough
memory if available. If neither of those is available to a user, they
will be unable to use these configurations entirely.
Solution:
This PR focuses on the `module_alloc_space*` sections of code to reduce
their individual file size to manageable levels. They are instead broken
out into many smaller files as external subroutines, not requiring a
wrapper module to house the subroutine call. The files are now fully
generated source code from the registry, with the calls to the
subroutines also being generated as well. This also makes it relatively
easy to change the number of files generated from a source code
perspective. Build rules would need to be modified accordingly as seen
in these changes.
TESTS CONDUCTED:
Attached to this PR are plots of the respective effects of theses
changes. Changes were tested with intel and gcc compilers, but only
intel memory usage is shown as it exacerbates the memory usage issue.
24 files changed: