SpECTRE Documentation Coverage Report
Current view: top level - Domain/CoordinateMaps - Identity.hpp Hit Total Coverage
Commit: 35a1e98cd3e4fdea528eb8100f99c2f707894fda Lines: 3 17 17.6 %
Date: 2024-04-19 00:10:48
Legend: Lines: hit not hit

          Line data    Source code
       1           1 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : /// \file
       5             : /// Defines the class Identity.
       6             : 
       7             : #pragma once
       8             : 
       9             : #include <array>
      10             : #include <cstddef>
      11             : #include <optional>
      12             : 
      13             : #include "DataStructures/Tensor/TypeAliases.hpp"
      14             : #include "Utilities/TypeTraits/RemoveReferenceWrapper.hpp"
      15             : 
      16             : /// \cond
      17             : namespace PUP {
      18             : class er;
      19             : }  // namespace PUP
      20             : /// \endcond
      21             : 
      22             : namespace domain {
      23             : namespace CoordinateMaps {
      24             : 
      25             : /// \ingroup CoordinateMapsGroup
      26             : /// Identity  map from \f$\xi \rightarrow x\f$.
      27             : template <size_t Dim>
      28           1 : class Identity {
      29             :  public:
      30           0 :   static constexpr size_t dim = Dim;
      31             : 
      32           0 :   Identity() = default;
      33           0 :   ~Identity() = default;
      34           0 :   Identity(const Identity&) = default;
      35           0 :   Identity(Identity&&) = default;  // NOLINT
      36           0 :   Identity& operator=(const Identity&) = default;
      37           0 :   Identity& operator=(Identity&&) = default;
      38             : 
      39             :   template <typename T>
      40           0 :   std::array<tt::remove_cvref_wrap_t<T>, Dim> operator()(
      41             :       const std::array<T, Dim>& source_coords) const;
      42             : 
      43             :   /// The inverse function is only callable with doubles because the inverse
      44             :   /// might fail if called for a point out of range, and it is unclear
      45             :   /// what should happen if the inverse were to succeed for some points in a
      46             :   /// DataVector but fail for other points.
      47           1 :   std::optional<std::array<double, Dim>> inverse(
      48             :       const std::array<double, Dim>& target_coords) const;
      49             : 
      50             :   template <typename T>
      51           0 :   tnsr::Ij<tt::remove_cvref_wrap_t<T>, Dim, Frame::NoFrame> jacobian(
      52             :       const std::array<T, Dim>& source_coords) const;
      53             : 
      54             :   template <typename T>
      55           0 :   tnsr::Ij<tt::remove_cvref_wrap_t<T>, Dim, Frame::NoFrame> inv_jacobian(
      56             :       const std::array<T, Dim>& source_coords) const;
      57             : 
      58             :   // NOLINTNEXTLINE(google-runtime-references)
      59           0 :   void pup(PUP::er& /*p*/) {}
      60             : 
      61           0 :   bool is_identity() const { return true; }
      62             : };
      63             : 
      64             : template <size_t Dim>
      65           0 : inline constexpr bool operator==(const CoordinateMaps::Identity<Dim>& /*lhs*/,
      66             :                                  const CoordinateMaps::Identity<Dim>& /*rhs*/) {
      67             :   return true;
      68             : }
      69             : 
      70             : template <size_t Dim>
      71           0 : inline constexpr bool operator!=(const CoordinateMaps::Identity<Dim>& lhs,
      72             :                                  const CoordinateMaps::Identity<Dim>& rhs) {
      73             :   return not(lhs == rhs);
      74             : }
      75             : }  // namespace CoordinateMaps
      76             : }  // namespace domain

Generated by: LCOV version 1.14