FEniCS / FEniCS/basix

Add support for macroelements

Open
#545 1 comment 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
C++
Stars
145
Forks
47
Avg merge
3h 5m
Merged PRs (30d)
8

Description

Macroelements are defined by splitting the reference cell into smaller cells, then defining the polyset using piecewise polynomials on these subcells.

The hard assumption that basis functions are polynomial on the cell in Basix prevent these from being used currently.

There are two types of macro element that I am aware of:

**1. Macro elements obtained by dividing each cell by splitting edges in half**
For example: [P1-iso-P2](https://defelement.com/elements/p1-iso-p2.html)

![image](https://github.com/FEniCS/basix/assets/9850599/7e63d6a0-ee3d-4dda-bb0e-d6e433d23f1c)
![tet-macro-diagram](https://github.com/FEniCS/basix/assets/9850599/37feff2a-5c32-489c-bd25-be01f0b5d921)

The diagram for the tetrahedron is taken from [Snoeijer, J., Numerical Reconstruction of Fundamental Solutions of the Stokes System with Finite Elements](http://resolver.tudelft.nl/uuid:02149e5a-b654-4047-8943-90570e7e67a9) (with labels added)

**2. Macro elements obtained by dividing cell by splitting angles in half**
For example, [Guzman-Neilan](https://defelement.com/elements/guzman-neilan.html), [HCT](https://defelement.com/elements/hsieh-clough-tocher.html)

![image](https://github.com/FEniCS/basix/assets/9850599/150f7484-b5ff-4d97-94c5-e2c9b846b171)

I am yet to find a source that uses this type of macro element for a quad. Two possible dissections could be:
![image](https://github.com/FEniCS/basix/assets/9850599/13f904ab-eebd-42be-9c47-91c5943a6406)

**To do list**
- [x] Allow for elements to have different polyset types
- [ ] #689
- Edge macro elements (1)
- [x] Implement lowest degree polysets for edge macro elements
- [x] Implement arbitrary degree polysets for edge macro elements on intervals, quads, and hexes
- [ ] Implement arbitrary degree polysets for edge macro elements on triangles and tets
- Vertex macro elements (2)
- [ ] Implement lowest degree polysets for vertex macro elements
- [ ] Implement arbitrary degree polysets for vertex macro elements on intervals and quads
- [ ] Implement arbitrary degree polysets for vertex macro elements on triangles
- [ ] Implement polysets for 3D cells

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.