variational_form / weak_form / functional TODO list
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 245
- Forks
- 36
- Avg merge
- 8d 23h
- Merged PRs (30d)
- 4
Description
Originally from the PR, this is a TODO list to track priorities and development progress. It will be regularly updated as new features are completed.
## To-do list:
(1: high priority, 5: low priority)
(✔️: written and working, ⁉️: some development, but untested or not working, ❌: not started)
### Function Spaces
| | H1 | Hcurl | Hdiv | DG |
| -------------- | ----- | ----- | ---- | ----- |
| Triangles | ⁉️ (4) | ⁉️ (4) | ❌(5) | ⁉️ (4) |
| Quadrilaterals | ✔️ | ✔️ | ❌(4) | ✔️ |
| Tetrahedra | ⁉️ (3) | ⁉️ (3) | ❌(5) | ⁉️ (3) |
| Hexahedra | ✔️ | ✔️ | ❌(4) | ✔️ |
### Domains of Integration (see picture below)
[](https://user-images.githubusercontent.com/61714427/114587521-9a8e8600-9c3a-11eb-8dfd-05f0e87ebca7.gif)
| | 1 | 2 | 3 |
| ---- | ------ | ------- | ---- |
| 1D | ❌(4-5) | n/a | n/a |
| 2D | ✔️ | ✔️ | n/a |
| 3D | ❌(4) | ✔️ | ✔️ |
- ❌ flux-type element calculations over all interfaces between neighboring elements (4-5)
- ❌ contact surfaces (4-5)
### Functional features
- ✔️ kernel template: residual evaluation w/ automatic differentiation
- ✔️ kernel template: action of gradient
- ✔️ kernel template: assemble gradient matrix
- ❌ support with scalar or tensor valued arguments (e.g. make time available to q-function) (3)
- ✔️ support QoIs for case where test space == `double`
- ✔️ kernel template: assemble gradient vector (QoI)
- ✔️ implement some basic material models for different physics
- ✔️ allow user-defined types to be passed in to certain integrals (e.g. material state for plasticity models)
- ⁉️ allow user-defined annotations on integrals (e.g. only provide temperature gradient for this element calculation) (4)
- ✔️ multiphysics support (i.e. support more than 1 trial space per weak form)
### Tensor / Dual Number Classes
- ✔️ base implementation of statically sized tensor class, and dual number/tensor classes
- ✔️ support arithmetic on tuples of tensors / dual numbers
- ✔️ support differentiation of functions with multiple inputs/outputs
- ✔️ automatically detect if an output does not depend on certain inputs, and optimize out derivative calculation
- ⁉️ automatically detect if an output is linear / nonlinear, and cache derivatives accordingly (4)
- ⁉️ automatically detect symmetries (isotropy, orthotropy, symmetry, antisymmetry, etc) in outputs and store accordingly (4-5)
- ✔️ support evaluation/differentiation of advanced tensor functions (`inv`, `det`, `polar_decomposition`, etc)
### Performance Testing
- ✔️ profile existing tensor / dual number classes
- ✔️ profile shape function value / gradient
- ⁉️ profile common kernels (diffusion, mass, etc) (3-4)
- ✔️ profile high-level residual evaluation
- ⁉️ run/profile each of the above on CUDA as well (1-2)
- ✔️ investigate performance benefits of alternative implementations
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
This issue is a broad TODO list covering function spaces, integration domains, functional features, tensor and dual-number classes, and performance testing; it names no source files, tests, or entry points. Choose a specific unchecked item only after locating its relevant implementation and tests, and define done as that item being implemented and verified.
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
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100