I am creating this issue to serve as a record of the sorts of things that I believe the introduction of pyop3 (#3318) will enable. This list is probably not exhaustive.
Numerical methods
- Code generation for PCPatch/domain decomposition methods (e.g. automatically run on the GPU, flexible choice of patch size, function spaces on the patch etc)
- Adaptive methods: AMR, hp-adaptivity
- Mixed mesh support
- Anything involving larger and more complex mesh stencils (e.g. finite volume, slope limiters)
- Extruded + submesh
- Extruded meshes distributed in the extruded direction
- Nested mixed function spaces
- Rewrite SLATE using pyop3
Performance and low-level things
- GPU support through MLIR (in progress)
- Data layout transformations (e.g. collect mixed function space DoFs per entity)
- Parallel communication optimisations (e.g. avoid halo exchanges for cells DoFs if only facet DoFs are changed)
- Kernel fusion/time tiling (i.e. redo Fabio's PhD work)
Low hanging fruit (should be easy)
- Vector/tensor valued Real spaces
- Assembly of Real function spaces into monolithic (MATAIJ) matrices
I am creating this issue to serve as a record of the sorts of things that I believe the introduction of pyop3 (#3318) will enable. This list is probably not exhaustive.
Numerical methods
Performance and low-level things
Low hanging fruit (should be easy)