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/Tag.hpp" 10 : #include "DataStructures/Tensor/TypeAliases.hpp" 11 : #include "DataStructures/Variables.hpp" 12 : #include "Domain/Structure/Direction.hpp" 13 : #include "Domain/Structure/DirectionMap.hpp" 14 : #include "Utilities/TMPL.hpp" 15 : 16 : namespace evolution::dg::Tags { 17 : /// The magnitude of the unnormalized normal covector to the interface 18 1 : struct MagnitudeOfNormal : db::SimpleTag { 19 0 : using type = Scalar<DataVector>; 20 : }; 21 : 22 : /// The normal covector to the interface 23 : template <size_t Dim> 24 1 : struct NormalCovector : db::SimpleTag { 25 0 : using type = tnsr::i<DataVector, Dim, Frame::Inertial>; 26 : }; 27 : 28 : /// The normal covector and its magnitude for all internal faces of an element. 29 : /// 30 : /// The combined tag is used to make the allocations be in a Variables 31 : /// 32 : /// We use a `std::optional` to keep track of whether or not these values are 33 : /// up-to-date. 34 : template <size_t Dim> 35 1 : struct NormalCovectorAndMagnitude : db::SimpleTag { 36 0 : using type = DirectionMap< 37 : Dim, std::optional< 38 : Variables<tmpl::list<MagnitudeOfNormal, NormalCovector<Dim>>>>>; 39 : }; 40 : } // namespace evolution::dg::Tags