llnl / llnl/smith

variational_form / weak_form / functional TODO list

Open
#475 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

discretization enhancement
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)

[![dimensions](https://user-images.githubusercontent.com/61714427/114587521-9a8e8600-9c3a-11eb-8dfd-05f0e87ebca7.gif)](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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.