SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Cce - LinearOperators.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 28.6 % 7 2
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 "Evolution/Systems/Cce/Tags.hpp"
       9              : #include "NumericalAlgorithms/Spectral/Basis.hpp"
      10              : #include "NumericalAlgorithms/Spectral/Quadrature.hpp"
      11              : #include "NumericalAlgorithms/SpinWeightedSphericalHarmonics/SwshCollocation.hpp"
      12              : #include "Utilities/Gsl.hpp"
      13              : 
      14              : namespace Cce {
      15              : /*!
      16              :  * \brief Computes the partial derivative along a particular direction
      17              :  * determined by the `dimension_to_differentiate`.
      18              :  * The input `u` is differentiated with the spectral matrix and the solution is
      19              :  * placed in `d_u`.
      20              :  *
      21              :  * \note This is placed in Cce Utilities for its currently narrow use-case. If
      22              :  * more general uses desire a single partial derivative of complex values, this
      23              :  * should be moved to `NumericalAlgorithms`. This utility currently assumes the
      24              :  * spatial dimensionality is 3, which would also need to be generalized, likely
      25              :  * by creating a wrapping struct with partial template specializations.
      26              :  */
      27            1 : void logical_partial_directional_derivative_of_complex(
      28              :     gsl::not_null<ComplexDataVector*> d_u, const ComplexDataVector& u,
      29              :     const Mesh<3>& mesh, size_t dimension_to_differentiate);
      30              : 
      31              : namespace Tags {
      32              : /*!
      33              :  * \brief Compute tag for a manually-handled partial y derivative in the volume.
      34              :  *
      35              :  * \details Most of the partial y derivatives are handled by PreSwshDerivatives.
      36              :  * However, that infrastructure is specific to the CCE evolution system itself,
      37              :  * so it won't work for other uses (e.g. observers that are invoked
      38              :  * periodically). This compute tag instead manually computes a partial
      39              :  * y derivative.
      40              :  */
      41              : template <typename Tag>
      42            1 : struct DyCompute
      43              :     : Dy<Tag>, db::ComputeTag {
      44            0 :   using base = Dy<Tag>;
      45            0 :   using return_type = typename base::type;
      46              : 
      47            0 :   using argument_tags = tmpl::list<Tag, Tags::LMax>;
      48              : 
      49            0 :   static constexpr auto function(
      50              :       const gsl::not_null<
      51              :           Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>*>
      52              :           dy_val,
      53              :       const Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>& val,
      54              :       const size_t l_max) {
      55              :     if (get(*dy_val).size() != get(val).size()) {
      56              :       get(*dy_val).destructive_resize(get(val).size());
      57              :     };
      58              :     logical_partial_directional_derivative_of_complex(
      59              :         make_not_null(&get(*dy_val).data()), get(val).data(),
      60              :         Mesh<3>{
      61              :             {{Spectral::Swsh::number_of_swsh_theta_collocation_points(l_max),
      62              :               Spectral::Swsh::number_of_swsh_phi_collocation_points(l_max),
      63              :               get(val).size() /
      64              :                   Spectral::Swsh::number_of_swsh_collocation_points(l_max)}},
      65              :             Spectral::Basis::Legendre,
      66              :             Spectral::Quadrature::GaussLobatto},
      67              :         // 2 for differentiating in y; coordinate ordering is:
      68              :         // {\phi, \theta, y}.
      69              :         2);
      70              :   }
      71              : };
      72              : 
      73              : }  // namespace Tags
      74              : 
      75              : }  // namespace Cce
        

Generated by: LCOV version 2.0-1