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 <optional>
8 :
9 : #include "DataStructures/DataBox/PrefixHelpers.hpp"
10 : #include "DataStructures/DataBox/Prefixes.hpp"
11 : #include "DataStructures/DataBox/Tag.hpp"
12 : #include "DataStructures/Tensor/TypeAliases.hpp"
13 : #include "DataStructures/Variables.hpp"
14 : #include "Utilities/TMPL.hpp"
15 :
16 : namespace evolution::dg::subcell::Tags {
17 : /// \brief Holds the cell-centered fluxes on the subcell mesh.
18 : ///
19 : /// These are only needed when using high-order FD methods and when we are
20 : /// actively doing FD. If either of these conditions isn't met, the value is
21 : /// `std::nullopt`.
22 : ///
23 : /// The cell-centered fluxes are stored in the DataBox so they can be computed
24 : /// and sent to neighbor elements without having to be recomputed after
25 : /// receiving neighbor data. This means we maintain a single-send algorithm
26 : /// despite going to high-order, with no additional FLOP overhead. We do,
27 : /// however, have the memory overhead of the cell-centered fluxes.
28 : ///
29 : /// \note The `TagsList` is a list of the variables, not the fluxes. They are
30 : /// wrapped in the `::Tags::Flux` prefix.
31 : template <typename TagsList, size_t Dim, typename Fr = Frame::Inertial>
32 1 : struct CellCenteredFlux : db::SimpleTag {
33 0 : using type = std::optional<Variables<
34 : db::wrap_tags_in<::Tags::Flux, TagsList, tmpl::size_t<Dim>, Fr>>>;
35 : };
36 : } // namespace evolution::dg::subcell::Tags
|