SpECTRE  v2025.08.19
Ccz4::BoundaryConditions::Sommerfeld Class Referencefinal

Sets Sommerfeld boundary conditions per tensor component. More...

#include <Sommerfeld.hpp>

Public Types

using options = tmpl::list<>
 
using fd_interior_evolved_variables_tags = ::Ccz4::fd::System::variables_tag_list
 
using fd_interior_temporary_tags = tmpl::list< evolution::dg::subcell::Tags::Mesh< 3 > >
 
using fd_interior_primitive_variables_tags = tmpl::list<>
 
using fd_gridless_tags = tmpl::list<::Ccz4::fd::Tags::Reconstructor >
 

Public Member Functions

 Sommerfeld (Sommerfeld &&)=default
 
Sommerfeldoperator= (Sommerfeld &&)=default
 
 Sommerfeld (const Sommerfeld &)
 
Sommerfeldoperator= (const Sommerfeld &)
 
 Sommerfeld (CkMigrateMessage *msg)
 
 WRAPPED_PUPable_decl_base_template (domain::BoundaryConditions::BoundaryCondition, Sommerfeld)
 
auto get_clone () const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > override
 
void pup (PUP::er &p) override
 
- Public Member Functions inherited from Ccz4::BoundaryConditions::BoundaryCondition
 BoundaryCondition (BoundaryCondition &&)=default
 
BoundaryConditionoperator= (BoundaryCondition &&)=default
 
 BoundaryCondition (const BoundaryCondition &)=default
 
BoundaryConditionoperator= (const BoundaryCondition &)=default
 
 BoundaryCondition (CkMigrateMessage *msg)
 
void pup (PUP::er &p) override
 
- Public Member Functions inherited from domain::BoundaryConditions::BoundaryCondition
 BoundaryCondition (BoundaryCondition &&)=default
 
BoundaryConditionoperator= (BoundaryCondition &&)=default
 
 BoundaryCondition (const BoundaryCondition &)=default
 
BoundaryConditionoperator= (const BoundaryCondition &)=default
 
 BoundaryCondition (CkMigrateMessage *const msg)
 
 WRAPPED_PUPable_abstract (BoundaryCondition)
 
virtual auto get_clone () const -> std::unique_ptr< BoundaryCondition >=0
 

Static Public Member Functions

static void fd_ghost (gsl::not_null< tnsr::ii< DataVector, 3, Frame::Inertial > * > conformal_metric, gsl::not_null< Scalar< DataVector > * > lapse, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > shift, gsl::not_null< Scalar< DataVector > * > conformal_factor, gsl::not_null< tnsr::ii< DataVector, 3, Frame::Inertial > * > a_tilde, gsl::not_null< Scalar< DataVector > * > trace_extrinsic_curvature, gsl::not_null< Scalar< DataVector > * > theta, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > gamma_hat, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > auxiliary_shift_b, const Direction< 3 > &direction, const tnsr::ii< DataVector, 3, Frame::Inertial > &interior_conformal_metric, const Scalar< DataVector > &interior_conformal_factor, const tnsr::ii< DataVector, 3, Frame::Inertial > &interior_a_tilde, const Scalar< DataVector > &interior_trace_extrinsic_curvature, const Scalar< DataVector > &interior_theta, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_gamma_hat, const Scalar< DataVector > &interior_lapse, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_shift, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_auxiliary_shift_b, const Mesh< 3 > &subcell_mesh, const fd::Reconstructor &reconstructor)
 

Static Public Attributes

static constexpr Options::String help
 
static constexpr evolution::BoundaryConditions::Type bc_type
 

Detailed Description

Sets Sommerfeld boundary conditions per tensor component.

Unlike time-independent subcell external boundary conditions, the Sommerfeld boundary condition is applied at the outermost interior points in the volume instead of the ghost zone. This is because the Sommerfeld condition requires radial derivatives of the fields and modify their time derivatives, which then need to be time integrated. Under current infrastructure, it is therefore the simplest to apply this boundary condition in the interior rather than the ghost zone. This file extrapolates the interior evolved variables into the ghost zone. Their radial derivatives and time derivatives are then computed and applied in SoTimeDerivative.hpp for the outermost interior points. All tensor components (including lapse and shift) are treated as independent fields when applying this boundary condition.

Warning
This boundary condition assumes a complete sphere domain (all wedges), as we only apply it on the upper_zeta direction in blocks with external boundaries.

Member Function Documentation

◆ get_clone()

auto Ccz4::BoundaryConditions::Sommerfeld::get_clone ( ) const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition >
overridevirtual

Member Data Documentation

◆ bc_type

constexpr evolution::BoundaryConditions::Type Ccz4::BoundaryConditions::Sommerfeld::bc_type
staticconstexpr
Initial value:
=
evolution::BoundaryConditions::Type::Ghost

◆ help

constexpr Options::String Ccz4::BoundaryConditions::Sommerfeld::help
staticconstexpr
Initial value:
{
"Sommerfeld boundary conditions applied per tensor component."}

The documentation for this class was generated from the following file: