SpECTRE  v2024.04.12
grmhd::ValenciaDivClean::BoundaryConditions::Reflective Class Referencefinal

Apply "soft" reflective boundary condition as described in [165]. More...

#include <Reflective.hpp>

Classes

struct  ReflectBoth
 

Public Types

using options = tmpl::list< ReflectBoth >
 
using dg_interior_evolved_variables_tags = tmpl::list<>
 
using dg_interior_primitive_variables_tags = tmpl::list< hydro::Tags::RestMassDensity< DataVector >, hydro::Tags::ElectronFraction< DataVector >, hydro::Tags::SpecificInternalEnergy< DataVector >, hydro::Tags::SpatialVelocity< DataVector, 3 >, hydro::Tags::MagneticField< DataVector, 3 >, hydro::Tags::LorentzFactor< DataVector >, hydro::Tags::Pressure< DataVector > >
 
using dg_interior_temporary_tags = tmpl::list< Shift, Lapse, InvSpatialMetric >
 
using dg_gridless_tags = tmpl::list<>
 
using fd_interior_evolved_variables_tags = tmpl::list<>
 
using fd_interior_temporary_tags = tmpl::list< evolution::dg::subcell::Tags::Mesh< 3 >, Shift, Lapse, SpatialMetric >
 
using fd_interior_primitive_variables_tags = tmpl::list< RestMassDensity, ElectronFraction, Temperature, hydro::Tags::Pressure< DataVector >, hydro::Tags::SpecificInternalEnergy< DataVector >, hydro::Tags::LorentzFactor< DataVector >, hydro::Tags::SpatialVelocity< DataVector, 3 >, MagneticField >
 
using fd_gridless_tags = tmpl::list< fd::Tags::Reconstructor >
 

Public Member Functions

 Reflective (Reflective &&)=default
 
Reflectiveoperator= (Reflective &&)=default
 
 Reflective (const Reflective &)=default
 
Reflectiveoperator= (const Reflective &)=default
 
 Reflective (bool reflect_both)
 
 Reflective (CkMigrateMessage *msg)
 
 WRAPPED_PUPable_decl_base_template (domain::BoundaryConditions::BoundaryCondition, Reflective)
 
auto get_clone () const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > override
 
void pup (PUP::er &p) override
 
std::optional< std::stringdg_ghost (gsl::not_null< Scalar< DataVector > * > tilde_d, gsl::not_null< Scalar< DataVector > * > tilde_ye, gsl::not_null< Scalar< DataVector > * > tilde_tau, gsl::not_null< tnsr::i< DataVector, 3, Frame::Inertial > * > tilde_s, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_b, gsl::not_null< Scalar< DataVector > * > tilde_phi, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_d_flux, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_ye_flux, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_tau_flux, gsl::not_null< tnsr::Ij< DataVector, 3, Frame::Inertial > * > tilde_s_flux, gsl::not_null< tnsr::IJ< DataVector, 3, Frame::Inertial > * > tilde_b_flux, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_phi_flux, gsl::not_null< Scalar< DataVector > * > lapse, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > shift, gsl::not_null< tnsr::II< DataVector, 3, Frame::Inertial > * > inv_spatial_metric, const std::optional< tnsr::I< DataVector, 3, Frame::Inertial > > &, const tnsr::i< DataVector, 3, Frame::Inertial > &outward_directed_normal_covector, const tnsr::I< DataVector, 3, Frame::Inertial > &outward_directed_normal_vector, const Scalar< DataVector > &interior_rest_mass_density, const Scalar< DataVector > &interior_electron_fraction, const Scalar< DataVector > &interior_specific_internal_energy, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_spatial_velocity, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_magnetic_field, const Scalar< DataVector > &interior_lorentz_factor, const Scalar< DataVector > &interior_pressure, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_shift, const Scalar< DataVector > &interior_lapse, const tnsr::II< DataVector, 3, Frame::Inertial > &interior_inv_spatial_metric) const
 
void fd_ghost (gsl::not_null< Scalar< DataVector > * > rest_mass_density, gsl::not_null< Scalar< DataVector > * > electron_fraction, gsl::not_null< Scalar< DataVector > * > temperature, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > lorentz_factor_times_spatial_velocity, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > magnetic_field, gsl::not_null< Scalar< DataVector > * > divergence_cleaning_field, gsl::not_null< std::optional< Variables< db::wrap_tags_in< Flux, typename grmhd::ValenciaDivClean::System::flux_variables > > > * > cell_centered_ghost_fluxes, const Direction< 3 > &direction, const Mesh< 3 > &subcell_mesh, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_shift, const Scalar< DataVector > &interior_lapse, const tnsr::ii< DataVector, 3, Frame::Inertial > &interior_spatial_metric, const Scalar< DataVector > &interior_rest_mass_density, const Scalar< DataVector > &interior_electron_fraction, const Scalar< DataVector > &interior_temperature, const Scalar< DataVector > &interior_pressure, const Scalar< DataVector > &interior_specific_internal_energy, const Scalar< DataVector > &interior_lorentz_factor, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_spatial_velocity, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_magnetic_field, const fd::Reconstructor &reconstructor) const
 
void fd_ghost_impl (gsl::not_null< Scalar< DataVector > * > rest_mass_density, gsl::not_null< Scalar< DataVector > * > electron_fraction, gsl::not_null< Scalar< DataVector > * > temperature, gsl::not_null< Scalar< DataVector > * > pressure, gsl::not_null< Scalar< DataVector > * > specific_internal_energy, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > lorentz_factor_times_spatial_velocity, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > spatial_velocity, gsl::not_null< Scalar< DataVector > * > lorentz_factor, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > magnetic_field, gsl::not_null< Scalar< DataVector > * > divergence_cleaning_field, gsl::not_null< tnsr::ii< DataVector, 3, Frame::Inertial > * > spatial_metric, gsl::not_null< tnsr::II< DataVector, 3, Frame::Inertial > * > inv_spatial_metric, gsl::not_null< Scalar< DataVector > * > sqrt_det_spatial_metric, gsl::not_null< Scalar< DataVector > * > lapse, gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > shift, const Direction< 3 > &direction, const Mesh< 3 > &subcell_mesh, const Scalar< DataVector > &interior_rest_mass_density, const Scalar< DataVector > &interior_electron_fraction, const Scalar< DataVector > &interior_temperature, const Scalar< DataVector > &interior_pressure, const Scalar< DataVector > &interior_specific_internal_energy, const Scalar< DataVector > &interior_lorentz_factor, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_spatial_velocity, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_magnetic_field, const tnsr::ii< DataVector, 3, Frame::Inertial > &interior_spatial_metric, const Scalar< DataVector > &interior_lapse, const tnsr::I< DataVector, 3, Frame::Inertial > &interior_shift, size_t ghost_zone_size, bool need_tags_for_fluxes) const
 
- Public Member Functions inherited from grmhd::ValenciaDivClean::BoundaryConditions::BoundaryCondition
 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

Apply "soft" reflective boundary condition as described in [165].

All primitive variables at the boundary are copied into ghost zone except :

  • If \(n_iv^i \leq 0\) where \(v^i\) is spatial velocity and \(n_i\) is outward directed normal covector, copy the values of \(v^i\) at the boundary to ghost zone. If \(n_iv^i>0\), spatial velocity in the ghost zone is modified such that the sign of normal component is inverted at the interface i.e. \(v_\text{ghost}^i = v^i - 2*(n_jv^j)n^i\).
  • If \(n_iB^i \leq 0\) where \(B^i\) is magnetic field and \(n_i\) is outward directed normal covector, copy the values of \(B^i\) at the boundary to ghost zone. If \(n_iB^i>0\), magnetic field in the ghost zone is modified such that the sign of normal component is inverted at the interface i.e. \(B_\text{ghost}^i = B^i - 2*(n_jB^j)n^i\).
  • If reflect_both is true, then spatial velocity and magnetic field are are inverted regardless of whether the normal component is pointing outward or inward.
  • However, regardless of whether the normal component of the spatial velocity \(n_iv^i\) is pointing outward or inward, the lorentz factor \(W\) is copied into ghost zone without any modification.
  • Divergence cleaning scalar field \(\Phi\) is set to zero in ghost zone.

Member Function Documentation

◆ get_clone()

auto grmhd::ValenciaDivClean::BoundaryConditions::Reflective::get_clone ( ) const -> std::unique_ptr< domain::BoundaryConditions::BoundaryCondition >
overridevirtual

Member Data Documentation

◆ bc_type

constexpr evolution::BoundaryConditions::Type grmhd::ValenciaDivClean::BoundaryConditions::Reflective::bc_type
staticconstexpr
Initial value:
=
evolution::BoundaryConditions::Type::Ghost

◆ help

constexpr Options::String grmhd::ValenciaDivClean::BoundaryConditions::Reflective::help
staticconstexpr
Initial value:
{
"Reflective boundary conditions, inverting the sign "
"of outgoing normal component of spatial velocity "
"and magnetic field."}

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