Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <array>
7 : #include <cstddef>
8 :
9 : /// \cond
10 : template <size_t VolumeDim>
11 : class Direction;
12 : template <size_t VolumeDim>
13 : class OrientationMap;
14 : namespace domain {
15 : enum class Topology : uint8_t;
16 : } // namespace domain
17 : /// \endcond
18 :
19 : namespace domain {
20 : /// \ingroup ComputationalDomainGroup
21 : /// \brief Returns whether or not neighboring Blocks (or Elements) have
22 : /// conforming block logical coordinates on their interface
23 : ///
24 : /// \details Block logical coordinates are considered to be conforming if they
25 : /// are identical or related by a discrete rotation (i.e. a valid non-aligned
26 : /// OrientationMap). It is a requirement that neighboring Blocks be conforming
27 : /// if their oriented topologies are the same in the interface dimensions.
28 : ///
29 : /// \note If neighboring Elements are conforming, they can exchange boundary
30 : /// data via either copy (if they have the same h- and p-refinement) or
31 : /// projection (if they don't), taking into account the discrete rotation if
32 : /// necessary. If the neighbors are not conforming, boundary data will need to
33 : /// be interpolated.
34 : template <size_t VolumeDim>
35 1 : bool neighbor_is_conforming(
36 : const std::array<Topology, VolumeDim>& self_topologies,
37 : const std::array<Topology, VolumeDim>& neighbor_topologies,
38 : const Direction<VolumeDim>& direction_to_neighbor,
39 : const OrientationMap<VolumeDim>& orientation_of_neighbor);
40 : } // namespace domain
|