Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "DataStructures/DataVector.hpp"
7 : #include "DataStructures/Tensor/Tensor.hpp"
8 : #include "Utilities/Gsl.hpp"
9 :
10 : namespace Xcts {
11 :
12 : /// @{
13 : /*!
14 : * \brief Surface integrand for the ADM mass calculation.
15 : *
16 : * We define the ADM mass integral as (see Eq. 3.139 in \cite BaumgarteShapiro):
17 : *
18 : * \begin{equation}
19 : * M_\text{ADM} = \frac{1}{16\pi}
20 : * \oint_{S_\infty} \Big(
21 : * \bar\gamma^{jk} \bar\Gamma^i_{jk}
22 : * - \bar\gamma^{ij} \bar\Gamma_{j}
23 : * - 8 \bar\gamma^{ij} \partial_j \psi
24 : * \Big) d\bar{S}_i.
25 : * \end{equation}
26 : *
27 : * \note We don't use the other versions presented in \cite BaumgarteShapiro of
28 : * this integral because they make assumptions like $\bar\gamma = 1$,
29 : * $\bar\Gamma^i_{ij} = 0$ and faster fall-off of the conformal metric.
30 : *
31 : * \note For consistency with `adm_mass_volume_integrand`, this integrand needs
32 : * to be contracted with the conformal face normal and integrated with the
33 : * conformal area element.
34 : *
35 : * \param result output pointer
36 : * \param deriv_conformal_factor the gradient of the conformal factor
37 : * $\partial_i \psi$
38 : * \param inv_conformal_metric the inverse conformal metric $\bar\gamma^{ij}$
39 : * \param conformal_christoffel_second_kind the conformal christoffel symbol
40 : * $\bar\Gamma^i_{jk}$
41 : * \param conformal_christoffel_contracted the conformal christoffel symbol
42 : * contracted in its first two indices $\bar\Gamma_{i} = \bar\Gamma^j_{ij}$
43 : */
44 1 : void adm_mass_surface_integrand(
45 : gsl::not_null<tnsr::I<DataVector, 3>*> result,
46 : const tnsr::i<DataVector, 3>& deriv_conformal_factor,
47 : const tnsr::II<DataVector, 3>& inv_conformal_metric,
48 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind,
49 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted);
50 :
51 : /// Return-by-value overload
52 1 : tnsr::I<DataVector, 3> adm_mass_surface_integrand(
53 : const tnsr::i<DataVector, 3>& deriv_conformal_factor,
54 : const tnsr::II<DataVector, 3>& inv_conformal_metric,
55 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind,
56 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted);
57 : /// @}
58 :
59 : /// @{
60 : /*!
61 : * \brief Volume integrand for the ADM mass calculation.
62 : *
63 : * We cast the ADM mass as an infinite volume integral by applying Gauss' law on
64 : * the surface integral defined in `adm_mass_surface_integrand`:
65 : *
66 : * \begin{equation}
67 : * M_\text{ADM} = \frac{1}{16\pi}
68 : * \int_{V_\infty} \Big(
69 : * \partial_i \bar\gamma^{jk} \bar\Gamma^i_{jk}
70 : * + \bar\gamma^{jk} \partial_i \bar\Gamma^i_{jk}
71 : * + \bar\Gamma_l \bar\gamma^{jk} \bar\Gamma^l_{jk}
72 : * - \partial_i \bar\gamma^{ij} \bar\Gamma_j
73 : * - \bar\gamma^{ij} \partial_i \bar\Gamma_j
74 : * - \bar\Gamma_l \bar\gamma^{lj} \bar\Gamma_j
75 : * - 8 \bar D^2 \psi
76 : * \Big) d\bar{V},
77 : * \end{equation}
78 : *
79 : * where we can use the Hamiltonian constraint (Eq. 3.37 in
80 : * \cite BaumgarteShapiro) to replace $8 \bar D^2 \psi$ with
81 : *
82 : * \begin{equation}
83 : * 8 \bar D^2 \psi = \psi \bar R + \frac{2}{3} \psi^5 K^2
84 : * - \frac{1}{4} \psi^5 \frac{1}{\alpha^2}
85 : * \Big[ (\bar L \beta)_{ij} - \bar u_{ij} \Big]
86 : * \Big[ (\bar L \beta)^{ij} - \bar u^{ij} \Big]
87 : * - 16\pi \psi^5 \rho.
88 : * \end{equation}
89 : *
90 : * \note This is similar to Eq. 3.149 in \cite BaumgarteShapiro, except that
91 : * here we don't assume $\bar\gamma = 1$.
92 : *
93 : * \note For consistency with `adm_mass_surface_integrand`, this integrand needs
94 : * to be integrated with the conformal volume element.
95 : *
96 : * \param result output pointer
97 : * \param conformal_factor the conformal factor
98 : * \param conformal_ricci_scalar the conformal Ricci scalar $\bar R$
99 : * \param trace_extrinsic_curvature the extrinsic curvature trace $K$
100 : * \param longitudinal_shift_minus_dt_conformal_metric_over_lapse_square the
101 : * quantity computed in
102 : * `Xcts::Tags::LongitudinalShiftMinusDtConformalMetricOverLapseSquare`
103 : * \param energy_density the energy density $\rho$
104 : * \param inv_conformal_metric the inverse conformal metric $\bar\gamma^{ij}$
105 : * \param deriv_inv_conformal_metric the gradient of the inverse conformal
106 : * metric $\partial_i \bar\gamma^{jk}$
107 : * \param conformal_christoffel_second_kind the conformal christoffel symbol
108 : * $\bar\Gamma^i_{jk}$
109 : * \param conformal_christoffel_contracted the conformal christoffel symbol
110 : * contracted in its first two indices $\bar\Gamma_{i} = \bar\Gamma^j_{ij}$
111 : * \param deriv_conformal_christoffel_second_kind the gradient of the conformal
112 : * christoffel symbol $\partial_i \bar\Gamma^j_{kl}$
113 : */
114 1 : void adm_mass_volume_integrand(
115 : gsl::not_null<Scalar<DataVector>*> result,
116 : const Scalar<DataVector>& conformal_factor,
117 : const Scalar<DataVector>& conformal_ricci_scalar,
118 : const Scalar<DataVector>& trace_extrinsic_curvature,
119 : const Scalar<DataVector>&
120 : longitudinal_shift_minus_dt_conformal_metric_over_lapse_square,
121 : const Scalar<DataVector>& energy_density,
122 : const tnsr::II<DataVector, 3>& inv_conformal_metric,
123 : const tnsr::iJK<DataVector, 3>& deriv_inv_conformal_metric,
124 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind,
125 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted,
126 : const tnsr::iJkk<DataVector, 3>& deriv_conformal_christoffel_second_kind);
127 :
128 : /// Return-by-value overload
129 1 : Scalar<DataVector> adm_mass_volume_integrand(
130 : const Scalar<DataVector>& conformal_factor,
131 : const Scalar<DataVector>& conformal_ricci_scalar,
132 : const Scalar<DataVector>& trace_extrinsic_curvature,
133 : const Scalar<DataVector>&
134 : longitudinal_shift_minus_dt_conformal_metric_over_lapse_square,
135 : const Scalar<DataVector>& energy_density,
136 : const tnsr::II<DataVector, 3>& inv_conformal_metric,
137 : const tnsr::iJK<DataVector, 3>& deriv_inv_conformal_metric,
138 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind,
139 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted,
140 : const tnsr::iJkk<DataVector, 3>& deriv_conformal_christoffel_second_kind);
141 : /// @}
142 :
143 : } // namespace Xcts
|