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