New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
write a module describing orientation / general orientatation cleanup #14667
Comments
It should be in |
This was referenced Jan 18, 2023
drwells
changed the title
write a module describing orientation
write a module describing orientation / general orientatation cleanup
Jan 23, 2023
This was referenced Jan 26, 2023
See also #15025. |
This was referenced Dec 20, 2023
This was referenced Mar 25, 2024
This was referenced Apr 1, 2024
This was referenced Apr 20, 2024
drwells
added a commit
to drwells/dealii
that referenced
this issue
Apr 20, 2024
Partially reverts dealii#15678. While dealii#15678 fixed the permutation bug, it didn't address the true cause of the problem: since face orientations are computed in the "apply this permutation to face 1 to get face 2" direction, QProjector should use inverse orientations. Since 2d orientations are their own inverses this only shows up in 3d. Whenever two faces abutt, the first face is always in the default orientation and the second face's orientation is computed relative to that (as decribed here). Hence, when we project quadrature points onto the first face they do not need to reoriented. However, we need to apply the *reverse* permutation on the second face so that they end up in the same positions as the first face. More formally: most, but not all, orientations are their own inverses. In particular, triangle orientations 3 and 5 are each-other's inverses. This matches the notion of inverse orientation used in dealii#16828 for hypercubes. In the future, we should combine the hypercube and non-hypercube implementations to avoid these kinds of inconsistencies. Part of dealii#14667.
This was referenced Apr 20, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
We should put this information all in one place. A few relevant classes/functions/etc:
std::bitset<3>
)In a similar vein, we should settle on 'combined orientation' or 'raw orientation' - I recall seeing both in the library
Consistency problems:
(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 libraryunsigned char
andstd::bitset<3>
face_orientation
as the sole relevant bit in 2D. Many parts of the library (e.g., GeometryInfo) useface_flip
instead.std::bitset<3>
version uses 'orientation, flip, rotation'.FE_Q
cannot make this assumption since it does not know whether or not it is part of a mixed mesh).types::orientation_type
or something similar instead of usingunsigned char
(false, false, false)
(which is almost surely wrong) to initialize some values. Take a closer look at how it computes things.face_to_cell_index()
: maybe we have enough infrastructure now to generalize everything.The text was updated successfully, but these errors were encountered: