Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <boost/functional/hash.hpp> 7 : #include <cstddef> 8 : #include <unordered_map> 9 : 10 : #include "DataStructures/DataBox/Tag.hpp" 11 : #include "Domain/Structure/DirectionalId.hpp" 12 : 13 0 : namespace elliptic::dg::subdomain_operator::Tags { 14 : 15 : /// The number of points an element-centered subdomain extends into the 16 : /// neighbor, i.e. the "extruding" overlap extents. This tag is used in 17 : /// conjunction with `LinearSolver::Schwarz::Tags::Overlaps` to describe the 18 : /// extruding extent into each neighbor. 19 1 : struct ExtrudingExtent : db::SimpleTag { 20 0 : using type = size_t; 21 : }; 22 : 23 : /// Data on the neighbor's side of a mortar. Used to store data for elements 24 : /// that do not overlap with the element-centered subdomain, but play a role 25 : /// in the DG operator nonetheless. 26 : template <typename Tag, size_t VolumeDim> 27 1 : struct NeighborMortars : db::PrefixTag, db::SimpleTag { 28 0 : using tag = Tag; 29 0 : using Key = DirectionalId<VolumeDim>; 30 0 : using type = std::unordered_map<Key, typename Tag::type, boost::hash<Key>>; 31 : }; 32 : 33 : } // namespace elliptic::dg::subdomain_operator::Tags