SpECTRE Documentation Coverage Report
Current view: top level - DataStructures/Tensor/EagerMath - OrthonormalOneform.hpp Hit Total Coverage
Commit: d0fc80462417e83e5cddfa1b9901bb4a9b6af4d6 Lines: 4 5 80.0 %
Date: 2024-03-29 00:33:31
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 1.14