Improve type flexibility in assemblers
- Dominant language
- C++
- Stars
- 1.2k
- Forks
- 261
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 65
Description
The current model assumes 2 types:
1. scalar type `T` for coefficients, constants, and the results of the assembly operation (scalar, vector, and matrix),
2. geometry type `G` for mesh coordinates.
One could improve the flexibility in the following:
1. the assembly type could be independent from the kernel input types. Matrix-matrix accumulate (MMA) do take lower precision inputs and accumulate into higher precision.
2. geometry type is used to instantiate some `basix` functions for runtime pullbacks etc. These have more constraints, since they call external libraries for e.g. determinant, inverse, and are not supported for std::float16_t. It should be possible to split that instantiation and allow users requiring only the compiled float16 assembly path to run.
Contributor guide
Research direction
Start by tracing the assembler templates and the Basix functions used for runtime pullbacks. Compare the current scalar and geometry type instantiations with the requested lower-precision inputs, higher-precision accumulation, and float16 assembly path. Done means these type roles can be selected independently while unsupported geometry operations remain constrained.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- hpc
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100