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 conformal spatial christoffel symbols of the second kind.
15 : *
16 : * \details Computes the christoffel symbols as:
17 : * \f{align}
18 : * \tilde{\Gamma}^k_{ij} &=
19 : * \tilde{\gamma}^{kl} (D_{ijl} + D_{jil} - D_{lij})
20 : * \f}
21 : * where \f$\tilde{\gamma}^{ij}\f$ and \f$D_{ijk}\f$ are the inverse conformal
22 : * spatial metric and the CCZ4 auxiliary variable defined by
23 : * `Ccz4::Tags::InverseConformalMetric` and `Ccz4::Tags::FieldD`, respectively.
24 : */
25 : template <typename DataType, size_t Dim, typename Frame>
26 1 : void conformal_christoffel_second_kind(
27 : const gsl::not_null<tnsr::Ijj<DataType, Dim, Frame>*> result,
28 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
29 : const tnsr::ijj<DataType, Dim, Frame>& field_d);
30 :
31 : template <typename DataType, size_t Dim, typename Frame>
32 1 : tnsr::Ijj<DataType, Dim, Frame> conformal_christoffel_second_kind(
33 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
34 : const tnsr::ijj<DataType, Dim, Frame>& field_d);
35 : /// @}
36 :
37 : /// @{
38 : /*!
39 : * \brief Computes the spatial christoffel symbols of the second kind.
40 : *
41 : * \details Computes the christoffel symbols as:
42 : * \f{align}
43 : * \Gamma^k_{ij} &= \tilde{\Gamma}^k_{ij} -
44 : * \tilde{\gamma}^{kl} (\tilde{\gamma}_{jl} P_i +
45 : * \tilde{\gamma}_{il} P_j -
46 : * \tilde{\gamma}_{ij} P_l)
47 : * \f}
48 : * where \f$\tilde{\gamma}^{ij}\f$, \f$\tilde{\gamma}_{ij}\f$,
49 : * \f$\tilde{\Gamma}^k_{ij}\f$, and \f$P_i\f$ are the conformal spatial metric,
50 : * the inverse conformal spatial metric, the conformal spatial christoffel
51 : * symbols of the second kind, and the CCZ4 auxiliary variable defined by
52 : * `Ccz4::Tags::ConformalMetric`, `Ccz4::Tags::InverseConformalMetric`,
53 : * `Ccz4::Tags::ConformalChristoffelSecondKind`, and `Ccz4::Tags::FieldP`,
54 : * respectively.
55 : */
56 : template <typename DataType, size_t Dim, typename Frame>
57 1 : void christoffel_second_kind(
58 : const gsl::not_null<tnsr::Ijj<DataType, Dim, Frame>*> result,
59 : const tnsr::ii<DataType, Dim, Frame>& conformal_spatial_metric,
60 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
61 : const tnsr::i<DataType, Dim, Frame>& field_p,
62 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind);
63 :
64 : template <typename DataType, size_t Dim, typename Frame>
65 1 : tnsr::Ijj<DataType, Dim, Frame> christoffel_second_kind(
66 : const tnsr::ii<DataType, Dim, Frame>& conformal_spatial_metric,
67 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
68 : const tnsr::i<DataType, Dim, Frame>& field_p,
69 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind);
70 : /// @}
71 :
72 : /// @{
73 : /*!
74 : * \brief Computes the contraction of the conformal spatial Christoffel symbols
75 : * of the second kind.
76 : *
77 : * \details Computes the contraction as:
78 : *
79 : * \f{align}
80 : * \tilde{\Gamma}^i &= \tilde{\gamma}^{jl} \tilde{\Gamma}^i_{jl}
81 : * \f}
82 : *
83 : * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
84 : * defined by `Ccz4::Tags::InverseConformalMetric` and
85 : * \f$\tilde{\Gamma}^k_{ij}\f$ is the conformal spatial Christoffel symbols of
86 : * the second kind defined by `Ccz4::Tags::ConformalChristoffelSecondKind`.
87 : */
88 : template <typename DataType, size_t Dim, typename Frame>
89 1 : void contracted_conformal_christoffel_second_kind(
90 : const gsl::not_null<tnsr::I<DataType, Dim, Frame>*> result,
91 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
92 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind);
93 :
94 : template <typename DataType, size_t Dim, typename Frame>
95 1 : tnsr::I<DataType, Dim, Frame> contracted_conformal_christoffel_second_kind(
96 : const tnsr::II<DataType, Dim, Frame>& inverse_conformal_spatial_metric,
97 : const tnsr::Ijj<DataType, Dim, Frame>& conformal_christoffel_second_kind);
98 : /// @}
99 : } // namespace Ccz4
|