SpECTRE  v2026.04.01
Loading...
Searching...
No Matches
Xcts::BoundaryConditions::Robin< EnabledEquations > Class Template Reference

Impose Robin boundary conditions at the outer boundary. More...

#include <Robin.hpp>

Public Types

using options = tmpl::list<>
using argument_tags
using volume_tags = tmpl::list<>
using argument_tags_linearized
using volume_tags_linearized = tmpl::list<>

Public Member Functions

 Robin (const Robin &)=default
Robinoperator= (const Robin &)=default
 Robin (Robin &&)=default
Robinoperator= (Robin &&)=default
std::unique_ptr< domain::BoundaryConditions::BoundaryConditionget_clone () const override
std::vector< elliptic::BoundaryConditionTypeboundary_condition_types () const override
void apply (gsl::not_null< Scalar< DataVector > * > conformal_factor_minus_one, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient, const tnsr::i< DataVector, 3 > &deriv_conformal_factor, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
void apply (gsl::not_null< Scalar< DataVector > * > conformal_factor_minus_one, gsl::not_null< Scalar< DataVector > * > lapse_times_conformal_factor_minus_one, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient, gsl::not_null< Scalar< DataVector > * > n_dot_lapse_times_conformal_factor_gradient, const tnsr::i< DataVector, 3 > &deriv_conformal_factor, const tnsr::i< DataVector, 3 > &deriv_lapse_times_conformal_factor, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
void apply (gsl::not_null< Scalar< DataVector > * > conformal_factor_minus_one, gsl::not_null< Scalar< DataVector > * > lapse_times_conformal_factor_minus_one, gsl::not_null< tnsr::I< DataVector, 3 > * > shift_excess, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient, gsl::not_null< Scalar< DataVector > * > n_dot_lapse_times_conformal_factor_gradient, gsl::not_null< tnsr::I< DataVector, 3 > * > n_dot_longitudinal_shift_excess, const tnsr::i< DataVector, 3 > &deriv_conformal_factor, const tnsr::i< DataVector, 3 > &deriv_lapse_times_conformal_factor, const tnsr::iJ< DataVector, 3 > &deriv_shift_excess, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
void apply_linearized (gsl::not_null< Scalar< DataVector > * > conformal_factor_correction, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient_correction, const tnsr::i< DataVector, 3 > &deriv_conformal_factor_correction, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
void apply_linearized (gsl::not_null< Scalar< DataVector > * > conformal_factor_correction, gsl::not_null< Scalar< DataVector > * > lapse_times_conformal_factor_correction, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient_correction, gsl::not_null< Scalar< DataVector > * > n_dot_lapse_times_conformal_factor_gradient_correction, const tnsr::i< DataVector, 3 > &deriv_conformal_factor_correction, const tnsr::i< DataVector, 3 > &deriv_lapse_times_conformal_factor_correction, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
void apply_linearized (gsl::not_null< Scalar< DataVector > * > conformal_factor_correction, gsl::not_null< Scalar< DataVector > * > lapse_times_conformal_factor_correction, gsl::not_null< tnsr::I< DataVector, 3 > * > shift_excess_correction, gsl::not_null< Scalar< DataVector > * > n_dot_conformal_factor_gradient_correction, gsl::not_null< Scalar< DataVector > * > n_dot_lapse_times_conformal_factor_gradient_correction, gsl::not_null< tnsr::I< DataVector, 3 > * > n_dot_longitudinal_shift_excess_correction, const tnsr::i< DataVector, 3 > &deriv_conformal_factor_correction, const tnsr::i< DataVector, 3 > &deriv_lapse_times_conformal_factor_correction, const tnsr::iJ< DataVector, 3 > &deriv_shift_excess_correction, const tnsr::I< DataVector, 3 > &x, const tnsr::i< DataVector, 3 > &face_normal) const
Public Member Functions inherited from elliptic::BoundaryConditions::BoundaryCondition< 3 >
 BoundaryCondition (const BoundaryCondition &)=default
 BoundaryCondition (BoundaryCondition &&)=default
BoundaryConditionoperator= (const BoundaryCondition &)=default
BoundaryConditionoperator= (BoundaryCondition &&)=default
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 Attributes

static constexpr Options::String help
Static Public Attributes inherited from elliptic::BoundaryConditions::BoundaryCondition< 3 >
static constexpr size_t volume_dim

Detailed Description

template<Xcts::Equations EnabledEquations>
class Xcts::BoundaryConditions::Robin< EnabledEquations >

Impose Robin boundary conditions at the outer boundary.

Impose \(\partial_r(r\psi)=0\), \(\partial_r(\alpha\psi)=0\), and \(\partial_r(r\beta_\mathrm{excess}^j)=0\) on the boundary. These Robin boundary conditions incur an error of order \(1/R^2\), where \(R\) is the outer radius of the domain. This allows to place the outer boundary much closer to the center than for Dirichlet boundary conditions (Xcts::BoundaryConditions::Flatness), which incur an error of order \(1/R\).

The Robin boundary conditions are imposed as Neumann-type as follows:

\begin{align*}(n^i \partial_i \psi)_N &= -\frac{\psi}{r}, \\ (n^i \partial_i (\alpha\psi))_N &= -\frac{\alpha\psi}{r}, \\ (n^i (L\beta)^{ij})_N = n^i (L\beta)^{ij} - \left[ \frac{\beta_\mathrm{excess}^j}{r} + \frac{1}{3} n^j \frac{n^i \beta_\mathrm{excess}^i}{r} + n^i \partial_i \beta_\mathrm{excess}^j + \frac{1}{3} n^j n^i n_k \partial_i \beta_\mathrm{excess}^k \right] \end{align*}

Here, the condition on the longitudinal shift is derived by imposing the Robin boundary condition \(n^i\partial_i\beta_\mathrm{excess}^j=-\beta_\mathrm{excess}^j/r\) only on the normal component of the shift gradient. To do this we can use the projection operator \(P_{ij}=\delta_{ij}-n_i n_j\) to set the shift gradient to \(\partial_i\beta_\mathrm{excess}^j=P_{ik}\partial_k\beta_\mathrm{excess}^j -n_i \beta_\mathrm{excess}^j/r\) and then apply the longitudinal operator.

Template Parameters
EnabledEquationsThe subset of XCTS equations that are being solved

Member Typedef Documentation

◆ argument_tags

template<Xcts::Equations EnabledEquations>
using Xcts::BoundaryConditions::Robin< EnabledEquations >::argument_tags
Initial value:
tmpl::list<domain::Tags::Coordinates<3, Frame::Inertial>,
::Tags::Normalized< Tags::UnnormalizedFaceNormal< Dim, LocalFrame > > FaceNormal
The normalized face normal.
Definition FaceNormal.hpp:16

◆ argument_tags_linearized

template<Xcts::Equations EnabledEquations>
using Xcts::BoundaryConditions::Robin< EnabledEquations >::argument_tags_linearized
Initial value:
tmpl::list<domain::Tags::Coordinates<3, Frame::Inertial>,

Member Function Documentation

◆ boundary_condition_types()

template<Xcts::Equations EnabledEquations>
std::vector< elliptic::BoundaryConditionType > Xcts::BoundaryConditions::Robin< EnabledEquations >::boundary_condition_types ( ) const
overridevirtual

◆ get_clone()

template<Xcts::Equations EnabledEquations>
std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > Xcts::BoundaryConditions::Robin< EnabledEquations >::get_clone ( ) const
overridevirtual

Member Data Documentation

◆ help

template<Xcts::Equations EnabledEquations>
Options::String Xcts::BoundaryConditions::Robin< EnabledEquations >::help
staticconstexpr
Initial value:
=
"Impose Robin boundary conditions at the outer boundary. "
"They incur an error of order 1/R^2, where R is the outer radius."

The documentation for this class was generated from the following file:
  • src/Elliptic/Systems/Xcts/BoundaryConditions/Robin.hpp