Apply hydrodynamic free outflow and no inflow boundary condition to GRMHD primitive variables.
More...
|
using | options = tmpl::list<> |
|
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 > |
|
|
static std::optional< std::string > | dg_ghost (const gsl::not_null< Scalar< DataVector > * > tilde_d, const gsl::not_null< Scalar< DataVector > * > tilde_ye, const gsl::not_null< Scalar< DataVector > * > tilde_tau, const gsl::not_null< tnsr::i< DataVector, 3, Frame::Inertial > * > tilde_s, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_b, const gsl::not_null< Scalar< DataVector > * > tilde_phi, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_d_flux, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_ye_flux, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_tau_flux, const gsl::not_null< tnsr::Ij< DataVector, 3, Frame::Inertial > * > tilde_s_flux, const gsl::not_null< tnsr::IJ< DataVector, 3, Frame::Inertial > * > tilde_b_flux, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > tilde_phi_flux, const gsl::not_null< Scalar< DataVector > * > lapse, const gsl::not_null< tnsr::I< DataVector, 3, Frame::Inertial > * > shift, const 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) |
|
static 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) |
|
static 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) |
|
Apply hydrodynamic free outflow and no inflow boundary condition to GRMHD primitive variables.
All primitive variables at the boundary are copied into ghost zone except :
- If \(n_iv^i \geq 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 normal component is zero at the interface i.e. \(v_\text{ghost}^i = v^i - (n_jv^j)n^i\).
- 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.
- Note
- In principle we need to recompute the Lorentz factor \(W_\text{ghost}\) using \(v_\text{ghost}^i\). However, the case in which skipping that procedure becomes problematic is only when the fluid has relativistic incoming normal speed on the external boundary, which already implies the failure of adopting outflow type boundary conditions.
- Divergence cleaning scalar field \(\Phi\) is set to zero in ghost zone.