SpECTRE Documentation Coverage Report
Current view: top level - DataStructures/Tags - TempTensor.hpp Hit Total Coverage
Commit: 1f2210958b4f38fdc0400907ee7c6d5af5111418 Lines: 32 38 84.2 %
Date: 2025-12-05 05:03: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             : #include <string>
       8             : 
       9             : #include "DataStructures/DataBox/Tag.hpp"
      10             : #include "DataStructures/Tensor/TypeAliases.hpp"
      11             : 
      12             : /// \cond
      13             : class DataVector;
      14             : namespace Frame {
      15             : struct Inertial;
      16             : }  // namespace Frame
      17             : /// \endcond
      18             : 
      19             : /*!
      20             :  * \brief Contains objects related to Tags
      21             :  */
      22             : namespace Tags {
      23             : template <size_t N, typename T>
      24           0 : struct TempTensor : db::SimpleTag {
      25           0 :   using type = T;
      26           0 :   static std::string name() {
      27             :     return std::string("TempTensor") + std::to_string(N);
      28             :   }
      29             : };
      30             : 
      31             : /*!
      32             :  * \brief A struct that constructs a `TempTensor` given a label \p N and type
      33             :  * \p TensorType. Call with `make_temp_tensor<N>::apply<Type>`
      34             :  *
      35             :  * \see convert_to_temp_tensors
      36             :  */
      37             : template <size_t N>
      38           1 : struct make_temp_tensor {
      39             :   template <typename TensorType>
      40           0 :   struct apply {
      41           0 :     using type = ::Tags::TempTensor<N, TensorType>;
      42             :   };
      43             : };
      44             : 
      45             : /*!
      46             :  * \brief Takes a `tmpl::list` of `Tensor` types and a label \p N which is
      47             :  * applied to all `TempTensor`s in the resulting list.
      48             :  *
      49             :  * \see make_temp_tensor
      50             :  */
      51             : template <typename List, size_t N>
      52           1 : using convert_to_temp_tensors =
      53             :     tmpl::transform<List,
      54             :                     typename make_temp_tensor<N>::template apply<tmpl::_1>>;
      55             : 
      56             : /// @{
      57             : /// \ingroup PeoGroup
      58             : /// Variables Tags for temporary tensors inside a function.
      59             : template <size_t N, typename DataType = DataVector>
      60           1 : using TempScalar = TempTensor<N, Scalar<DataType>>;
      61             : 
      62             : // Rank 1
      63             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      64             :           typename DataType = DataVector>
      65           1 : using Tempa = TempTensor<N, tnsr::a<DataType, SpatialDim, Fr>>;
      66             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      67             :           typename DataType = DataVector>
      68           1 : using TempA = TempTensor<N, tnsr::A<DataType, SpatialDim, Fr>>;
      69             : 
      70             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      71             :           typename DataType = DataVector>
      72           1 : using Tempi = TempTensor<N, tnsr::i<DataType, SpatialDim, Fr>>;
      73             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      74             :           typename DataType = DataVector>
      75           1 : using TempI = TempTensor<N, tnsr::I<DataType, SpatialDim, Fr>>;
      76             : 
      77             : // Rank 2
      78             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      79             :           typename DataType = DataVector>
      80           1 : using Tempab = TempTensor<N, tnsr::ab<DataType, SpatialDim, Fr>>;
      81             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      82             :           typename DataType = DataVector>
      83           1 : using TempaB = TempTensor<N, tnsr::aB<DataType, SpatialDim, Fr>>;
      84             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      85             :           typename DataType = DataVector>
      86           1 : using TempAb = TempTensor<N, tnsr::Ab<DataType, SpatialDim, Fr>>;
      87             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      88             :           typename DataType = DataVector>
      89           1 : using TempAB = TempTensor<N, tnsr::AB<DataType, SpatialDim, Fr>>;
      90             : 
      91             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      92             :           typename DataType = DataVector>
      93           1 : using Tempij = TempTensor<N, tnsr::ij<DataType, SpatialDim, Fr>>;
      94             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      95             :           typename DataType = DataVector>
      96           1 : using TempiJ = TempTensor<N, tnsr::iJ<DataType, SpatialDim, Fr>>;
      97             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
      98             :           typename DataType = DataVector>
      99           1 : using TempIj = TempTensor<N, tnsr::Ij<DataType, SpatialDim, Fr>>;
     100             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     101             :           typename DataType = DataVector>
     102           1 : using TempIJ = TempTensor<N, tnsr::IJ<DataType, SpatialDim, Fr>>;
     103             : 
     104             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     105             :           typename DataType = DataVector>
     106           1 : using Tempia = TempTensor<N, tnsr::ia<DataType, SpatialDim, Fr>>;
     107             : 
     108             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     109             :           typename DataType = DataVector>
     110           1 : using Tempaa = TempTensor<N, tnsr::aa<DataType, SpatialDim, Fr>>;
     111             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     112             :           typename DataType = DataVector>
     113           1 : using TempAA = TempTensor<N, tnsr::AA<DataType, SpatialDim, Fr>>;
     114             : 
     115             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     116             :           typename DataType = DataVector>
     117           1 : using Tempii = TempTensor<N, tnsr::ii<DataType, SpatialDim, Fr>>;
     118             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     119             :           typename DataType = DataVector>
     120           1 : using TempII = TempTensor<N, tnsr::II<DataType, SpatialDim, Fr>>;
     121             : 
     122             : // Rank 3
     123             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     124             :           typename DataType = DataVector>
     125           1 : using Tempijj = TempTensor<N, tnsr::ijj<DataType, SpatialDim, Fr>>;
     126             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     127             :           typename DataType = DataVector>
     128           1 : using TempIjj = TempTensor<N, tnsr::Ijj<DataType, SpatialDim, Fr>>;
     129             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     130             :           typename DataType = DataVector>
     131           1 : using Tempijk = TempTensor<N, tnsr::ijk<DataType, SpatialDim, Fr>>;
     132             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     133             :           typename DataType = DataVector>
     134           1 : using TempiJk = TempTensor<N, tnsr::iJk<DataType, SpatialDim, Fr>>;
     135             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     136             :           typename DataType = DataVector>
     137           1 : using TempijK = TempTensor<N, tnsr::ijK<DataType, SpatialDim, Fr>>;
     138             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     139             :           typename DataType = DataVector>
     140           1 : using Tempiii = TempTensor<N, tnsr::iii<DataType, SpatialDim, Fr>>;
     141             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     142             :           typename DataType = DataVector>
     143           1 : using Tempiaa = TempTensor<N, tnsr::iaa<DataType, SpatialDim, Fr>>;
     144             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     145             :           typename DataType = DataVector>
     146           1 : using TempIaa = TempTensor<N, tnsr::Iaa<DataType, SpatialDim, Fr>>;
     147             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     148             :           typename DataType = DataVector>
     149           1 : using TempiaB = TempTensor<N, tnsr::iaB<DataType, SpatialDim, Fr>>;
     150             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     151             :           typename DataType = DataVector>
     152           1 : using Tempabb = TempTensor<N, tnsr::abb<DataType, SpatialDim, Fr>>;
     153             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     154             :           typename DataType = DataVector>
     155           1 : using TempabC = TempTensor<N, tnsr::abC<DataType, SpatialDim, Fr>>;
     156             : 
     157             : // Rank 4
     158             : template <size_t N, size_t SpatialDim, typename Fr = Frame::Inertial,
     159             :           typename DataType = DataVector>
     160           1 : using Tempijaa = TempTensor<N, tnsr::ijaa<DataType, SpatialDim, Fr>>;
     161             : /// @}
     162             : }  // namespace Tags

Generated by: LCOV version 1.14