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
|