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 : /// \ingroup SurfacesGroup 19 : /// \brief Computes inverse 2-metric \f$g^{ij}-S^i S^j\f$ of a Strahlkorper. 20 : /// 21 : /// \details See Eqs. (1--9) of \cite Baumgarte1996hh. 22 : /// Here \f$S^i\f$ is the (normalized) unit vector to the surface, 23 : /// and \f$g^{ij}\f$ is the 3-metric. This object is expressed in the 24 : /// usual 3-d Cartesian basis, so it is written as a 3-dimensional tensor. 25 : /// But because it is orthogonal to \f$S_i\f$, it has only 3 independent 26 : /// degrees of freedom, and could be expressed as a 2-d tensor with an 27 : /// appropriate choice of basis. The input argument `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 : template <typename Frame> 30 1 : void inverse_surface_metric( 31 : gsl::not_null<tnsr::II<DataVector, 3, Frame>*> result, 32 : const tnsr::I<DataVector, 3, Frame>& unit_normal_vector, 33 : const tnsr::II<DataVector, 3, Frame>& upper_spatial_metric); 34 : 35 : template <typename Frame> 36 1 : tnsr::II<DataVector, 3, Frame> inverse_surface_metric( 37 : const tnsr::I<DataVector, 3, Frame>& unit_normal_vector, 38 : const tnsr::II<DataVector, 3, Frame>& upper_spatial_metric); 39 : /// @} 40 : } // namespace gr::surfaces