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 :
8 : #include "DataStructures/DataBox/Tag.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "Evolution/Systems/Ccz4/TagsDeclarations.hpp"
11 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
12 :
13 : namespace Ccz4 {
14 : namespace Tags {
15 : /*!
16 : * \brief The CCZ4 temporary expression
17 : * \f$\hat{\Gamma}^i - \tilde{\Gamma}^i\f$
18 : *
19 : * \details We define:
20 : *
21 : * \f{align}
22 : * \hat{\Gamma}^i - \tilde{\Gamma}^i &= 2 \tilde{\gamma}^{ij} Z_j
23 : * \f}
24 : *
25 : * where \f$\hat{\Gamma}^{i}\f$ is the CCZ4 evolved variable defined by
26 : * `Ccz4::Tags::GammaHat`, \f$\tilde{\Gamma}^{i}\f$ is the contraction of the
27 : * conformal spatial Christoffel symbols of the second kind defined by
28 : * `Ccz4::Tags::ContractedConformalChristoffelSecondKind`,
29 : * \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric defined by
30 : * `Ccz4::Tags::InverseConformalMetric`, and \f$Z_i\f$ is the spatial part of
31 : * the Z4 constraint defined by `Ccz4::Tags::SpatialZ4Constraint`.
32 : */
33 : template <typename DataType, size_t Dim, typename Frame>
34 1 : struct GammaHatMinusContractedConformalChristoffel : db::SimpleTag {
35 0 : using type = tnsr::I<DataType, Dim, Frame>;
36 : };
37 :
38 : /*!
39 : * \brief The CCZ4 temporary expression \f$K - 2 \Theta c\f$
40 : *
41 : * \details Here, \f$K\f$ is the trace of the extrinsic curvature defined by
42 : * `gr::Tags::TraceExtrinsicCurvature`, \f$\Theta\f$ is the projection of the Z4
43 : * four-vector along the normal direction, and \f$c\f$ controls whether to
44 : * include algebraic source terms proportional to \f$\Theta\f$.
45 : */
46 : template <typename DataType>
47 1 : struct KMinus2ThetaC : db::SimpleTag {
48 0 : using type = Scalar<DataType>;
49 : };
50 :
51 : /*!
52 : * \brief The CCZ4 temporary expression \f$K - K_0 - 2 \Theta c\f$
53 : *
54 : * \details Here, \f$K\f$ is the trace of the extrinsic curvature defined by
55 : * `gr::Tags::TraceExtrinsicCurvature`, \f$K_0\f$ is the initial time derivative
56 : * of the lapse, \f$\Theta\f$ is the projection of the Z4 four-vector along the
57 : * normal direction, and \f$c\f$ controls whether to include algebraic source
58 : * terms proportional to \f$\Theta\f$.
59 : */
60 : template <typename DataType>
61 1 : struct KMinusK0Minus2ThetaC : db::SimpleTag {
62 0 : using type = Scalar<DataType>;
63 : };
64 :
65 : /*!
66 : * \brief The CCZ4 temporary expression \f$B_k{}^k\f$
67 : *
68 : * \details Here, \f$B_k{}^k\f$ is the contraction of the CCZ4 auxiliary
69 : * variable defined by `Ccz4::Tags::FieldB`.
70 : */
71 : template <typename DataType>
72 1 : struct ContractedFieldB : db::SimpleTag {
73 0 : using type = Scalar<DataType>;
74 : };
75 :
76 : /*!
77 : * \brief The CCZ4 temporary expression \f$\tilde{\gamma}_{ki} B_j{}^k\f$
78 : *
79 : * \details Here, \f$\tilde{\gamma}_{ij}\f$ is the conformal spatial metric
80 : * defined by `Ccz4::Tags::ConformalMetric` and \f$B_i{}^j\f$ is the CCZ4
81 : * auxiliary variable defined by `Ccz4::Tags::FieldB`.
82 : */
83 : template <typename DataType, size_t Dim, typename Frame>
84 1 : struct ConformalMetricTimesFieldB : db::SimpleTag {
85 0 : using type = tnsr::ij<DataType, Dim, Frame>;
86 : };
87 :
88 : /*!
89 : * \brief The CCZ4 temporary expression \f$\alpha (R + 2 \nabla_k Z^k)\f$
90 : *
91 : * \details Here, \f$\alpha\f$ is the lapse defined by `gr::Tags::Lapse` and
92 : * \f$(R + 2 \nabla_k Z^k)\f$ is the Ricci scalar plus twice the divergence of
93 : * the spatial Z4 constraint defined by
94 : * `Ccz4::Tags::RicciScalarPlusDivergenceZ4Constraint`.
95 : */
96 : template <typename DataType>
97 1 : struct LapseTimesRicciScalarPlus2DivergenceZ4Constraint : db::SimpleTag {
98 0 : using type = Scalar<DataType>;
99 : };
100 :
101 : /*!
102 : * \brief The CCZ4 temporary expression \f$\tilde{\gamma}_{ij} tr \tilde{A}\f$
103 : *
104 : * \details Here, \f$\tilde{\gamma}_{ij}\f$ is the conformal spatial metric
105 : * defined by `Ccz4::Tags::ConformalMetric` and \f$tr \tilde{A}\f$ is the trace
106 : * of the trace-free part of the extrinsic curvature defined by
107 : * `Ccz4::Tags::TraceATilde`.
108 : */
109 : template <typename DataType, size_t Dim, typename Frame>
110 1 : struct ConformalMetricTimesTraceATilde : db::SimpleTag {
111 0 : using type = tnsr::ii<DataType, Dim, Frame>;
112 : };
113 :
114 : /*!
115 : * \brief The CCZ4 temporary expression \f$\alpha \tilde{A}_{ij}\f$
116 : *
117 : * \details Here, \f$\alpha\f$ is the lapse defined by `gr::Tags::Lapse` and
118 : * \f$\tilde{A}_{ij}\f$ is the trace-free part of the extrinsic curvature
119 : * defined by `Ccz4::Tags::ATilde`.
120 : */
121 : template <typename DataType, size_t Dim, typename Frame>
122 1 : struct LapseTimesATilde : db::SimpleTag {
123 0 : using type = tnsr::ii<DataType, Dim, Frame>;
124 : };
125 :
126 : /*!
127 : * \brief The CCZ4 temporary expression \f$D_k{}^{nm} \tilde{A}_{nm}\f$
128 : *
129 : * \details Here, \f$D_k{}^{nm}\f$ is analytically negative one half the spatial
130 : * derivative of the inverse conformal spatial metric defined by
131 : * `Ccz4::Tags::FieldDUp` and \f$\tilde{A}_{nm}\f$ is the trace-free part of the
132 : * extrinsic curvature defined by `Ccz4::Tags::ATilde`.
133 : */
134 : template <typename DataType, size_t Dim, typename Frame>
135 1 : struct FieldDUpTimesATilde : db::SimpleTag {
136 0 : using type = tnsr::i<DataType, Dim, Frame>;
137 : };
138 :
139 : /*!
140 : * \brief The CCZ4 temporary expression \f$\alpha \partial_k \tilde{A}_{ij}\f$
141 : *
142 : * \details Here, \f$\alpha\f$ is the lapse defined by `gr::Tags::Lapse` and
143 : * \f$\tilde{A}_{ij}\f$ is the trace-free part of the extrinsic curvature
144 : * defined by `Ccz4::Tags::ATilde`, and \f$\partial_k \tilde{A}_{ij}\f$ is its
145 : * spatial derivative.
146 : */
147 : template <typename DataType, size_t Dim, typename Frame>
148 1 : struct LapseTimesDerivATilde : db::SimpleTag {
149 0 : using type = tnsr::ijj<DataType, Dim, Frame>;
150 : };
151 :
152 : /*!
153 : * \brief The CCZ4 temporary expression
154 : * \f$\tilde{\gamma}^{nm} \partial_k \tilde{A}_{nm}\f$
155 : *
156 : * \details Here, \f$\tilde{\gamma}^{nm}\f$ is the inverse conformal spatial
157 : * metric defined by `Ccz4::Tags::InverseConformalMetric`, \f$\tilde{A}_{ij}\f$
158 : * is the trace-free part of the extrinsic curvature defined by
159 : * `Ccz4::Tags::ATilde`, and \f$\partial_k \tilde{A}_{ij}\f$ is its spatial
160 : * derivative.
161 : */
162 : template <typename DataType, size_t Dim, typename Frame>
163 1 : struct InverseConformalMetricTimesDerivATilde : db::SimpleTag {
164 0 : using type = tnsr::i<DataType, Dim, Frame>;
165 : };
166 :
167 : /*!
168 : * \brief The CCZ4 temporary expression
169 : * \f$\tilde{A}_{ij} - \frac{1}{3} \tilde{\gamma}_{ij} tr \tilde{A}\f$
170 : *
171 : * \details Here, \f$\tilde{A}_{ij}\f$ is the trace-free part of the extrinsic
172 : * curvature defined by `Ccz4::Tags::ATilde`, \f$tr \tilde{A}\f$ is its trace
173 : * defined by `Ccz4::Tags::TraceATilde`, and \f$\tilde{\gamma}_{ij}\f$ is the
174 : * conformal spatial metric defined by `Ccz4::Tags::ConformalMetric`.
175 : */
176 : template <typename DataType, size_t Dim, typename Frame>
177 1 : struct ATildeMinusOneThirdConformalMetricTimesTraceATilde : db::SimpleTag {
178 0 : using type = tnsr::ii<DataType, Dim, Frame>;
179 : };
180 :
181 : /*!
182 : * \brief The CCZ4 temporary expression \f$\alpha A_k\f$
183 : *
184 : * \details Here, \f$\alpha\f$ is the lapse defined by `gr::Tags::Lapse` and
185 : * \f$A_k\f$ is the CCZ4 auxiliary variable defined by `Ccz4::Tags::FieldA`.
186 : */
187 : template <typename DataType, size_t Dim, typename Frame>
188 1 : struct LapseTimesFieldA : db::SimpleTag {
189 0 : using type = tnsr::i<DataType, Dim, Frame>;
190 : };
191 :
192 : /*!
193 : * \brief The CCZ4 temporary expression \f$\beta^k \partial_k \hat{\Gamma}^i\f$
194 : *
195 : * \details Here, \f$\beta^k\f$ is the shift defined by `gr::Tags::Shift`,
196 : * \f$\hat{\Gamma}^i\f$ is the CCZ4 evolved variable defined by
197 : * `Ccz4::Tags::GammaHat`, and \f$\partial_k \hat{\Gamma}^i\f$ is its spatial
198 : * derivative.
199 : */
200 : template <typename DataType, size_t Dim, typename Frame>
201 1 : struct ShiftTimesDerivGammaHat : db::SimpleTag {
202 0 : using type = tnsr::I<DataType, Dim, Frame>;
203 : };
204 :
205 : /*!
206 : * \brief The CCZ4 temporary expression \f$\tau^{-1} \tilde{\gamma}_{ij}\f$
207 : *
208 : * \details Here, \f$\tilde{\gamma}_{ij}\f$ is the conformal spatial metric
209 : * defined by `Ccz4::Tags::ConformalMetric` and \f$\tau\f$ is the relaxation
210 : * time to enforce the algebraic constraints on the determinant of the conformal
211 : * spatial metric and on the trace of the trace-free part of the extrinsic
212 : * curvature that is defined by `Ccz4::Tags::ATilde`.
213 : */
214 : template <typename DataType, size_t Dim, typename Frame>
215 1 : struct InverseTauTimesConformalMetric : db::SimpleTag {
216 0 : using type = tnsr::ii<DataType, Dim, Frame>;
217 : };
218 :
219 : /*!
220 : * \brief The CCZ4 temporary expression \f$\alpha g(\alpha)\f$
221 : *
222 : * \details Here, \f$\alpha\f$ is the lapse defined by `gr::Tags::Lapse` and
223 : * \f$g(\alpha)\f$ is a constant that controls the slicing conditions.
224 : * \f$g(\alpha) = 1\f$ leads to harmonic slicing and
225 : * \f$g(\alpha) = 2 / \alpha\f$ leads to 1 + log slicing.
226 : */
227 : template <typename DataType>
228 1 : struct LapseTimesSlicingCondition : db::SimpleTag {
229 0 : using type = Scalar<DataType>;
230 : };
231 : } // namespace Tags
232 : } // namespace Ccz4
|