dealii
dealii copied to clipboard
write a module describing orientation / general orientatation cleanup
We should put this information all in one place. A few relevant classes/functions/etc:
- TriaObjectsOrientations
- ReferenceCell
- GeometryInfo
- the simplex module
- make_periodicity_constraints
- QProjector (a lot of orientation information is hard-coded into this class)
- GridTools::orthogonal_equality (this one uses
std::bitset<3>
) - PeriodicFacePair (also uses bitset)
In a similar vein, we should settle on 'combined orientation' or 'raw orientation' - I recall seeing both in the library
Consistency problems:
- [x] combined vs raw orientation (we should settle on a single name)
- [x] different conventions for converting
(bool, bool, bool)
to a single integer flag (e.g., inFiniteElement
) - [ ]
MatrixFree
wants the standard orientation to be all zeros, whereas1u
is the default orientation in most of the rest of the library - [x] we should not use both
unsigned char
andstd::bitset<3>
- [x] Standardize on using
face_orientation
as the sole relevant bit in 2D. Many parts of the library (e.g., GeometryInfo) useface_flip
instead. - [x] Standardize on using the order 'orientation, rotation, flip'. The
std::bitset<3>
version uses 'orientation, flip, rotation'. - [x] Add utility functions for getting reverse orientations instead of hard-coding it
- [x] We sometimes assume that things are always in the standard orientation in 2d. We should remove this assumption because it doesn't work for mixed meshes (i.e.,
FE_Q
cannot make this assumption since it does not know whether or not it is part of a mixed mesh). - [ ] Introduce
types::orientation_type
or something similar instead of usingunsigned char
- [ ] Clean up the documentation of QProjector. It was written long ago and the style is difficult to understand (it focuses too much on how and not enough on why)
- [ ] FE_ABF doesn't actually loop over the different possible face orientations - it used
(false, false, false)
(which is almost surely wrong) to initialize some values. Take a closer look at how it computes things. - [ ] Take another look at
face_to_cell_index()
: maybe we have enough infrastructure now to generalize everything.
It should be in ReferenceCell
. That's where we've been moving all of the other stuff that relates to geometric descriptions of reference cells.
See also #15025.