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
|