SpECTRE  v2024.09.29
CurvedScalarWave::BoundaryConditions::Worldtube< Dim > Class Template Referencefinal

Sets boundary conditions for the elements abutting the worldtube using a combination of constraint-preserving boundary conditions and the local solution evolved inside the worldtube. More...

#include <Worldtube.hpp>

Public Types

using options = tmpl::list<>
 
using dg_interior_temporary_tags = tmpl::list< gr::Tags::Lapse< DataVector >, gr::Tags::Shift< DataVector, Dim >, gr::Tags::InverseSpatialMetric< DataVector, Dim >, Tags::ConstraintGamma1, Tags::ConstraintGamma2 >
 
using dg_gridless_tags = tmpl::list< CurvedScalarWave::Worldtube::Tags::WorldtubeSolution< Dim > >
 
using dg_interior_evolved_variables_tags = tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > >
 
using dg_interior_dt_vars_tags = tmpl::list<::Tags::dt< Tags::Psi > >
 
using dg_interior_deriv_vars_tags = tmpl::list< ::Tags::deriv< Tags::Psi, tmpl::size_t< Dim >, Frame::Inertial >, ::Tags::deriv< Tags::Phi< Dim >, tmpl::size_t< Dim >, Frame::Inertial > >
 

Public Member Functions

 Worldtube (CkMigrateMessage *msg)
 
 WRAPPED_PUPable_decl_base_template (domain::BoundaryConditions::BoundaryCondition, Worldtube)
 
auto get_clone () const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > override
 
void pup (PUP::er &p) override
 
std::optional< std::stringdg_time_derivative (gsl::not_null< Scalar< DataVector > * > dt_psi_correction, gsl::not_null< Scalar< DataVector > * > dt_pi_correction, gsl::not_null< tnsr::i< DataVector, Dim, Frame::Inertial > * > dt_phi_correction, const std::optional< tnsr::I< DataVector, Dim > > &face_mesh_velocity, const tnsr::i< DataVector, Dim > &normal_covector, const tnsr::I< DataVector, Dim > &normal_vector, const Scalar< DataVector > &, const Scalar< DataVector > &, const tnsr::i< DataVector, Dim > &phi, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, Dim > &shift, const tnsr::II< DataVector, Dim, Frame::Inertial > &, const Scalar< DataVector > &gamma1, const Scalar< DataVector > &gamma2, const Scalar< DataVector > &, const tnsr::i< DataVector, Dim > &d_psi, const tnsr::ij< DataVector, Dim > &d_phi, const Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > &) const
 
std::optional< std::stringdg_ghost (const gsl::not_null< Scalar< DataVector > * > psi, const gsl::not_null< Scalar< DataVector > * > pi, const gsl::not_null< tnsr::i< DataVector, Dim, Frame::Inertial > * > phi, const gsl::not_null< Scalar< DataVector > * > lapse, const gsl::not_null< tnsr::I< DataVector, Dim, Frame::Inertial > * > shift, const gsl::not_null< Scalar< DataVector > * > gamma1, const gsl::not_null< Scalar< DataVector > * > gamma2, const gsl::not_null< tnsr::II< DataVector, Dim, Frame::Inertial > * > inverse_spatial_metric, const std::optional< tnsr::I< DataVector, Dim, Frame::Inertial > > &, const tnsr::i< DataVector, Dim, Frame::Inertial > &normal_covector, const tnsr::I< DataVector, Dim, Frame::Inertial > &normal_vector, const Scalar< DataVector > &psi_interior, const Scalar< DataVector > &pi_interior, const tnsr::i< DataVector, Dim > &phi_interior, const Scalar< DataVector > &lapse_interior, const tnsr::I< DataVector, Dim, Frame::Inertial > &shift_interior, const tnsr::II< DataVector, Dim, Frame::Inertial > &inverse_spatial_metric_interior, const Scalar< DataVector > &gamma1_interior, const Scalar< DataVector > &gamma2_interior, const Scalar< DataVector > &, const tnsr::i< DataVector, Dim > &d_psi, const tnsr::ij< DataVector, Dim > &, const Variables< tmpl::list< Tags::Psi, Tags::Pi, Tags::Phi< Dim > > > &worldtube_vars) const
 
- Public Member Functions inherited from CurvedScalarWave::BoundaryConditions::BoundaryCondition< Dim >
 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 Attributes

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

Detailed Description

template<size_t Dim>
class CurvedScalarWave::BoundaryConditions::Worldtube< Dim >

Sets boundary conditions for the elements abutting the worldtube using a combination of constraint-preserving boundary conditions and the local solution evolved inside the worldtube.

Details

After extensive experimentation we found this set of boundary conditions to be optimal. They are formulated in terms of characteristic fields.

Boundary conditions for \(w^0_\psi\) \(w^0_i\) are formulated by demanding that there are no constraint violations flowing into the numerical domain and are formulated as corrections to the time derivative of the evolved variables directly. The derivation is described in ConstraintPreservingSphericalRadiation .

Boundary conditions for \(\w^-\) are formulated by evaluating the analytical solution of the worldtube at the grid points of each element abutting the worldtube. The data is updated and saved to CurvedScalarWave::Worldtube::Tags::WorldtubeSolution each time step. It is then treated like a ghost field and applied with the chosen numerical flux. So far only the upwind flux has been tried.

We tried several other combinations such as setting all fields from the worldtube solution but found that this caused major constraint violations to flow out of the worldtube.

Note
We found that, depending on the worldtube size, a fairly high value for \(\gamma_2\) of ca. 10 is required near the worldtube to ensure a stable evolution when using these boundary conditions.

Member Function Documentation

◆ get_clone()

Member Data Documentation

◆ bc_type

template<size_t Dim>
constexpr evolution::BoundaryConditions::Type CurvedScalarWave::BoundaryConditions::Worldtube< Dim >::bc_type
staticconstexpr
Initial value:
=
evolution::BoundaryConditions::Type::GhostAndTimeDerivative

◆ help

template<size_t Dim>
constexpr Options::String CurvedScalarWave::BoundaryConditions::Worldtube< Dim >::help
staticconstexpr
Initial value:
{
"Boundary conditions set by the worldtube. w^- will be set by the "
"internal worldtube solution, w^psi and w^0_i are fixed by constraint "
"preserving boundary conditions on the time derivative."}

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