dealii icon indicating copy to clipboard operation
dealii copied to clipboard

write a module describing orientation / general orientatation cleanup

Open drwells opened this issue 2 years ago • 2 comments

We should put this information all in one place. A few relevant classes/functions/etc:

  1. TriaObjectsOrientations
  2. ReferenceCell
  3. GeometryInfo
  4. the simplex module
  5. make_periodicity_constraints
  6. QProjector (a lot of orientation information is hard-coded into this class)
  7. GridTools::orthogonal_equality (this one uses std::bitset<3>)
  8. 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., in FiniteElement)
  • [ ] MatrixFree wants the standard orientation to be all zeros, whereas 1u is the default orientation in most of the rest of the library
  • [x] we should not use both unsigned char and std::bitset<3>
  • [x] Standardize on using face_orientation as the sole relevant bit in 2D. Many parts of the library (e.g., GeometryInfo) use face_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 using unsigned 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.

drwells avatar Jan 11 '23 18:01 drwells

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.

bangerth avatar Jan 11 '23 19:01 bangerth

See also #15025.

drwells avatar Apr 05 '23 21:04 drwells