ELM Kernels
Kernels lifted from ELM, enucleated of their data structures, and then re-wrapped in a variety of drivers.
To build, see INSTALL.md in the top level directory.
ELM modules covered:
CanopyHydrologyMod
Kernels include:
- Interception: partitions incoming precip into throughfall/precip
- Fraction Wet/Dry: identifies fraction of LAI that is wet and dry
- SnowWater: deals with a bunch of water balance aspects of the snowpack
- Fraction H2O on the surface: partitions water streams between surface and soil column
Work Plan
Single kernel and single grid cell tests/questions:
-
how do we write kernels such that they can be called by: (Ethan)
- fortran
- c
- Legion
- Kokkos
-
how do we wrap a kernel for Legion (Himanshu)
- sequence of blocked tasks
- sequence of non-blocked tasks (based on futures)
Single kernel and multiple grid cell tests/questions: (Himanshu / Ethan)
- work out how to use IndexSpace/FieldSpace
Multiple kernel and multiple grid cell tests (module test): (Ethan / Himanshu)
- IndexSpace/FieldSpace + actual task graph that isn't trivial
Module level part 2: (Dali / Ethan / Himanshu)
- Implement driver with ACTUAL ELM data layout (with filter / lake PFTs / ???) (masking??)
- compare alternative data layouts
- ragged layouts (no filter)
- fixed layout with no filter (maybe better for threading models e.g. GPUs?)
automation...
- automated kernel generation
- automated C kernel wrapper
- automated Legion wrappers?
and beyond...
- integrate with ATS