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:
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
-
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)
- work out how to use IndexSpace/FieldSpace
- IndexSpace/FieldSpace + actual task graph that isn't trivial
- 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?)
- automated kernel generation
- automated C kernel wrapper
- automated Legion wrappers?
- integrate with ATS