SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/GeneralizedHarmonic - TensorYlmTransforms.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 50.0 % 2 1
Test Date: 2026-10-22 17:29:42
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 2.0-1