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