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
|