SpECTRE Documentation Coverage Report
Current view: top level - Domain/CoordinateMaps - SphericalToCartesianPfaffian.hpp Hit Total Coverage
Commit: ecb8a275e1aebab77dcce48a5e098ed4e486ab4b Lines: 1 18 5.6 %
Date: 2026-08-22 01:05:40
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 <array>
       7             : #include <cstddef>
       8             : #include <optional>
       9             : 
      10             : #include "DataStructures/Tensor/TypeAliases.hpp"
      11             : 
      12             : /// \cond
      13             : namespace PUP {
      14             : class er;
      15             : }  // namespace PUP
      16             : /// \endcond
      17             : 
      18             : namespace domain::CoordinateMaps {
      19             : 
      20             : /*!
      21             :  * \ingroup CoordinateMapsGroup
      22             :  *
      23             :  * \brief Pfaffian transformation from spherical to Cartesian coordinates.
      24             :  *
      25             :  * \note This map is designed to be used together with Spherepack! Spherepack
      26             :  * expects a Pfaffian transformation of the derivatives.
      27             :  *
      28             :  * \details This is a Pfaffian mapping from \f$(r,\theta,\phi) \rightarrow
      29             :  * (x,y,z) \f$.
      30             :  *
      31             :  * The formula for the mapping is...
      32             :  * \f{eqnarray*}
      33             :  *     x &=& r \sin\theta \cos\phi \\
      34             :  *     y &=& r \sin\theta \sin\phi \\
      35             :  *     z &=& r \cos\theta
      36             :  * \f}
      37             :  *
      38             :  * The Pfaffian basis vectors
      39             :  * \f$ (e_{\hat r}, e_{\hat \theta}, e_{\hat \phi})\f$
      40             :  * are related to the coordinate basis vectors
      41             :  * \f$ (e_r, e_{\theta}, e_{\phi})\f$
      42             :  * by...
      43             :  * \f{eqnarray*}
      44             :  *     e_{\hat r}      &=& e_r \\
      45             :  *     e_{\hat \theta} &=& e_{\theta} \\
      46             :  *     e_{\hat \phi}   &=& \frac{1}{\sin \theta} e_{\phi}
      47             :  * \f}
      48             :  */
      49           1 : class SphericalToCartesianPfaffian {
      50             :  public:
      51           0 :   static constexpr size_t dim = 3;
      52           0 :   SphericalToCartesianPfaffian();
      53           0 :   ~SphericalToCartesianPfaffian() = default;
      54           0 :   SphericalToCartesianPfaffian(SphericalToCartesianPfaffian&&);
      55           0 :   SphericalToCartesianPfaffian(const SphericalToCartesianPfaffian&);
      56           0 :   SphericalToCartesianPfaffian& operator=(const SphericalToCartesianPfaffian&);
      57           0 :   SphericalToCartesianPfaffian& operator=(SphericalToCartesianPfaffian&&);
      58             : 
      59             :   template <typename T>
      60           0 :   std::array<T, 3> operator()(const std::array<T, 3>& source_coords) const;
      61             : 
      62             :   // NOLINTNEXTLINE(readability-convert-member-functions-to-static)
      63           0 :   std::optional<std::array<double, 3>> inverse(
      64             :       const std::array<double, 3>& target_coords) const;
      65             : 
      66             :   template <typename T>
      67           0 :   tnsr::Ij<T, 3, Frame::NoFrame> jacobian(
      68             :       const std::array<T, 3>& source_coords) const;
      69             : 
      70             :   template <typename T>
      71           0 :   tnsr::Ij<T, 3, Frame::NoFrame> inv_jacobian(
      72             :       const std::array<T, 3>& source_coords) const;
      73             : 
      74             :   // NOLINTNEXTLINE(google-runtime-references)
      75           0 :   void pup(PUP::er& p);
      76             : 
      77           0 :   static constexpr bool is_identity() { return false; }
      78             : 
      79           0 :   static constexpr bool supports_hessian{false};
      80             : };
      81             : 
      82           0 : bool operator==(const SphericalToCartesianPfaffian& lhs,
      83             :                 const SphericalToCartesianPfaffian& rhs);
      84             : 
      85           0 : bool operator!=(const SphericalToCartesianPfaffian& lhs,
      86             :                 const SphericalToCartesianPfaffian& rhs);
      87             : }  // namespace domain::CoordinateMaps

Generated by: LCOV version 1.14