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/DataVector.hpp" 9 : #include "DataStructures/Tensor/Tensor.hpp" 10 : #include "Elliptic/Systems/Punctures/Tags.hpp" 11 : #include "Utilities/Gsl.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : 14 : namespace Punctures { 15 : 16 : /// @{ 17 : /*! 18 : * \brief The volume integrand for the ADM mass $M_\mathrm{ADM}$ 19 : * 20 : * The ADM mass for Punctures is (Eq. (12.56) in \cite BaumgarteShapiro) 21 : * 22 : * \begin{equation} 23 : * M_\mathrm{ADM} = \sum_I M_I + \frac{1}{2\pi} \int 24 : * \beta \left(\alpha \left(1 + u\right) + 1\right)^{-7} 25 : * \end{equation} 26 : * 27 : * \see Punctures 28 : */ 29 1 : void adm_mass_integrand(const gsl::not_null<Scalar<DataVector>*> result, 30 : const Scalar<DataVector>& field, 31 : const Scalar<DataVector>& alpha, 32 : const Scalar<DataVector>& beta); 33 : 34 1 : Scalar<DataVector> adm_mass_integrand(const Scalar<DataVector>& field, 35 : const Scalar<DataVector>& alpha, 36 : const Scalar<DataVector>& beta); 37 : /// @} 38 : 39 : namespace Tags { 40 : 41 : /// @{ 42 0 : struct AdmMassIntegrand : db::SimpleTag { 43 0 : using type = Scalar<DataVector>; 44 : }; 45 : 46 : /*! 47 : * \brief The volume integrand for the ADM mass $M_\mathrm{ADM}$ 48 : * 49 : * \see adm_mass_integrand 50 : */ 51 1 : struct AdmMassIntegrandCompute : AdmMassIntegrand, db::ComputeTag { 52 0 : using base = AdmMassIntegrand; 53 0 : using argument_tags = tmpl::list<Field, Alpha, Beta>; 54 0 : using return_type = Scalar<DataVector>; 55 0 : static constexpr auto function = 56 : static_cast<void (*)(gsl::not_null<Scalar<DataVector>*>, 57 : const Scalar<DataVector>&, const Scalar<DataVector>&, 58 : const Scalar<DataVector>&)>(&adm_mass_integrand); 59 : }; 60 : /// @} 61 : 62 : } // namespace Tags 63 : } // namespace Punctures