SpECTRE
v2023.01.13
|
Implements constraint-preserving boundary conditions with a second order Bayliss-Turkel radiation boundary condition. More...
#include <ConstraintPreservingSphericalRadiation.hpp>
Public Types | |
using | options = tmpl::list<> |
using | dg_interior_evolved_variables_tags = tmpl::list< Tags::Psi, Tags::Phi< Dim > > |
using | dg_interior_temporary_tags = tmpl::list< domain::Tags::Coordinates< Dim, Frame::Inertial >, Tags::ConstraintGamma1, Tags::ConstraintGamma2, gr::Tags::Lapse< DataVector >, gr::Tags::Shift< Dim, Frame::Inertial, DataVector > > |
using | dg_interior_dt_vars_tags = tmpl::list<::Tags::dt< Tags::Psi >, ::Tags::dt< Tags::Pi >, ::Tags::dt< Tags::Phi< Dim > > > |
using | dg_interior_deriv_vars_tags = tmpl::list< ::Tags::deriv< Tags::Psi, tmpl::size_t< Dim >, Frame::Inertial >, ::Tags::deriv< Tags::Pi, tmpl::size_t< Dim >, Frame::Inertial >, ::Tags::deriv< Tags::Phi< Dim >, tmpl::size_t< Dim >, Frame::Inertial > > |
using | dg_gridless_tags = tmpl::list<> |
Public Member Functions | |
ConstraintPreservingSphericalRadiation (ConstraintPreservingSphericalRadiation &&)=default | |
ConstraintPreservingSphericalRadiation & | operator= (ConstraintPreservingSphericalRadiation &&)=default |
ConstraintPreservingSphericalRadiation (const ConstraintPreservingSphericalRadiation &)=default | |
ConstraintPreservingSphericalRadiation & | operator= (const ConstraintPreservingSphericalRadiation &)=default |
ConstraintPreservingSphericalRadiation (CkMigrateMessage *msg) | |
WRAPPED_PUPable_decl_base_template (domain::BoundaryConditions::BoundaryCondition, ConstraintPreservingSphericalRadiation) | |
auto | get_clone () const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > override |
void | pup (PUP::er &p) override |
std::optional< std::string > | dg_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 > &psi, const tnsr::i< DataVector, Dim > &phi, const tnsr::I< DataVector, Dim, Frame::Inertial > &coords, const Scalar< DataVector > &gamma1, const Scalar< DataVector > &gamma2, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, Dim > &shift, const Scalar< DataVector > &logical_dt_psi, const Scalar< DataVector > &logical_dt_pi, const tnsr::i< DataVector, Dim > &logical_dt_phi, const tnsr::i< DataVector, Dim > &d_psi, const tnsr::i< DataVector, Dim > &d_pi, const tnsr::ij< DataVector, Dim > &d_phi) const |
![]() | |
BoundaryCondition (BoundaryCondition &&)=default | |
BoundaryCondition & | operator= (BoundaryCondition &&)=default |
BoundaryCondition (const BoundaryCondition &)=default | |
BoundaryCondition & | operator= (const BoundaryCondition &)=default |
BoundaryCondition (CkMigrateMessage *msg) | |
void | pup (PUP::er &p) override |
![]() | |
BoundaryCondition (BoundaryCondition &&)=default | |
BoundaryCondition & | operator= (BoundaryCondition &&)=default |
BoundaryCondition (const BoundaryCondition &)=default | |
BoundaryCondition & | operator= (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 |
Implements constraint-preserving boundary conditions with a second order Bayliss-Turkel radiation boundary condition.
The Bayliss-Turkel boundary conditions are technically only valid in flat space and should therefore only be used at boundaries where the background spacetime is approximately Minkwoski such as (sufficiently far out) outer boundaries for asymptotically flat spacetimes. Small reflections are still likely to occur.
The constraint-preserving part of the boundary conditions are set on the time derivatives of the evolved fields according to [75] . The physical Bayliss-Turkel boundary conditions are additionally set onto the time derivative of \(\Pi\).
The constraints are defined as follows:
\begin{align*} \mathcal{C}_i&=\partial_i\Psi - \Phi_i=0, \\ \mathcal{C}_{ij}&=\partial_{[i}\Phi_{j]}=0 \end{align*}
The boundary conditions are then given by:
\begin{align*} \partial_{t} \Psi&\to\partial_{t}\Psi + \lambda_\Psi n^i \mathcal{C}_i, \\ \partial_{t}\Pi&\to\partial_{t}\Pi-\left(\partial_t\Pi - \partial_t\Pi^{\mathrm{BC}}\right) +\gamma_2\lambda_\Psi n^i \mathcal{C}_i =\partial_t\Pi^{\mathrm{BC}} +\gamma_2\lambda_\Psi n^i \mathcal{C}_i, \\ \partial_{t}\Phi_i&\to\partial_{t}\Phi_i+ \lambda_0n^jP^k{}_i\mathcal{C}_{jk} = \partial_{t}\Phi_i+ \lambda_0n^j \mathcal{C}_{ji}. \end{align*}
These conditions are equivalent to equations (40) and (41) of [75] if the shift vector is parallel to the normal of the outer boundary. The Bayliss-Turkel boundary conditions are given by:
\begin{align*} \prod_{l=1}^m\left(\partial_t + \partial_r + \frac{2l-1}{r}\right)\Psi=0, \end{align*}
which we expand here to second order ( \(m=2\)) to derive conditions for \(\partial_t\Pi^{\mathrm{BC}}\):
\begin{align*} \partial_t\Pi^{\mathrm{BC}} &=\left(\partial_t\partial_r + \partial_r\partial_t + \partial_r^2+\frac{4}{r}\partial_t +\frac{4}{r}\partial_r + \frac{2}{r^2}\right)\Psi \notag \\ &=\left((2n^i + \beta^i) \partial_t \Phi_i + n^i n^j\partial_i\Phi_j + \frac{4}{r}\partial_t\Psi + \frac{4}{r}n^i\Phi_i + \frac{2}{r^2}\Psi \right) / \alpha. \end{align*}
This derivation makes the following assumptions:
|
overridevirtual |
Implements domain::BoundaryConditions::BoundaryCondition.
|
staticconstexpr |
|
staticconstexpr |