SpECTRE  v2026.11.11
Loading...
Searching...
No Matches
GrSelfForce::BoundaryConditions::Sommerfeld Class Reference

Radial Sommerfeld boundary conditions for the m-mode metric perturbations. More...

#include <Sommerfeld.hpp>

Classes

struct  BlackHoleMass
struct  BlackHoleSpin
struct  HyperboloidalSlicing
struct  MModeNumber
struct  OrbitalRadius
struct  Order

Public Types

using options
using argument_tags = tmpl::list<Tags::Alpha, Tags::Beta, Tags::GammaRstar>
using volume_tags = tmpl::list<>
using argument_tags_linearized
using volume_tags_linearized = tmpl::list<>

Public Member Functions

 Sommerfeld (const Sommerfeld &)=default
Sommerfeld & operator= (const Sommerfeld &)=default
 Sommerfeld (Sommerfeld &&)=default
Sommerfeld & operator= (Sommerfeld &&)=default
 Sommerfeld (double black_hole_mass, double black_hole_spin, double orbital_radius, int m_mode_number, bool hyperboloidal_slicing, int order)
double black_hole_mass () const
double black_hole_spin () const
double orbital_radius () const
int m_mode_number () const
bool hyperboloidal_slicing () const
int order () const
std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > get_clone () const override
std::vector< elliptic::BoundaryConditionType > boundary_condition_types () const override
void apply (gsl::not_null< tnsr::aa< ComplexDataVector, 3 > * > field, gsl::not_null< tnsr::aa< ComplexDataVector, 3 > * > n_dot_flux, const GradTensorType &deriv_field, const tnsr::I< ComplexDataVector, 2 > &alpha, const tnsr::aaBB< ComplexDataVector, 3 > &beta, const tnsr::aaBB< ComplexDataVector, 3 > &gamma_rstar) const
void apply_linearized (gsl::not_null< tnsr::aa< ComplexDataVector, 3 > * > field_correction, gsl::not_null< tnsr::aa< ComplexDataVector, 3 > * > n_dot_flux_correction, const GradTensorType &deriv_field_correction, const tnsr::I< ComplexDataVector, 2 > &alpha, const tnsr::aaBB< ComplexDataVector, 3 > &beta, const tnsr::aaBB< ComplexDataVector, 3 > &gamma_rstar) const
void pup (PUP::er &p) override
Public Member Functions inherited from elliptic::BoundaryConditions::BoundaryCondition< 2 >
 BoundaryCondition (const BoundaryCondition &)=default
 BoundaryCondition (BoundaryCondition &&)=default
BoundaryCondition & operator= (const BoundaryCondition &)=default
BoundaryCondition & operator= (BoundaryCondition &&)=default
Public Member Functions inherited from domain::BoundaryConditions::BoundaryCondition
 BoundaryCondition (BoundaryCondition &&)=default
BoundaryCondition & operator= (BoundaryCondition &&)=default
 BoundaryCondition (const BoundaryCondition &)=default
BoundaryCondition & operator= (const BoundaryCondition &)=default
 BoundaryCondition (CkMigrateMessage *const msg)
 WRAPPED_PUPable_abstract (BoundaryCondition)

Static Public Attributes

static constexpr Options::String help
Static Public Attributes inherited from elliptic::BoundaryConditions::BoundaryCondition< 2 >
static constexpr size_t volume_dim

Friends

bool operator== (const Sommerfeld &lhs, const Sommerfeld &rhs)

Detailed Description

Radial Sommerfeld boundary conditions for the m-mode metric perturbations.

These radial boundary conditions enforce an outgoing direction of radiation propagation. They apply both near the Kerr horizon (inner radial boundary) and at large distance (outer radial boundary):

\begin{equation}n_i F^i = i m \Omega \Psi_m \end{equation}

With hyperboloidal slicing (see HyperboloidalSlicing), the outgoing radiation condition above is replaced by a Neumann condition ( \(F^i = 0\)) at first order (Order = 1). At second order (Order = 2), it instead imposes

\begin{equation}\partial_{x^i}\left(\alpha^{i}\partial_{x^i}\Psi\right) = 0, \end{equation}

i.e. \(\gamma^{i}\cdot\partial_{x^i}\Psi = -\beta\cdot\Psi\), where \(x^i\) is the radial coordinate ( \(r_\star\) or \(r\), depending on PenetratingHorizon; see CircularOrbit). Since \(\gamma^{i}\) and \(\beta\) couple all tensor components of \(\Psi\) together, we invert this dense matrix in tensor-component space to solve for \(\partial_{x^i}\Psi\), then set the flux \(F^{i} = \alpha^{i}\partial_{x^i}\Psi\).

These boundary conditions currently assume a circular equatorial orbit.

Member Typedef Documentation

◆ argument_tags_linearized

using GrSelfForce::BoundaryConditions::Sommerfeld::argument_tags_linearized
Initial value:
tmpl::list<Tags::Alpha, Tags::Beta, Tags::GammaRstar>

◆ options

using GrSelfForce::BoundaryConditions::Sommerfeld::options

Member Function Documentation

◆ boundary_condition_types()

std::vector< elliptic::BoundaryConditionType > GrSelfForce::BoundaryConditions::Sommerfeld::boundary_condition_types ( ) const
inlineoverridevirtual

◆ get_clone()

std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > GrSelfForce::BoundaryConditions::Sommerfeld::get_clone ( ) const
overridevirtual

Member Data Documentation

◆ help

Options::String GrSelfForce::BoundaryConditions::Sommerfeld::help
staticconstexpr
Initial value:
=
"Radial Sommerfeld boundary condition"

The documentation for this class was generated from the following file:
  • src/Elliptic/Systems/SelfForce/GeneralRelativity/BoundaryConditions/Sommerfeld.hpp