SpECTRE Documentation Coverage Report
Current view: top level - NumericalAlgorithms/Spectral - DifferentiationMatrix.hpp Hit Total Coverage
Commit: 1e29a35ad8559408f21493dc5db8a49a237bb2f0 Lines: 7 8 87.5 %
Date: 2026-03-31 22:27:51
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             : /// \cond
       9             : class Matrix;
      10             : template <size_t>
      11             : class Mesh;
      12             : namespace Spectral {
      13             : enum class Basis : uint8_t;
      14             : enum class Quadrature : uint8_t;
      15             : enum class Parity : uint8_t;
      16             : }  // namespace Spectral
      17             : /// \endcond
      18             : 
      19             : namespace Spectral {
      20             : /// @{
      21             : /*!
      22             :  * \brief %Matrix used to compute the derivative of a function.
      23             :  *
      24             :  * \details For a function represented by the nodal coefficients \f$u_j\f$ a
      25             :  * matrix multiplication with the differentiation matrix \f$D_{ij}\f$ gives the
      26             :  * coefficients of the function's derivative. Since \f$u(x)\f$ is expanded in
      27             :  * Lagrange polynomials \f$u(x)=\sum_j u_j l_j(x)\f$ the differentiation matrix
      28             :  * is computed as \f$D_{ij}=l_j^\prime(\xi_i)\f$ where the \f$\xi_i\f$ are the
      29             :  * collocation points.
      30             :  *
      31             :  * The finite difference matrix uses summation by parts operators,
      32             :  * \f$D_{2-1}, D_{4-2}, D_{4-3}\f$, and \f$D_{6-5}\f$ from \cite Diener2005tn.
      33             :  *
      34             :  * \param num_points The number of collocation points
      35             :  */
      36             : template <Basis BasisType, Quadrature QuadratureType>
      37           1 : const Matrix& differentiation_matrix(size_t num_points);
      38             : template <Basis BasisType, Quadrature QuadratureType>
      39           1 : const Matrix& differentiation_matrix_transpose(size_t num_points);
      40             : /// @}
      41             : 
      42             : /*!
      43             :  * \brief %Matrix used to compute the derivative of a function of known parity
      44             :  *
      45             :  * \details For the Zernike basis, defined on \f$[0,1]\f$, `GaussRadauUpper`
      46             :  * quadratrue shifts the collocation points to the upper side, which
      47             :  * contributes to inaccurate differentiation at the lower side due to the low
      48             :  * density of points. By knowing the parity of functions in this basis as it
      49             :  * has two indices, we can extend the function to the negative \f$r\f$,
      50             :  * greatly reducing errors.
      51             :  *
      52             :  * \param num_points The number of collocation points
      53             :  * \param parity The Parity of the function
      54             :  */
      55             : template <Basis BasisType, Quadrature QuadratureType>
      56           1 : const Matrix& differentiation_matrix(size_t num_points, Parity parity);
      57             : 
      58             : /// @{
      59             : /*!
      60             :  * \brief Differentiation matrix for a one-dimensional mesh.
      61             :  *
      62             :  * \see differentiation_matrix(size_t)
      63             :  */
      64           1 : const Matrix& differentiation_matrix(const Mesh<1>& mesh);
      65           1 : const Matrix& differentiation_matrix_transpose(const Mesh<1>& mesh);
      66             : /// @}
      67             : 
      68             : /*!
      69             :  * \brief %Matrix used to compute the divergence of the flux in weak form.
      70             :  *
      71             :  * This is the transpose of the differentiation matrix multiplied by quadrature
      72             :  * weights that appear in DG integrals:
      73             :  *
      74             :  * \begin{equation}
      75             :  * \frac{D^T_{ij}} \frac{w_j}{w_i}
      76             :  * \end{equation}
      77             :  *
      78             :  * \param num_points The number of collocation points
      79             :  */
      80             : template <Basis BasisType, Quadrature QuadratureType>
      81           1 : const Matrix& weak_flux_differentiation_matrix(size_t num_points);
      82             : 
      83             : /*!
      84             :  * \brief %Matrix used to compute the divergence of the flux in weak form.
      85             :  *
      86             :  * \see weak_flux_differentiation_matrix(size_t)
      87             :  */
      88           1 : const Matrix& weak_flux_differentiation_matrix(const Mesh<1>& mesh);
      89             : }  // namespace Spectral

Generated by: LCOV version 1.14