SpECTRE Documentation Coverage Report
Current view: top level - DataStructures/Tensor/EagerMath - OrthonormalOneform.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 80.0 % 5 4
Test Date: 2026-10-22 17:29:42
Legend: Lines:     hit not hit

            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              : 
      10              : /// \cond
      11              : namespace gsl {
      12              : template <typename>
      13              : struct not_null;
      14              : }  // namespace gsl
      15              : /// \endcond
      16              : 
      17              : /// @{
      18              : /*!
      19              :  * \ingroup TensorGroup
      20              :  *
      21              :  * \brief Compute a spatial one-form orthonormal to the given unit form
      22              :  *
      23              :  * Given a unit spatial one-form \f$s_i\f$, compute a new form \f$t_i\f$
      24              :  * which is orthonormal to \f$s_i\f$, in the sense that
      25              :  * \f$\gamma^{ij}s_i t_j = 0\f$, for the given inverse spatial metric
      26              :  * \f$\gamma^{ij}\f$. The normalization of \f$t_i\f$ is such that
      27              :  * \f$\gamma^{ij}t_it_j = 1\f$.
      28              :  *
      29              :  * \details The new form is obtained via Gram-Schmidt process, starting
      30              :  * from a form whose components are \f$t_i = \delta_i^I\f$, where \f$I\f$ is
      31              :  * the index of the component of \f$s_i\f$ with the smallest absolute value.
      32              :  */
      33              : template <typename DataType, size_t VolumeDim, typename Frame>
      34            1 : void orthonormal_oneform(
      35              :     gsl::not_null<tnsr::i<DataType, VolumeDim, Frame>*> orthonormal_form,
      36              :     const tnsr::i<DataType, VolumeDim, Frame>& unit_form,
      37              :     const tnsr::II<DataType, VolumeDim, Frame>& inv_spatial_metric);
      38              : 
      39              : template <typename DataType, size_t VolumeDim, typename Frame>
      40            1 : tnsr::i<DataType, VolumeDim, Frame> orthonormal_oneform(
      41              :     const tnsr::i<DataType, VolumeDim, Frame>& unit_form,
      42              :     const tnsr::II<DataType, VolumeDim, Frame>& inv_spatial_metric);
      43              : /// @}
      44              : 
      45              : /// @{
      46              : /*!
      47              :  * \ingroup TensorGroup
      48              :  *
      49              :  * \brief Compute a spatial one-form orthonormal to two given unit forms.
      50              :  *
      51              :  * Given a unit spatial one-form \f$s_i\f$ and another form \f$t_i\f$ that is
      52              :  * orthonormal to \f$s_i\f$, compute a new form \f$u_i\f$ which is orthonormal
      53              :  * to both \f$s_i\f$ and \f$t_i\f$, in the sense that
      54              :  * \f$\gamma^{ij}s_i u_j = \gamma^{ij}t_i u_j = 0\f$, for the given
      55              :  * inverse spatial metric \f$\gamma^{ij}\f$. The normalization of \f$u_i\f$
      56              :  * is such that \f$\gamma^{ij}u_iu_j = 1\f$.
      57              :  *
      58              :  * \details The new form is obtained by taking the covariant cross product
      59              :  * of \f$s_i\f$ and \f$ t_i\f$, for which the spatial metric as well as
      60              :  * its determinant must be provided.
      61              :  */
      62              : template <typename DataType, typename Frame>
      63            1 : void orthonormal_oneform(
      64              :     gsl::not_null<tnsr::i<DataType, 3, Frame>*> orthonormal_form,
      65              :     const tnsr::i<DataType, 3, Frame>& first_unit_form,
      66              :     const tnsr::i<DataType, 3, Frame>& second_unit_form,
      67              :     const tnsr::ii<DataType, 3, Frame>& spatial_metric,
      68              :     const Scalar<DataType>& det_spatial_metric);
      69              : 
      70              : template <typename DataType, typename Frame>
      71            1 : tnsr::i<DataType, 3, Frame> orthonormal_oneform(
      72              :     const tnsr::i<DataType, 3, Frame>& first_unit_form,
      73              :     const tnsr::i<DataType, 3, Frame>& second_unit_form,
      74              :     const tnsr::ii<DataType, 3, Frame>& spatial_metric,
      75              :     const Scalar<DataType>& det_spatial_metric);
      76              : /// @}
        

Generated by: LCOV version 2.0-1