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