SpECTRE  v2026.04.01
Loading...
Searching...
No Matches
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
using fd_interior_temporary_tags
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)

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 Typedef Documentation

◆ fd_interior_evolved_variables_tags

using Ccz4::BoundaryConditions::Sommerfeld::fd_interior_evolved_variables_tags
Initial value:
::Ccz4::fd::System::variables_tag_list

◆ fd_interior_temporary_tags

using Ccz4::BoundaryConditions::Sommerfeld::fd_interior_temporary_tags
Initial value:
tmpl::list<evolution::dg::subcell::Tags::Mesh<3>>

Member Function Documentation

◆ get_clone()

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

Member Data Documentation

◆ bc_type

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

◆ help

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:
  • src/Evolution/Systems/Ccz4/BoundaryConditions/Sommerfeld.hpp