Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <cstdint>
7 : #include <iosfwd>
8 :
9 : namespace domain {
10 :
11 : /// \brief The type of face for a Block or Element
12 : ///
13 : /// \details For a face with neighboring Blocks (or Elements) the FaceType is
14 : /// determined by whether the block logical coordinates of the neighboring
15 : /// Blocks (or Elements) have conforming block logical coordinates on their
16 : /// interface. Block logical coordinates are considered to be conforming if
17 : /// they are identical (i.e. an aligned OrientationMap) or related by a
18 : /// discrete rotation (i.e. a valid non-aligned OrientationMap).
19 : ///
20 : /// \note FaceType::Topological is for the faces of an Element or Block with a
21 : /// Topology other than I1 (e.g. the angular directions of an S2 topology). The
22 : /// face is not on the external boundary, and has no neighboring Block or
23 : /// Element.
24 1 : enum class FaceType : uint8_t {
25 : /// Used to denote an uninitialized value
26 : Uninitialized = 0,
27 : /// Used to denote a face on an external boundary
28 : External,
29 : /// Used to denote a face that is not on the external boundary, and that has
30 : /// no neighboring Block or Element (e.g. the angular directions of an S2
31 : /// topology).
32 : Topological,
33 : /// Used to denote a face shared with one or more conforming, aligned
34 : /// neighbors
35 : ConformingAligned,
36 : /// Used to denote a face shared with one or more conforming, unaligned
37 : /// neighbors
38 : ConformingUnaligned,
39 : /// Used to denote a face shared with a single non-conforming neighbor
40 : SingleNonconforming,
41 : /// Used to denote a face shared with multiple non-conforming neighbors
42 : MultipleNonconforming,
43 : };
44 :
45 : /// Output operator for a FaceType.
46 1 : std::ostream& operator<<(std::ostream& os, FaceType face_type);
47 : } // namespace domain
|