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_{ADM} 20 : * = \int_{S_\infty} \frac{1}{16\pi} ( 21 : * \bar\gamma^{jk} \bar\Gamma^i_{jk} 22 : * - \bar\gamma^{ij} \bar\Gamma_{j} 23 : * - 8 \bar\gamma^{ij} \partial_j \psi 24 : * ) d\bar{S}_i. 25 : * \end{equation} 26 : * 27 : * Note that we don't use the other versions presented in \cite BaumgarteShapiro 28 : * of this integral because they make assumptions like $\bar\gamma = 1$, 29 : * $\bar\Gamma^i_{ij} = 0$ and fast fall-off of the conformal metric. 30 : * 31 : * \param result output buffer for the surface integrand 32 : * \param deriv_conformal_factor the partial derivatives of the conformal factor 33 : * $\partial_i \psi$ 34 : * \param inv_conformal_metric the inverse conformal metric $\bar\gamma^{ij}$ 35 : * \param conformal_christoffel_second_kind the conformal christoffel symbol 36 : * $\bar\Gamma^i_{jk}$ 37 : * \param conformal_christoffel_contracted the conformal christoffel symbol 38 : * contracted in its first two indices $\bar\Gamma_{i} = \bar\Gamma^j_{ij}$ 39 : */ 40 1 : void adm_mass_surface_integrand( 41 : gsl::not_null<tnsr::I<DataVector, 3>*> result, 42 : const tnsr::i<DataVector, 3>& deriv_conformal_factor, 43 : const tnsr::II<DataVector, 3>& inv_conformal_metric, 44 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind, 45 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted); 46 : 47 : /// Return-by-value overload 48 1 : tnsr::I<DataVector, 3> adm_mass_surface_integrand( 49 : const tnsr::i<DataVector, 3>& deriv_conformal_factor, 50 : const tnsr::II<DataVector, 3>& inv_conformal_metric, 51 : const tnsr::Ijj<DataVector, 3>& conformal_christoffel_second_kind, 52 : const tnsr::i<DataVector, 3>& conformal_christoffel_contracted); 53 : /// @} 54 : 55 : } // namespace Xcts