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
|