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/Tensor/Tensor.hpp"
7 : #include "Utilities/Gsl.hpp"
8 :
9 : namespace ScalarTensor::sgb {
10 : /// @{
11 : /*!
12 : * \brief Computes the projection of the second covariant derivative of the
13 : * coupling function onto the normal vector.
14 : *
15 : * \details Computes the term
16 : * \begin{equation}
17 : * n^a n^b \nabla_a\nabla_b F[\Psi]
18 : * = \frac{\delta^2 F[\Psi]}{\delta \Psi^2} \Pi^2
19 : * + \frac{\delta F[\Psi]}{\delta \Psi} n^a n^b \nabla_a \nabla_b \Psi,
20 : * \end{equation}
21 : * where $\Psi$ is the scalar field, $\Pi$ is its conjugate momentum, $F[\Psi]$
22 : * is the coupling function and $n^a$ is the unit vector normal to
23 : * the spatial hypersurfaces.
24 : */
25 : template <typename DataType>
26 1 : void DDCoupling_normal_normal_projection(
27 : gsl::not_null<Scalar<DataType>*> DDCoupling_normal_normal_result,
28 : const Scalar<DataType>& coupling_prime,
29 : const Scalar<DataType>& coupling_prime_prime,
30 : const Scalar<DataType>& pi_scalar,
31 : const Scalar<DataType>& normal_normal_DD_scalar);
32 :
33 : template <typename DataType>
34 1 : Scalar<DataType> DDCoupling_normal_normal_projection(
35 : const Scalar<DataType>& coupling_prime,
36 : const Scalar<DataType>& coupling_prime_prime,
37 : const Scalar<DataType>& pi_scalar,
38 : const Scalar<DataType>& normal_normal_DD_scalar);
39 : /// @}
40 :
41 : /// @{
42 : /*!
43 : * \brief Computes the mixed projection of the second covariant derivative of
44 : * the coupling function.
45 : *
46 : * \details Computes the term
47 : * \begin{equation}
48 : * \gamma^a_i n^b \nabla_a \nabla_b F[\Psi]
49 : * = - \frac{\delta^2 F[\Psi]}{\delta \Psi^2} \Pi \partial_i \Psi
50 : * + \frac{\delta F[\Psi]}{\delta \Psi}
51 : * \gamma^a_i n^b \nabla_a \nabla_b \Psi,
52 : * \end{equation}
53 : * where $\Psi$ is the scalar field, $\Pi$ is its conjugate momentum and
54 : * $F[\Psi]$ is the coupling function; $n^a$ is the unit vector normal to the
55 : * spatial hypersurfaces and $\gamma^a_b = \delta^a_b + n^a n_b$ is the
56 : * projection operator onto them.
57 : */
58 : template <typename DataType, typename Frame>
59 1 : void DDCoupling_normal_spatial_projection(
60 : gsl::not_null<tnsr::i<DataType, 3, Frame>*>
61 : DDCoupling_normal_spatial_result,
62 : const Scalar<DataType>& coupling_prime,
63 : const Scalar<DataType>& coupling_prime_prime,
64 : const Scalar<DataType>& pi_scalar,
65 : const tnsr::i<DataType, 3, Frame>& d_scalar_field,
66 : const tnsr::i<DataType, 3, Frame>& normal_spatial_DD_scalar);
67 :
68 : template <typename DataType, typename Frame>
69 1 : tnsr::i<DataType, 3, Frame> DDCoupling_normal_spatial_projection(
70 : const Scalar<DataType>& coupling_prime,
71 : const Scalar<DataType>& coupling_prime_prime,
72 : const Scalar<DataType>& pi_scalar,
73 : const tnsr::i<DataType, 3, Frame>& d_scalar_field,
74 : const tnsr::i<DataType, 3, Frame>& normal_spatial_DD_scalar);
75 : /// @}
76 :
77 : /// @{
78 : /*!
79 : * \brief Computes the spatial projection of the second covariant derivative of
80 : * the coupling function.
81 : *
82 : * \details Computes the term
83 : * \begin{equation}
84 : * \gamma^a_i \gamma^b_j \nabla_a \nabla_b F[\Psi]
85 : * = \frac{\delta^2 F[\Psi]}{\delta \Psi^2} (\partial_i \Psi)
86 : * (\partial_j \Psi)
87 : * + \frac{\delta F[\Psi]}{\delta \Psi}
88 : * \gamma^a_i \gamma^b_j \nabla_a \nabla_b \Psi,
89 : * \end{equation}
90 : * where $\Psi$ is the scalar field, $\Pi$ is its conjugate momentum and
91 : * $F[\Psi]$ is the coupling function; $n^a$ is the unit vector normal to the
92 : * spatial hypersurfaces and $\gamma^a_b = \delta^a_b + n^a n_b$ is the
93 : * projection operator onto them.
94 : */
95 : template <typename DataType, typename Frame>
96 1 : void DDCoupling_spatial_spatial_projection(
97 : gsl::not_null<tnsr::ii<DataType, 3, Frame>*>
98 : DDCoupling_spatial_spatial_result,
99 : const Scalar<DataType>& coupling_prime,
100 : const Scalar<DataType>& coupling_prime_prime,
101 : const tnsr::i<DataType, 3, Frame>& d_scalar_field,
102 : const tnsr::ii<DataType, 3, Frame>& spatial_spatial_DD_scalar);
103 :
104 : template <typename DataType, typename Frame>
105 1 : tnsr::ii<DataType, 3, Frame> DDCoupling_spatial_spatial_projection(
106 : const Scalar<DataType>& coupling_prime,
107 : const Scalar<DataType>& coupling_prime_prime,
108 : const tnsr::i<DataType, 3, Frame>& d_scalar_field,
109 : const tnsr::ii<DataType, 3, Frame>& spatial_spatial_DD_scalar);
110 : /// @}
111 : } // namespace ScalarTensor::sgb
|