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/DataBox/Tag.hpp"
7 : #include "DataStructures/Tensor/Tensor.hpp"
8 : #include "DataStructures/Tensor/TypeAliases.hpp"
9 : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp"
10 : #include "PointwiseFunctions/GeneralRelativity/Surfaces/TagsDeclarations.hpp"
11 : #include "Utilities/Gsl.hpp"
12 : #include "Utilities/TMPL.hpp"
13 :
14 : namespace ScalarTensor {
15 :
16 : /// @{
17 : /*!
18 : * \brief The scalar charge per unit solid angle.
19 : *
20 : * \details This function calculates the integrand of:
21 : * \f{align*}
22 : * q = - \dfrac{1}{4 \pi} \oint dA \Phi_i n^{i},
23 : * \f}
24 : * where \f$ n^{i} \f$ is the unit (outward) normal of the surface.
25 : *
26 : * For a spherically symmetric scalar, this value will coincide with the value
27 : * as extracted from the $r^{-1}$ decay in
28 : * \f[ \Psi \sim \phi_\infty + q / r + \cdots~. \f]
29 : */
30 1 : void scalar_charge_integrand(const gsl::not_null<Scalar<DataVector>*> result,
31 : const tnsr::i<DataVector, 3>& phi,
32 : const tnsr::I<DataVector, 3>& unit_normal_vector);
33 : /// @}
34 :
35 : } // namespace ScalarTensor
36 :
37 0 : namespace ScalarTensor::StrahlkorperScalar::Tags {
38 :
39 : /*!
40 : * \brief The scalar charge per unit area.
41 : *
42 : * \details This tag holds the integrand of:
43 : * \f{align*}
44 : * q = - \dfrac{1}{4 \pi} \oint dA \Phi_i n^{i},
45 : * \f}
46 : * where \f$ n^{i} \f$ is the unit (outward) normal of the surface.
47 : *
48 : * For a spherically symmetric scalar, this value will coincide with the value
49 : * as extracted from the $r^{-1}$ decay in
50 : * \f[ \Psi \sim \phi_\infty + q / r + \cdots~. \f]
51 : */
52 1 : struct ScalarChargeIntegrand : db::SimpleTag {
53 0 : using type = Scalar<DataVector>;
54 : };
55 :
56 : /*!
57 : * \brief Compute tag for the scalar charge per unit area.
58 : *
59 : * \see ScalarTensor::StrahlkorperScalar::Tags::ScalarChargeIntegrand
60 : */
61 1 : struct ScalarChargeIntegrandCompute : ScalarChargeIntegrand, db::ComputeTag {
62 0 : static constexpr size_t Dim = 3;
63 0 : using base = ScalarChargeIntegrand;
64 0 : static constexpr auto function = &ScalarTensor::scalar_charge_integrand;
65 0 : using argument_tags =
66 : tmpl::list<CurvedScalarWave::Tags::Phi<Dim>,
67 : ylm::Tags::UnitNormalVector<Frame::Inertial>>;
68 0 : using return_type = Scalar<DataVector>;
69 : };
70 :
71 : } // namespace ScalarTensor::StrahlkorperTags
|