Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <array> 7 : #include <cstddef> 8 : 9 : #include "DataStructures/DataBox/Tag.hpp" 10 : #include "DataStructures/Tensor/TypeAliases.hpp" 11 : #include "DataStructures/Variables.hpp" 12 : #include "Evolution/Systems/SecondOrderScalarWave/TagsDeclarations.hpp" 13 : #include "Utilities/TMPL.hpp" 14 : 15 : class DataVector; 16 : 17 : namespace SecondOrderScalarWave::Tags { 18 : 19 : /*! 20 : * \brief The scalar field. 21 : */ 22 1 : struct Psi : db::SimpleTag { 23 0 : using type = Scalar<DataVector>; 24 : }; 25 : 26 : /*! 27 : * \brief The negative time derivative of the scalar field. 28 : * \details If \f$\Psi\f$ is the scalar field then 29 : * \f$\Pi = -\partial_t \Psi\f$. 30 : */ 31 1 : struct Pi : db::SimpleTag { 32 0 : using type = Scalar<DataVector>; 33 : }; 34 : 35 : /*! 36 : * \brief Auxiliary variable, the spatial derivative of the scalar field. 37 : * \details If \f$\Psi\f$ is the scalar field then 38 : * \f$\Phi_i = \partial_i \Psi\f$. 39 : */ 40 : template <size_t Dim> 41 1 : struct Phi : db::SimpleTag { 42 0 : using type = tnsr::i<DataVector, Dim, Frame::Inertial>; 43 : }; 44 : 45 : /// The contraction \f$n^i\Phi_i\f$ with the face normal. 46 1 : struct NormalDotPhi : db::SimpleTag { 47 0 : using type = Scalar<DataVector>; 48 : }; 49 : 50 : /// The scalar field multiplied by the face normal, \f$\Psi n_i\f$. 51 : template <size_t Dim> 52 1 : struct PsiTimesNormal : db::SimpleTag { 53 0 : using type = tnsr::i<DataVector, Dim, Frame::Inertial>; 54 : }; 55 : 56 : /// @{ 57 : /// \brief Tags corresponding to the characteristic fields of the second-order 58 : /// scalar-wave system. 59 : template <size_t Dim> 60 1 : struct VZero : db::SimpleTag { 61 0 : using type = tnsr::i<DataVector, Dim, Frame::Inertial>; 62 : }; 63 0 : struct VPlus : db::SimpleTag { 64 0 : using type = Scalar<DataVector>; 65 : }; 66 0 : struct VMinus : db::SimpleTag { 67 0 : using type = Scalar<DataVector>; 68 : }; 69 : /// @} 70 : 71 : /// The characteristic speeds corresponding, in order, to `VZero`, `VPlus`, and 72 : /// `VMinus`. 73 : template <size_t Dim> 74 1 : struct CharacteristicSpeeds : db::SimpleTag { 75 0 : using type = std::array<DataVector, 3>; 76 : }; 77 : 78 : /// The characteristic fields `VZero`, `VPlus`, and `VMinus` packaged together. 79 : template <size_t Dim> 80 1 : struct CharacteristicFields : db::SimpleTag { 81 0 : using type = Variables<tmpl::list<VZero<Dim>, VPlus, VMinus>>; 82 : }; 83 : 84 : /// The fields \f$(\Pi, \Phi_i)\f$ reconstructed from the 85 : /// characteristic fields. 86 : template <size_t Dim> 87 1 : struct FieldsFromInverseCharacteristicTransform : db::SimpleTag { 88 0 : using type = Variables<tmpl::list<Pi, Phi<Dim>>>; 89 : }; 90 : } // namespace SecondOrderScalarWave::Tags