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/TypeAliases.hpp"
7 :
8 : /// \cond
9 : class DataVector;
10 : namespace gsl {
11 : template <typename>
12 : struct not_null;
13 : } // namespace gsl
14 : /// \endcond
15 :
16 : namespace gr::surfaces {
17 : /// @{
18 : /*!
19 : * \ingroup SurfacesGroup
20 : * \brief Extrinsic curvature of a 2D `Strahlkorper` embedded in a 3D space.
21 : *
22 : * \details Implements Eq. (D.43) of Carroll's Spacetime and Geometry text.
23 : * Specifically,
24 : * \f$ K_{ij} = P^k_i P^l_j \nabla_{(k} S_{l)} \f$, where
25 : * \f$ P^k_i = \delta^k_i - S^k S_i \f$,
26 : * `grad_normal` is the quantity \f$ \nabla_k S_l \f$ returned by
27 : * `gr::surfaces::grad_unit_normal_one_form`, and `unit_normal_vector` is
28 : * \f$S^i = g^{ij} S_j\f$ where \f$S_j\f$ is the unit normal one form.
29 : * Not to be confused with the extrinsic curvature of a 3D spatial slice
30 : * embedded in 3+1 spacetime.
31 : * Because gr::surfaces::grad_unit_normal_one_form is symmetric, this
32 : * can be expanded into
33 : * \f$ K_{ij} = \nabla_{i}S_{j} - 2 S^k S_{(i}\nabla_{j)}S_k
34 : * + S_i S_j S^k S^l \nabla_{k} n_{l}\f$.
35 : */
36 : template <typename Frame>
37 1 : void extrinsic_curvature(
38 : gsl::not_null<tnsr::ii<DataVector, 3, Frame>*> result,
39 : const tnsr::ii<DataVector, 3, Frame>& grad_normal,
40 : const tnsr::i<DataVector, 3, Frame>& unit_normal_one_form,
41 : const tnsr::I<DataVector, 3, Frame>& unit_normal_vector);
42 :
43 : template <typename Frame>
44 1 : tnsr::ii<DataVector, 3, Frame> extrinsic_curvature(
45 : const tnsr::ii<DataVector, 3, Frame>& grad_normal,
46 : const tnsr::i<DataVector, 3, Frame>& unit_normal_one_form,
47 : const tnsr::I<DataVector, 3, Frame>& unit_normal_vector);
48 : /// @}
49 : } // namespace gr::surfaces
|