Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : #include <memory> 8 : 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : 11 : /// \cond 12 : class DataVector; 13 : template <size_t Dim, typename T> 14 : class DirectionalIdMap; 15 : template <size_t Dim> 16 : class Mesh; 17 : namespace evolution::dg { 18 : template <size_t Dim> 19 : class BoundaryMessage; 20 : template <size_t Dim> 21 : class MortarData; 22 : template <size_t Dim> 23 : class MortarDataHolder; 24 : template <size_t Dim> 25 : class MortarInfo; 26 : } // namespace evolution::dg 27 : class TimeStepId; 28 : namespace TimeSteppers { 29 : template <typename LocalData, typename RemoteData, 30 : typename UntypedCouplingResult> 31 : class BoundaryHistory; 32 : } // namespace TimeSteppers 33 : /// \endcond 34 : 35 : /// %Tags used for DG evolution scheme. 36 : namespace evolution::dg::Tags { 37 : /// Data on mortars, indexed by (Direction, ElementId) pairs 38 : /// 39 : /// The `Dim` is the volume dimension, not the face dimension. 40 : template <size_t Dim> 41 1 : struct MortarData : db::SimpleTag { 42 0 : using type = DirectionalIdMap<Dim, evolution::dg::MortarDataHolder<Dim>>; 43 : }; 44 : 45 : /// History of the data on mortars, indexed by (Direction, ElementId) pairs, and 46 : /// used by the linear multistep local time stepping code. 47 : /// 48 : /// The `Dim` is the volume dimension, not the face dimension. 49 : template <size_t Dim> 50 1 : struct MortarDataHistory : db::SimpleTag { 51 0 : using type = 52 : DirectionalIdMap<Dim, TimeSteppers::BoundaryHistory< 53 : ::evolution::dg::MortarData<Dim>, 54 : ::evolution::dg::MortarData<Dim>, DataVector>>; 55 : }; 56 : 57 : /// Mesh on the mortars, indexed by (Direction, ElementId) pairs 58 : /// 59 : /// The `Dim` is the volume dimension, not the face dimension. 60 : template <size_t Dim> 61 1 : struct MortarMesh : db::SimpleTag { 62 0 : using type = DirectionalIdMap<Dim, Mesh<Dim - 1>>; 63 : }; 64 : 65 : /// The ::evolution::dg::MortarInfo for each mortar 66 : /// 67 : /// The `Dim` is the volume dimension, not the face dimension. 68 : template <size_t Dim> 69 1 : struct MortarInfo : db::SimpleTag { 70 0 : using type = DirectionalIdMap<Dim, ::evolution::dg::MortarInfo<Dim>>; 71 : }; 72 : 73 : /// The next temporal id at which to receive data on the specified mortar. 74 : /// 75 : /// The `Dim` is the volume dimension, not the face dimension. 76 : template <size_t Dim> 77 1 : struct MortarNextTemporalId : db::SimpleTag { 78 0 : using type = DirectionalIdMap<Dim, TimeStepId>; 79 : }; 80 : 81 : /// \brief The BoundaryMessage received from the inbox 82 : /// 83 : /// We must store the `std::unique_ptr` in the DataBox so the memory persists in 84 : /// case data was sent from another node 85 : /// \tparam Dim The volume dimension, not the face dimension 86 : template <size_t Dim> 87 1 : struct BoundaryMessageFromInbox : db::SimpleTag { 88 0 : using type = DirectionalIdMap<Dim, std::unique_ptr<BoundaryMessage<Dim>>>; 89 : }; 90 : } // namespace evolution::dg::Tags