SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/GeneralizedHarmonic - TensorYlmTransforms.hpp Hit Total Coverage
Commit: a18e59fda1a195609825c55450f7d61ad20a91a4 Lines: 1 2 50.0 %
Date: 2026-06-11 22:10:41
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/SimpleSparseMatrix.hpp"
       9             : #include "DataStructures/Tensor/TypeAliases.hpp"
      10             : #include "DataStructures/Variables.hpp"
      11             : #include "Evolution/Systems/GeneralizedHarmonic/ApplyTensorYlmFilter.hpp"
      12             : #include "Utilities/Gsl.hpp"
      13             : 
      14             : /// \cond
      15             : class DataVector;
      16             : namespace ylm {
      17             : class Spherepack;
      18             : }  // namespace ylm
      19             : /// \endcond
      20             : 
      21             : namespace ylm::TensorYlm {
      22             : 
      23             : /*!
      24             :  * \brief Transform Generalized Harmonic variables on a spherical shell to
      25             :  * tensor-Ylm coefficients of their spatial pieces.
      26             :  *
      27             :  * The `gh_vars` are nodal values on either a spherical slice
      28             :  * (`radial_extents == 1`) or a shell with `radial_extents` radial points and
      29             :  * S2 angular collocation points described by `spherepack`. The output
      30             :  * `gh_spatial_tensor_ylm_coefficients` has the GH spacetime tensors broken
      31             :  * into spatial pieces, transformed to the grid frame using
      32             :  * `jac_inertial_to_grid`, converted from nodal to modal S2 coefficients, and
      33             :  * finally transformed from Cartesian components to the TensorYlm
      34             :  * \f$(\ell, m, \bar m)\f$ basis.
      35             :  *
      36             :  * The output uses Spherepack spectral storage with the radial offsets
      37             :  * interleaved in the same layout as `Spherepack::phys_to_spec_all_offsets`.
      38             :  * Its tensor component labels are not Cartesian component labels. They are
      39             :  * TensorYlm basis labels: component index 0 denotes an \f$\ell\f$ basis index,
      40             :  * component index 1 denotes an \f$m\f$ basis index, and component index 2
      41             :  * denotes an \f$\bar m\f$ basis index.
      42             :  *
      43             :  * Scalar quantities are transformed by the nodal-to-modal spherical-harmonic
      44             :  * transform. Non-scalar quantities are then transformed from Cartesian
      45             :  * components to the TensorYlm basis with the supplied sparse matrices.
      46             :  *
      47             :  * For performance, the function does not allocate large buffers and does not
      48             :  * build the cartesian-to-spherical matrices. The caller supplies
      49             :  * `temp_storage` and precomputed matrices. `temp_storage` has the same type as
      50             :  * the output so the implementation can reuse one contiguous buffer as inertial
      51             :  * spatial pieces at the collocation points and as spectral coefficients. It
      52             :  * must have at least `radial_extents * spherepack.spectral_size()` grid points.
      53             :  * The `spherepack` must have `m_max == l_max`, matching the
      54             :  * cartesian-to-spherical matrices.
      55             :  *
      56             :  * \param gh_spatial_tensor_ylm_coefficients Output coefficients for the GH
      57             :  *   variables broken into spatial pieces. The output is overwritten and must
      58             :  *   have `radial_extents * spherepack.spectral_size()` grid points.
      59             :  * \param temp_storage Temporary storage allocated by the caller. It is
      60             :  *   overwritten and must not alias `gh_spatial_tensor_ylm_coefficients`.
      61             :  * \param gh_vars Generalized Harmonic variables at collocation points. Must
      62             :  *   have `radial_extents * spherepack.physical_size()` grid points.
      63             :  * \param jac_inertial_to_grid Jacobian taking spatial tensor components from
      64             :  *   the inertial frame to the grid frame.
      65             :  * \param cart_to_sphere_matrix_i Cartesian-to-TensorYlm matrix for rank-1
      66             :  *   spatial tensors.
      67             :  * \param cart_to_sphere_matrix_ii Cartesian-to-TensorYlm matrix for symmetric
      68             :  *   rank-2 spatial tensors.
      69             :  * \param cart_to_sphere_matrix_ij Cartesian-to-TensorYlm matrix for rank-2
      70             :  *   spatial tensors with no symmetry.
      71             :  * \param cart_to_sphere_matrix_ijj Cartesian-to-TensorYlm matrix for rank-3
      72             :  *   spatial tensors symmetric on the last two indices.
      73             :  * \param spherepack The spherical-harmonic transform object describing the S2
      74             :  *   grid and spectral storage.
      75             :  * \param radial_extents The number of radial grid points, or 1 for a single
      76             :  *   spherical slice.
      77             :  */
      78           1 : void gh_variables_to_tensor_ylm_coefficients(
      79             :     gsl::not_null<Variables<filter_detail::gh_spatial_vars_list<Frame::Grid>>*>
      80             :         gh_spatial_tensor_ylm_coefficients,
      81             :     gsl::not_null<Variables<filter_detail::gh_spatial_vars_list<Frame::Grid>>*>
      82             :         temp_storage,
      83             :     const Variables<filter_detail::gh_spacetime_vars_list>& gh_vars,
      84             :     const InverseJacobian<DataVector, 3, Frame::Inertial, Frame::Grid>&
      85             :         jac_inertial_to_grid,
      86             :     const SimpleSparseMatrix& cart_to_sphere_matrix_i,
      87             :     const SimpleSparseMatrix& cart_to_sphere_matrix_ii,
      88             :     const SimpleSparseMatrix& cart_to_sphere_matrix_ij,
      89             :     const SimpleSparseMatrix& cart_to_sphere_matrix_ijj,
      90             :     const Spherepack& spherepack, size_t radial_extents);
      91             : 
      92             : }  // namespace ylm::TensorYlm

Generated by: LCOV version 1.14