SpECTRE  v2025.03.17
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Xcts::BoundaryConditions::Robin< EnabledEquations > Class Template Reference

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

#include <Robin.hpp>

Public Types

using options = implementation defined
 
using argument_tags = implementation defined
 
using volume_tags = implementation defined
 
using argument_tags_linearized = implementation defined
 
using volume_tags_linearized = implementation defined
 

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
 
virtual std::vector< elliptic::BoundaryConditionTypeboundary_condition_types () const=0
 
- 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 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 r(rψ)=0, r(αψ)=0, and r(rβexcessj)=0 on the boundary. These Robin boundary conditions incur an error of order 1/R2, 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:

(niiψ)N=ψr,(nii(αψ))N=αψr,(ni(Lβ)ij)N=ni(Lβ)ij[βexcessjr+13njniβexcessir+niiβexcessj+13njninkiβexcessk]

Here, the condition on the longitudinal shift is derived by imposing the Robin boundary condition niiβexcessj=βexcessj/r only on the normal component of the shift gradient. To do this we can use the projection operator Pij=δijninj to set the shift gradient to iβexcessj=Pikkβexcessjniβexcessj/r and then apply the longitudinal operator.

Template Parameters
EnabledEquationsThe subset of XCTS equations that are being solved

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>
constexpr 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: