FEniCS / FEniCS/dolfinx

Improve type flexibility in assemblers

Open
#4,422 0 comments 1 reaction 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.