SpECTRE Documentation Coverage Report
 Current view: top level - Evolution/Systems/Cce - LinearSolve.hpp Hit Total Coverage Commit: 817e13c5144619b701c7cd870655d8dbf94ab8ce Lines: 3 30 10.0 % Date: 2024-07-19 22:17:05 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 "DataStructures/SpinWeighted.hpp" 7 : #include "DataStructures/Tensor/TypeAliases.hpp" 8 : #include "Evolution/Systems/Cce/OptionTags.hpp" 9 : #include "Evolution/Systems/Cce/Tags.hpp" 10 : #include "NumericalAlgorithms/SpinWeightedSphericalHarmonics/SwshTags.hpp" 11 : 12 : /// \cond 13 : class ComplexDataVector; 14 : class Matrix; 15 : /// \endcond 16 : 17 : namespace Cce { 18 : 19 : /*! 20 : * \brief Provides access to a lazily cached integration matrix for the \f$Q\f$ 21 : * and \f$W\f$ equations in CCE hypersurface evaluation. 22 : * 23 : * \details The provided matrix acts on the integrand collocation points and 24 : * solves the equation, 25 : * 26 : * \f[ 27 : * (1 - y) \partial_y f + 2 f = g, 28 : * \f] 29 : * 30 : * for \f$f\f$ given integrand \f$g\f$. 31 : */ 32 1 : const Matrix& precomputed_cce_q_integrator(size_t number_of_radial_grid_points); 33 : 34 : /*! 35 : * \brief A utility function for evaluating the \f$Q\f$ and \f$W\f$ hypersurface 36 : * integrals during CCE evolution. 37 : * 38 : * \details Computes and returns by not_null pointer the solution to the 39 : * equation 40 : * 41 : * \f[ 42 : * (1 - y) \partial_y f + 2 f = A + (1 - y) B, 43 : * \f] 44 : * 45 : * where \f$A\f$ is provided as pole_of_integrand and \f$B\f$ is provided as 46 : * regular_integrand. The value one_minus_y is required for determining the 47 : * integrand and l_max is required to determine the shape of the spin-weighted 48 : * spherical harmonic mesh. 49 : */ 50 1 : void radial_integrate_cce_pole_equations( 51 : gsl::not_null integral_result, 52 : const ComplexDataVector& pole_of_integrand, 53 : const ComplexDataVector& regular_integrand, 54 : const ComplexDataVector& boundary, const ComplexDataVector& one_minus_y, 55 : size_t l_max, size_t number_of_radial_points); 56 : 57 : namespace detail { 58 : // needed because the standard transpose utility cannot create an arbitrary 59 : // ordering of blocks of data. This returns by pointer the configuration useful 60 : // for the linear solve step for H integration 61 : void transpose_to_reals_then_imags_radial_stripes( 62 : gsl::not_null result, const ComplexDataVector& input, 63 : size_t number_of_radial_points, size_t number_of_angular_points); 64 : } // namespace detail 65 : 66 : /// @{ 67 : /*! 68 : * \brief Computational structs for evaluating the hypersurface integrals during 69 : * CCE evolution. These are compatible with use in db::mutate_apply. 70 : * 71 : * \details 72 : * The integral evaluated and the corresponding inputs required depend on the 73 : * CCE quantity being computed. In any of these, the only mutated tag is Tag, 74 : * where the result of the integration is placed. The supported Tags act in 75 : * the following ways: 76 : * - If the Tag is Tags::BondiBeta or Tags::BondiU, the integral to be 77 : * evaluated is simply \f[ \partial_y f = A, \f] where \f$A\f$ is retrieved with 78 : * Tags::Integrand. 79 : * - If the Tag is Tags::BondiQ or Tags::BondiW, the integral to be 80 : * evaluated is \f[ (1 - y) \partial_y f + 2 f = A + (1 - y) B, \f] where 81 : * \f$A\f$ is retrieved with Tags::PoleOfIntegrand and \f$B\f$ is 82 : * retrieved with Tags::RegularIntegrand. 83 : * - If Tag is Tags::BondiH, the integral to be evaluated is: 84 : * 85 : * \f[ 86 : * (1 - y) \partial_y f + L f + L^\prime \bar{f} = A + (1 - y) B, 87 : * \f] 88 : * 89 : * for \f$f\f$, where \f$A\f$ is retrieved with Tags::PoleOfIntegrand, 90 : * \f$B\f$ is retrieved with Tags::RegularIntegrand, \f$L\f$ is retrieved 91 : * with Tags::LinearFactor, and \f$L^\prime\f$ is retrieved with 92 : * Tags::LinearFactorForConjugate. The presence of \f$L\f$ and 93 : * \f$L^\prime\f$ ensure that the only current method we have for evaluating the 94 : * \f$H\f$ hypersurface equation is a direct linear solve, rather than the 95 : * spectral matrix multiplications which are available for the other integrals. 96 : * 97 : * In each case, the boundary value at the world tube for the integration is 98 : * retrieved from BoundaryPrefix. 99 : * 100 : * Additional type aliases boundary_tags and integrand_tags are provided for 101 : * template processing of the required input tags necessary for these functions. 102 : * These type aliases are tmpl::lists with the subsets of argument_tags` from 103 : * specific other parts of the CCE computation. Because they play different 104 : * roles, and have different extents, it is better for tag management to give 105 : * separated lists for the dependencies. 106 : */ 107 : template

 Generated by: LCOV version 1.14