SpECTRE  2021.08.02
ScalarWave::BoundaryConditions::ConstraintPreservingSphericalRadiation< Dim > Class Template Referencefinal

Constraint-preserving spherical radiation boundary condition that seeks to avoid ingoing constraint violations and radiation. More...

#include <ConstraintPreservingSphericalRadiation.hpp>

Classes

struct  TypeOptionTag
 

Public Types

using options = tmpl::list< TypeOptionTag >
 
using dg_interior_evolved_variables_tags = tmpl::list< ScalarWave::Pi, ScalarWave::Phi< Dim >, ScalarWave::Psi >
 
using dg_interior_temporary_tags = tmpl::list< domain::Tags::Coordinates< Dim, Frame::Inertial >, Tags::ConstraintGamma2 >
 
using dg_interior_dt_vars_tags = tmpl::list<::Tags::dt< ScalarWave::Pi >, ::Tags::dt< ScalarWave::Phi< Dim > >, ::Tags::dt< ScalarWave::Psi > >
 
using dg_interior_deriv_vars_tags = tmpl::list< ::Tags::deriv< ScalarWave::Pi, tmpl::size_t< Dim >, Frame::Inertial >, ::Tags::deriv< ScalarWave::Psi, tmpl::size_t< Dim >, Frame::Inertial >, ::Tags::deriv< ScalarWave::Phi< Dim >, tmpl::size_t< Dim >, Frame::Inertial > >
 
using dg_gridless_tags = tmpl::list<>
 
- Public Types inherited from ScalarWave::BoundaryConditions::BoundaryCondition< Dim >
using creatable_classes = tmpl::list< ConstraintPreservingSphericalRadiation< Dim >, DirichletAnalytic< Dim >, domain::BoundaryConditions::Periodic< BoundaryCondition< Dim > >, SphericalRadiation< Dim > >
 

Public Member Functions

 ConstraintPreservingSphericalRadiation (detail::ConstraintPreservingSphericalRadiationType type) noexcept
 
 ConstraintPreservingSphericalRadiation (CkMigrateMessage *msg) noexcept
 
 WRAPPED_PUPable_decl_base_template (domain::BoundaryConditions::BoundaryCondition, ConstraintPreservingSphericalRadiation)
 
auto get_clone () const noexcept -> 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_pi_correction, gsl::not_null< tnsr::i< DataVector, Dim, Frame::Inertial > * > dt_phi_correction, gsl::not_null< Scalar< DataVector > * > dt_psi_correction, const std::optional< tnsr::I< DataVector, Dim, Frame::Inertial > > &face_mesh_velocity, const tnsr::i< DataVector, Dim, Frame::Inertial > &normal_covector, const Scalar< DataVector > &pi, const tnsr::i< DataVector, Dim, Frame::Inertial > &phi, const Scalar< DataVector > &psi, const tnsr::I< DataVector, Dim, Frame::Inertial > &coords, const Scalar< DataVector > &gamma2, const Scalar< DataVector > &dt_pi, const tnsr::i< DataVector, Dim, Frame::Inertial > &dt_phi, const Scalar< DataVector > &dt_psi, const tnsr::i< DataVector, Dim, Frame::Inertial > &d_pi, const tnsr::i< DataVector, Dim, Frame::Inertial > &d_psi, const tnsr::ij< DataVector, Dim, Frame::Inertial > &d_phi) const noexcept
 
- Public Member Functions inherited from ScalarWave::BoundaryConditions::BoundaryCondition< Dim >
 BoundaryCondition (BoundaryCondition &&) noexcept=default
 
BoundaryConditionoperator= (BoundaryCondition &&) noexcept=default
 
 BoundaryCondition (const BoundaryCondition &)=default
 
BoundaryConditionoperator= (const BoundaryCondition &)=default
 
 BoundaryCondition (CkMigrateMessage *msg) noexcept
 
void pup (PUP::er &p) override
 
- Public Member Functions inherited from domain::BoundaryConditions::BoundaryCondition
 BoundaryCondition (BoundaryCondition &&) noexcept=default
 
BoundaryConditionoperator= (BoundaryCondition &&) noexcept=default
 
 BoundaryCondition (const BoundaryCondition &)=default
 
BoundaryConditionoperator= (const BoundaryCondition &)=default
 
 BoundaryCondition (CkMigrateMessage *const msg) noexcept
 
 WRAPPED_PUPable_abstract (BoundaryCondition)
 

Static Public Attributes

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

Detailed Description

template<size_t Dim>
class ScalarWave::BoundaryConditions::ConstraintPreservingSphericalRadiation< Dim >

Constraint-preserving spherical radiation boundary condition that seeks to avoid ingoing constraint violations and radiation.

The constraint-preserving part of the boundary condition imposes the following condition on the time derivatives of the characteristic fields:

\begin{align*} d_tw^\Psi&\to d_tw^{\Psi}+\lambda_{\Psi}n^i\mathcal{C}_i, \\ d_tw^0_i&\to d_tw^{0}_i+\lambda_{0}n^jP^k_i\mathcal{C}_{ik}, \end{align*}

where

\begin{align*} P^k{}_i=\delta^k_i-n^kn_i \end{align*}

projects a tensor onto the spatial surface to which \(n_i\) is normal, and \(d_t w\) is the evolved to characteristic field transformation applied to the time derivatives of the evolved fields. That is,

\begin{align*} d_t w^\Psi&=\partial_t \Psi, \\ d_t w_i^0&=(\delta^k_i-n^k n_i)\partial_t \Phi_k, \\ d_t w^{\pm}&=\partial_t\Pi\pm n^k\partial_t\Phi_k - \gamma_2\partial_t\Psi. \end{align*}

The constraints are defined as:

\begin{align*} \mathcal{C}_i&=\partial_i\Psi - \Phi_i=0, \\ \mathcal{C}_{ij}&=\partial_{[i}\Phi_{j]}=0 \end{align*}

Radiation boundary conditions impose a condition on \(\Pi\) or its time derivative. We denote the boundary condition value of the time derivative of \(\Pi\) by \(\partial_t\Pi^{\mathrm{BC}}\). With this, we can impose boundary conditions on the time derivatives of the evolved variables as follows:

\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*}

Below we assume the normal vector \(n^i\) is the radial unit normal vector. That is, we assume the outer boundary is spherical. A Sommerfeld [99] radiation condition is given by

\begin{align*} \partial_t\Psi=n^i\Phi_i \end{align*}

Or, assuming that \(\partial_tn^i=0\) (or is very small),

\begin{align*} \partial_t\Pi^{\mathrm{BC}}=n^i\partial_t\Phi_i \end{align*}

The Bayliss-Turkel [11] 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*}

The first-order form is

\begin{align*} \partial_t\Pi^{\mathrm{BC}}=n^i\partial_t\Phi_i + \frac{1}{r}\partial_t\Psi, \end{align*}

assuming \(\partial_t n^i=0\) and \(\partial_t r=0\).

The second-order boundary condition is given by,

\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 \\ &=n^i(\partial_t\Phi_i-\partial_i\Pi) + n^i n^j\partial_i\Phi_j - \frac{4}{r}\Pi+\frac{4}{r}n^i\Phi_i + \frac{2}{r^2}\Psi, \end{align*}

assuming \(\partial_t n^i=0\) and \(\partial_t r=0\).

The moving mesh can be accounted for by using

\begin{align*} \partial_t r = \frac{1}{r}x^i\delta_{ij}\partial_t x^j \end{align*}

Note
It is not clear if \(\partial_t\Phi_i\) should be replaced by \(-\partial_i\Pi\), which is the evolution equation but without the constraint.
On a moving mesh the characteristic speeds change according to \(\lambda\to\lambda-v^i_gn_i\) where \(v^i_g\) is the mesh velocity.
For the scalar wave system \(\lambda_0 = \lambda_\psi\)
Warning
The boundary conditions are implemented assuming the outer boundary is spherical. It might be possible to generalize the condition to non-spherical boundaries by using \(x^i/r\) instead of \(n^i\), but this hasn't been tested.

Member Function Documentation

◆ get_clone()

Member Data Documentation

◆ bc_type

template<size_t Dim>
constexpr evolution::BoundaryConditions::Type ScalarWave::BoundaryConditions::ConstraintPreservingSphericalRadiation< Dim >::bc_type
staticconstexpr
Initial value:
=
evolution::BoundaryConditions::Type::TimeDerivative

◆ help

template<size_t Dim>
constexpr Options::String ScalarWave::BoundaryConditions::ConstraintPreservingSphericalRadiation< Dim >::help
staticconstexpr
Initial value:
{
"Constraint-preserving spherical radiation boundary conditions setting "
"the time derivatives of Psi, Phi, and Pi to avoid incoming constraint "
"violations, and imposing radiation boundary conditions."}