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/Tensor/TypeAliases.hpp"
9 : #include "Utilities/Gsl.hpp"
10 :
11 : namespace Ccz4 {
12 : /// @{
13 : /*!
14 : * \brief Computes the spatial derivative of the conformal spatial christoffel
15 : * symbols of the second kind
16 : *
17 : * \details Computes the derivative as:
18 : * \f{align}
19 : * \partial_k \tilde{\Gamma}^m{}_{ij} &=
20 : * -2 D_k{}^{ml} (D_{ijl} + D_{jil} - D_{lij}) +
21 : * \tilde{\gamma}^{ml}(\partial_{(k} D_{i)jl} + \partial_{(k} D_{j)il} -
22 : * \partial_{(k} D_{l)ij})
23 : * \f}
24 : * where \f$\tilde{\gamma}^{ij}\f$, \f$D_{ijk}\f$, \f$\partial_l D_{ijk}\f$, and
25 : * \f$D_k{}^{ij}\f$ are the inverse conformal spatial metric defined by
26 : * `Ccz4::Tags::InverseConformalMetric`, the CCZ4 auxiliary variable defined by
27 : * `Ccz4::Tags::FieldD`, its spatial derivative, and the CCZ4 identity defined
28 : * by `Ccz4::Tags::FieldDUp`.
29 : */
30 : template <typename DataType, size_t Dim, typename Frame>
31 1 : void deriv_conformal_christoffel_second_kind(
32 : const gsl::not_null<tnsr::iJkk<DataType, Dim, Frame>*> result,
33 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
34 : const tnsr::ijj<DataType, Dim, Frame>& field_d,
35 : const tnsr::ijkk<DataType, Dim, Frame>& d_field_d,
36 : const tnsr::iJJ<DataType, Dim, Frame>& field_d_up);
37 :
38 : template <typename DataType, size_t Dim, typename Frame>
39 1 : tnsr::iJkk<DataType, Dim, Frame> deriv_conformal_christoffel_second_kind(
40 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
41 : const tnsr::ijj<DataType, Dim, Frame>& field_d,
42 : const tnsr::ijkk<DataType, Dim, Frame>& d_field_d,
43 : const tnsr::iJJ<DataType, Dim, Frame>& field_d_up);
44 : /// @}
45 :
46 : /// @{
47 : /*!
48 : * \brief Computes the spatial derivative of the contraction of the conformal
49 : * spatial Christoffel symbols of the second kind
50 : *
51 : * \details Computes the derivative as:
52 : *
53 : * \f{align}
54 : * \partial_k \tilde{\Gamma}^i &= -2 D_k{}^{jl} \tilde{\Gamma}^i_{jl} +
55 : * \tilde{\gamma}^{jl} \partial_k \tilde{\Gamma}^i_{jl}
56 : * \f}
57 : *
58 : * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
59 : * defined by `Ccz4::Tags::InverseConformalMetric`, \f$D_k{}^{ij}\f$ is the CCZ4
60 : * identity defined by `Ccz4::Tags::FieldDUp`, \f$\tilde{\Gamma}^k_{ij}\f$ is
61 : * the conformal spatial Christoffel symbols of the second kind defined by
62 : * `Ccz4::Tags::ConformalChristoffelSecondKind`, and
63 : * \f$\partial_k \tilde{\Gamma}^k_{ij}\f$ is its spatial derivative defined by
64 : * `Ccz4::Tags::DerivConformalChristoffelSecondKind`.
65 : */
66 : template <typename DataType, size_t Dim, typename Frame>
67 1 : void deriv_contracted_conformal_christoffel_second_kind(
68 : const gsl::not_null<tnsr::iJ<DataType, Dim, Frame>*> result,
69 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
70 : const tnsr::iJJ<DataType, Dim, Frame>& field_d_up,
71 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind,
72 : const tnsr::iJkk<DataType, Dim, Frame>&
73 : d_conformal_christoffel_second_kind);
74 :
75 : template <typename DataType, size_t Dim, typename Frame>
76 : tnsr::iJ<DataType, Dim, Frame>
77 1 : deriv_contracted_conformal_christoffel_second_kind(
78 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
79 : const tnsr::iJJ<DataType, Dim, Frame>& field_d_up,
80 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind,
81 : const tnsr::iJkk<DataType, Dim, Frame>&
82 : d_conformal_christoffel_second_kind);
83 : /// @}
84 : } // namespace Ccz4
|