SpECTRE
v2024.09.29
|
Computational structs for evaluating the hypersurface integrals during CCE evolution. These are compatible with use in db::mutate_apply
.
More...
#include <LinearSolve.hpp>
Public Types | |
using | boundary_tags = tmpl::list< BoundaryPrefix< Tag > > |
using | integrand_tags = tmpl::list< Tags::Integrand< Tag > > |
using | return_tags = tmpl::list< Tag > |
using | argument_tags = tmpl::append< integrand_tags, boundary_tags, tmpl::list< Tags::LMax, Tags::NumberOfRadialPoints > > |
Static Public Member Functions | |
static void | apply (gsl::not_null< Scalar< SpinWeighted< ComplexDataVector, Tag::type::type::spin > > * > integral_result, const Scalar< SpinWeighted< ComplexDataVector, Tag::type::type::spin > > &integrand, const Scalar< SpinWeighted< ComplexDataVector, Tag::type::type::spin > > &boundary, size_t l_max, size_t number_of_radial_points) |
Computational structs for evaluating the hypersurface integrals during CCE evolution. These are compatible with use in db::mutate_apply
.
The integral evaluated and the corresponding inputs required depend on the CCE quantity being computed. In any of these, the only mutated tag is Tag
, where the result of the integration is placed. The supported Tag
s act in the following ways:
Tag
is Tags::BondiBeta
or Tags::BondiU
, the integral to be evaluated is simply \[ \partial_y f = A, \]
where \(A\) is retrieved withTags::Integrand<Tag>
.Tag
is Tags::BondiQ
or Tags::BondiW
, the integral to be evaluated is \[ (1 - y) \partial_y f + 2 f = A + (1 - y) B, \]
where \(A\) is retrieved withTags::PoleOfIntegrand<Tag>
and \(B\) is retrieved with Tags::RegularIntegrand<Tag>
.If Tag
is Tags::BondiH
, the integral to be evaluated is:
\[ (1 - y) \partial_y f + L f + L^\prime \bar{f} = A + (1 - y) B, \]
for \(f\), where \(A\) is retrieved with Tags::PoleOfIntegrand<Tag>
, \(B\) is retrieved with Tags::RegularIntegrand<Tag>
, \(L\) is retrieved with Tags::LinearFactor<Tag>
, and \(L^\prime\) is retrieved with Tags::LinearFactorForConjugate<Tag>
. The presence of \(L\) and \(L^\prime\) ensure that the only current method we have for evaluating the \(H\) hypersurface equation is a direct linear solve, rather than the spectral matrix multiplications which are available for the other integrals.
In each case, the boundary value at the world tube for the integration is retrieved from BoundaryPrefix<Tag>
.
Additional type aliases boundary_tags
and integrand_tags
are provided for template processing of the required input tags necessary for these functions. These type aliases are tmpl::list
s with the subsets of argument_tags
from specific other parts of the CCE computation. Because they play different roles, and have different extents, it is better for tag management to give separated lists for the dependencies.