SpECTRE  v2026.11.11
Loading...
Searching...
No Matches
grmhd::ValenciaDivClean Namespace Reference

Items related to the Valencia formulation of ideal GRMHD with divergence cleaning coupled with electron fraction. More...

Namespaces

namespace  BoundaryConditions
 Boundary conditions for the GRMHD Valencia Divergence Cleaning system.
namespace  BoundaryCorrections
 Boundary corrections/numerical fluxes.
namespace  fd
 Finite difference functionality for the ValenciaDivClean form of the GRMHD equations.
namespace  HydroSpeed
 Labels for the characteristic speeds of the relativistic hydrodynamics system.
namespace  PrimitiveRecoverySchemes
 Schemes for recovering primitive variables from conservative variables.
namespace  subcell
 Code required by the DG-subcell/FD hybrid solver.
namespace  Tags
 Tags for the Valencia formulation of the ideal GRMHD equations with divergence cleaning.

Classes

struct  ComputeFluxes
 The fluxes of the conservative variables. More...
struct  ComputeSources
 Compute the source terms for the flux-conservative Valencia formulation of GRMHD with divergence cleaning, coupled with electron fraction. More...
struct  ConservativeFromPrimitive
 Compute the conservative variables from primitive variables. More...
class  FixConservatives
 Fix conservative variables using method developed by Foucart. More...
class  Flattener
 Reduces oscillations inside an element in an attempt to guarantee a physical solution of the conserved variables for which the primitive variables can be recovered. More...
class  NumericInitialData
 Numeric initial data loaded from volume data files. More...
struct  PrimitiveFromConservative
 Compute the primitive variables from the conservative variables. More...
class  PrimitiveFromConservativeOptions
 Options to be passed to the Con2Prim algorithm. Currently, we simply set a threshold for tildeD below which the inversion is not performed and the density is set to atmosphere values. More...
struct  SetVariablesNeededFixingToFalse
 Mutator used with Initialization::Actions::AddSimpleTags to initialize the VariablesNeededFixing to false More...
struct  System
 Ideal general relativistic magnetohydrodynamics (GRMHD) system with divergence cleaning coupled with electron fraction. More...
struct  TimeDerivativeTerms
 Compute the time derivative of the conserved variables for the Valencia formulation of the GRMHD equations with divergence cleaning. More...

Functions

template<size_t ThermodynamicDim>
void flux_jacobian_hydro (gsl::not_null< tnsr::iJ< DataVector, 6 > * > characteristic_matrix, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &lorentz_factor, const Scalar< DataVector > &specific_enthalpy, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::II< DataVector, 3, Frame::Inertial > &inv_spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute the characteristic matrix (flux Jacobian) for relativistic hydrodynamics + composition ( \(Y_e\)), in a given direction.
template<size_t ThermodynamicDim>
void numerical_characteristics (gsl::not_null< tnsr::i< DataVector, 6 > * > characteristic_speeds, gsl::not_null< tnsr::ij< DataVector, 6 > * > characteristic_modes, gsl::not_null< tnsr::IJ< DataVector, 6 > * > characteristic_projectors, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &lorentz_factor, const Scalar< DataVector > &specific_enthalpy, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::II< DataVector, 3, Frame::Inertial > &inv_spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute numerical characteristic speeds (eigenvalues), characteristic projectors (left eigenvectors), and characteristic modes (right eigenvectors) in a given direction, from the primitive variables.
template<typename FluxTags, typename BoundaryVarsType>
void compute_fluxes_from_primitives (const gsl::not_null< Variables< FluxTags > * > flux_vars, const BoundaryVarsType &boundary_vars)
 Helper function that computes fluxes from a given set of primitive variables. Primarily used for filling neighbor data when flux information is needed for boundaries.
bool operator!= (const FixConservatives &lhs, const FixConservatives &rhs)
template<typename RecoverySchemesList>
bool operator!= (const Flattener< RecoverySchemesList > &lhs, const Flattener< RecoverySchemesList > &rhs)
bool operator!= (const PrimitiveFromConservativeOptions &lhs, const PrimitiveFromConservativeOptions &rhs)
template<size_t ThermodynamicDim>
std::array< DataVector, 9 > characteristic_speeds_approximate_mhd (const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &specific_enthalpy, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &lorentz_factor, const tnsr::I< DataVector, 3, Frame::Inertial > &magnetic_field, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, 3 > &shift, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute the characteristic speeds for the Valencia formulation of GRMHD with divergence cleaning.
template<size_t ThermodynamicDim>
void characteristic_speeds_approximate_mhd (gsl::not_null< std::array< DataVector, 9 > * > char_speeds, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &specific_enthalpy, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &lorentz_factor, const tnsr::I< DataVector, 3, Frame::Inertial > &magnetic_field, const Scalar< DataVector > &lapse, const tnsr::I< DataVector, 3 > &shift, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute the characteristic speeds for the Valencia formulation of GRMHD with divergence cleaning.
template<size_t ThermodynamicDim>
void characteristic_speeds_hydro (gsl::not_null< tnsr::i< DataVector, 3 > * > characteristic_speeds, const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &lorentz_factor, const Scalar< DataVector > &specific_enthalpy, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute the characteristic speeds for the relativistic hydrodynamics system in the Eulerian frame.
template<size_t ThermodynamicDim>
tnsr::i< DataVector, 3 > characteristic_speeds_hydro (const tnsr::I< DataVector, 3, Frame::Inertial > &spatial_velocity, const Scalar< DataVector > &rest_mass_density, const Scalar< DataVector > &specific_internal_energy, const Scalar< DataVector > &electron_fraction, const Scalar< DataVector > &lorentz_factor, const Scalar< DataVector > &specific_enthalpy, const tnsr::ii< DataVector, 3, Frame::Inertial > &spatial_metric, const tnsr::i< DataVector, 3 > &unit_normal, const EquationsOfState::EquationOfState< true, ThermodynamicDim > &equation_of_state)
 Compute the characteristic speeds for the relativistic hydrodynamics system in the Eulerian frame.

Detailed Description

Items related to the Valencia formulation of ideal GRMHD with divergence cleaning coupled with electron fraction.

References:

  • Numerical 3+1 General Relativistic Magnetohydrodynamics: A Local Characteristic Approach [4]
  • GRHydro: a new open-source general-relativistic magnetohydrodynamics code for the Einstein toolkit [158]
  • Black hole-neutron star mergers with a hot nuclear equation of state: outflow and neutrino-cooled disk for a low-mass, high-spin case [50]

Function Documentation

◆ characteristic_speeds_approximate_mhd() [1/2]

template<size_t ThermodynamicDim>
std::array< DataVector, 9 > grmhd::ValenciaDivClean::characteristic_speeds_approximate_mhd ( const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & lorentz_factor,
const tnsr::I< DataVector, 3, Frame::Inertial > & magnetic_field,
const Scalar< DataVector > & lapse,
const tnsr::I< DataVector, 3 > & shift,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute the characteristic speeds for the Valencia formulation of GRMHD with divergence cleaning.

Obtaining the exact form of the characteristic speeds involves the solution of a nontrivial quartic equation for the fast and slow modes. Here we make use of a common approximation in the literature (e.g. [87]) where the resulting characteristic speeds are analogous to those of the Valencia formulation of the 3-D relativistic Euler system (see RelativisticEuler::Valencia::characteristic_speeds),

\begin{align*}\lambda_2 &= \alpha \Lambda^- - \beta_n,\\ \lambda_{3, 4, 5, 6, 7} &= \alpha v_n - \beta_n,\\ \lambda_{8} &= \alpha \Lambda^+ - \beta_n, \end{align*}

with the substitution

\begin{align*}c_s^2 \longrightarrow c_s^2 + v_A^2(1 - c_s^2) \end{align*}

in the definition of \(\Lambda^\pm\). Here \(v_A\) is the Alfvén speed. In addition, two more speeds corresponding to the divergence cleaning mode and the longitudinal magnetic field are added,

\begin{align*}\lambda_1 = -\alpha - \beta_n,\\ \lambda_9 = \alpha - \beta_n. \end{align*}

Note
The ordering assumed here is such that, in the Newtonian limit, the exact expressions for \(\lambda_{2, 8}\), \(\lambda_{3, 7}\), and \(\lambda_{4, 6}\) should reduce to the corresponding fast modes, Alfvén modes, and slow modes, respectively. See [51] for a detailed description of the hyperbolic characterization of Newtonian MHD. In terms of the primitive variables:

\begin{align*}v^2 &= \gamma_{mn} v^m v^n \\ c_s^2 &= \frac{1}{h} \left[ \left( \frac{\partial p}{\partial \rho} \right)_\epsilon + \frac{p}{\rho^2} \left(\frac{\partial p}{\partial \epsilon} \right)_\rho \right] \\ v_A^2 &= \frac{b^2}{b^2 + \rho h} \\ b^2 &= \frac{1}{W^2} \gamma_{mn} B^m B^n + \left( \gamma_{mn} B^m v^n \right)^2 \end{align*}

where \(\gamma_{mn}\) is the spatial metric, \(\rho\) is the rest mass density, \(W = 1/\sqrt{1-v_i v^i}\) is the Lorentz factor, \(h = 1 + \epsilon + \frac{p}{\rho}\) is the specific enthalpy, \(v^i\) is the spatial velocity, \(\epsilon\) is the specific internal energy, \(p\) is the pressure, and \(B^i\) is the spatial magnetic field measured by an Eulerian observer.

◆ characteristic_speeds_approximate_mhd() [2/2]

template<size_t ThermodynamicDim>
void grmhd::ValenciaDivClean::characteristic_speeds_approximate_mhd ( gsl::not_null< std::array< DataVector, 9 > * > char_speeds,
const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & lorentz_factor,
const tnsr::I< DataVector, 3, Frame::Inertial > & magnetic_field,
const Scalar< DataVector > & lapse,
const tnsr::I< DataVector, 3 > & shift,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute the characteristic speeds for the Valencia formulation of GRMHD with divergence cleaning.

Obtaining the exact form of the characteristic speeds involves the solution of a nontrivial quartic equation for the fast and slow modes. Here we make use of a common approximation in the literature (e.g. [87]) where the resulting characteristic speeds are analogous to those of the Valencia formulation of the 3-D relativistic Euler system (see RelativisticEuler::Valencia::characteristic_speeds),

\begin{align*}\lambda_2 &= \alpha \Lambda^- - \beta_n,\\ \lambda_{3, 4, 5, 6, 7} &= \alpha v_n - \beta_n,\\ \lambda_{8} &= \alpha \Lambda^+ - \beta_n, \end{align*}

with the substitution

\begin{align*}c_s^2 \longrightarrow c_s^2 + v_A^2(1 - c_s^2) \end{align*}

in the definition of \(\Lambda^\pm\). Here \(v_A\) is the Alfvén speed. In addition, two more speeds corresponding to the divergence cleaning mode and the longitudinal magnetic field are added,

\begin{align*}\lambda_1 = -\alpha - \beta_n,\\ \lambda_9 = \alpha - \beta_n. \end{align*}

Note
The ordering assumed here is such that, in the Newtonian limit, the exact expressions for \(\lambda_{2, 8}\), \(\lambda_{3, 7}\), and \(\lambda_{4, 6}\) should reduce to the corresponding fast modes, Alfvén modes, and slow modes, respectively. See [51] for a detailed description of the hyperbolic characterization of Newtonian MHD. In terms of the primitive variables:

\begin{align*}v^2 &= \gamma_{mn} v^m v^n \\ c_s^2 &= \frac{1}{h} \left[ \left( \frac{\partial p}{\partial \rho} \right)_\epsilon + \frac{p}{\rho^2} \left(\frac{\partial p}{\partial \epsilon} \right)_\rho \right] \\ v_A^2 &= \frac{b^2}{b^2 + \rho h} \\ b^2 &= \frac{1}{W^2} \gamma_{mn} B^m B^n + \left( \gamma_{mn} B^m v^n \right)^2 \end{align*}

where \(\gamma_{mn}\) is the spatial metric, \(\rho\) is the rest mass density, \(W = 1/\sqrt{1-v_i v^i}\) is the Lorentz factor, \(h = 1 + \epsilon + \frac{p}{\rho}\) is the specific enthalpy, \(v^i\) is the spatial velocity, \(\epsilon\) is the specific internal energy, \(p\) is the pressure, and \(B^i\) is the spatial magnetic field measured by an Eulerian observer.

◆ characteristic_speeds_hydro() [1/2]

template<size_t ThermodynamicDim>
tnsr::i< DataVector, 3 > grmhd::ValenciaDivClean::characteristic_speeds_hydro ( const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & lorentz_factor,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute the characteristic speeds for the relativistic hydrodynamics system in the Eulerian frame.

These are the eigenvalues of the flux Jacobian projected along a spatial direction with unit normal \( s_i\), measured by an Eulerian observer. They consist of four degenerate modes and two non-degenerate modes:

\begin{align*}\lambda_\mathrm{deg} &= v_n ,\\ \lambda_{\pm} &= \frac{ (1 - c_s^2)\,v_n \pm c_s\,d / W^2 } { 1 - v^2 c_s^2 }. \end{align*}

where

\begin{align*}d &\equiv W\,\sqrt{ 1 - v^2 c_s^2 - v_n^2(1 - c_s^2) } . \end{align*}

The variables are defined as:

\begin{align*}v^2 &= \gamma_{mn} v^m v^n ,\\ v_n &= v^a s_a ,\\ W &= \frac{1}{\sqrt{1 - v^a v_a}} ,\\ h &= 1 + \epsilon + \frac{p}{\rho} ,\\ c_s^2 &= \frac{1}{h}\left(\chi + \kappa \frac{p}{\rho^2}\right) , \end{align*}

The returned tensor has index 0..2, in increasing order (see HydroSpeed):

  • characteristic_speeds.get(0): acoustic speed \(\lambda_-\)
  • characteristic_speeds.get(1): degenerate speed \(v_n\)
  • characteristic_speeds.get(2): acoustic speed \(\lambda_+\)
See also
grmhd::ValenciaDivClean::numerical_characteristics for how these speeds are paired with characteristic modes and characteristic projectors.

◆ characteristic_speeds_hydro() [2/2]

template<size_t ThermodynamicDim>
void grmhd::ValenciaDivClean::characteristic_speeds_hydro ( gsl::not_null< tnsr::i< DataVector, 3 > * > characteristic_speeds,
const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & lorentz_factor,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute the characteristic speeds for the relativistic hydrodynamics system in the Eulerian frame.

These are the eigenvalues of the flux Jacobian projected along a spatial direction with unit normal \( s_i\), measured by an Eulerian observer. They consist of four degenerate modes and two non-degenerate modes:

\begin{align*}\lambda_\mathrm{deg} &= v_n ,\\ \lambda_{\pm} &= \frac{ (1 - c_s^2)\,v_n \pm c_s\,d / W^2 } { 1 - v^2 c_s^2 }. \end{align*}

where

\begin{align*}d &\equiv W\,\sqrt{ 1 - v^2 c_s^2 - v_n^2(1 - c_s^2) } . \end{align*}

The variables are defined as:

\begin{align*}v^2 &= \gamma_{mn} v^m v^n ,\\ v_n &= v^a s_a ,\\ W &= \frac{1}{\sqrt{1 - v^a v_a}} ,\\ h &= 1 + \epsilon + \frac{p}{\rho} ,\\ c_s^2 &= \frac{1}{h}\left(\chi + \kappa \frac{p}{\rho^2}\right) , \end{align*}

The returned tensor has index 0..2, in increasing order (see HydroSpeed):

  • characteristic_speeds.get(0): acoustic speed \(\lambda_-\)
  • characteristic_speeds.get(1): degenerate speed \(v_n\)
  • characteristic_speeds.get(2): acoustic speed \(\lambda_+\)
See also
grmhd::ValenciaDivClean::numerical_characteristics for how these speeds are paired with characteristic modes and characteristic projectors.

◆ compute_fluxes_from_primitives()

template<typename FluxTags, typename BoundaryVarsType>
void grmhd::ValenciaDivClean::compute_fluxes_from_primitives ( const gsl::not_null< Variables< FluxTags > * > flux_vars,
const BoundaryVarsType & boundary_vars )

Helper function that computes fluxes from a given set of primitive variables. Primarily used for filling neighbor data when flux information is needed for boundaries.

Warning
This computes the conservative variables internally. If you also need those, you shouldn't call this function.

◆ flux_jacobian_hydro()

template<size_t ThermodynamicDim>
void grmhd::ValenciaDivClean::flux_jacobian_hydro ( gsl::not_null< tnsr::iJ< DataVector, 6 > * > characteristic_matrix,
const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & lorentz_factor,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::II< DataVector, 3, Frame::Inertial > & inv_spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute the characteristic matrix (flux Jacobian) for relativistic hydrodynamics + composition ( \(Y_e\)), in a given direction.

The characteristic matrix is the Jacobian of the flux along the unit normal \(n_i\) with respect to the conserved variables \(U_n\),

\begin{equation} A_{m}{}^{n} = \frac{\partial (n_i F^i_m)}{\partial U_n}, \end{equation}

evaluated with unit lapse and zero shift. With lapse \(\alpha\) and shift \(\beta^i\), the physical characteristic speeds are \(\alpha \lambda - \beta_n\), where \(\lambda\) are the eigenvalues of this matrix and \(\beta_n = n_i \beta^i\).

The index \(m\) labels the rows of the matrix (the flux components), and the index \(n\) labels its columns (the conserved variables). Both follow the order \((D, S_i, \tau, D Y_e)\), which differs from the order of the system's variables_tag.

Note
The normal must be unit with respect to the spatial metric.
With a 2D equation of state, the pressure must be positive, since \(\kappa = \partial p / \partial \epsilon |_\rho\) is recovered from \(\kappa p / \rho^2\), the only form the 2D interface provides.
The specific enthalpy must be consistent with the equation of state, \(h = 1 + \epsilon + p / \rho\). The matrix uses both \(h\) and \(h - 1 = \epsilon + p / \rho\), which is computed from the equation of state to avoid cancellation when \(h \approx 1\).
See also
grmhd::ValenciaDivClean::numerical_characteristics for the conventions relating this matrix to characteristic speeds, modes, and projectors.
find_real_eigensystem for the index conventions of the matrix.

◆ numerical_characteristics()

template<size_t ThermodynamicDim>
void grmhd::ValenciaDivClean::numerical_characteristics ( gsl::not_null< tnsr::i< DataVector, 6 > * > characteristic_speeds,
gsl::not_null< tnsr::ij< DataVector, 6 > * > characteristic_modes,
gsl::not_null< tnsr::IJ< DataVector, 6 > * > characteristic_projectors,
const tnsr::I< DataVector, 3, Frame::Inertial > & spatial_velocity,
const Scalar< DataVector > & rest_mass_density,
const Scalar< DataVector > & specific_internal_energy,
const Scalar< DataVector > & electron_fraction,
const Scalar< DataVector > & lorentz_factor,
const Scalar< DataVector > & specific_enthalpy,
const tnsr::ii< DataVector, 3, Frame::Inertial > & spatial_metric,
const tnsr::II< DataVector, 3, Frame::Inertial > & inv_spatial_metric,
const tnsr::i< DataVector, 3 > & unit_normal,
const EquationsOfState::EquationOfState< true, ThermodynamicDim > & equation_of_state )

Compute numerical characteristic speeds (eigenvalues), characteristic projectors (left eigenvectors), and characteristic modes (right eigenvectors) in a given direction, from the primitive variables.

Note
Currently, this function only supports building the eigensystem for relativistic hydrodynamics (no magnetic field) with composition dependence ( \(Y_e\)).

The characteristic speeds \(\lambda_{(i)}\) are the eigenvalues of the characteristic matrix in a given direction, \(A_{m}{}^{n}\). The characteristic projectors \(L^{im}\) and modes \(R_{im}\) are its left and right eigenvectors, with the index conventions of find_real_eigensystem. We provide the characteristics in the following types:

  • Eigenvalues \(\lambda_{(i)}\): tnsr::i<DataVector, 6> characteristic_speeds
  • Right eigenvectors \(R_{in}\): tnsr::ij<DataVector, 6> characteristic_modes
  • Left eigenvectors \(L^{im}\): tnsr::IJ<DataVector, 6> characteristic_projectors

We refer to the left eigenvectors as "projectors" because they are used to project a state into the characteristic basis. Similarly, we refer to the right eigenvectors as "modes" because they are used to reconstruct the state. For example, consider a state vector \(U_{m}\) that can be represented in the characteristic basis as

\begin{equation} U_{m} = \sum_i w^{i} R_{im}. \end{equation}

Then, the characteristic fields \(w^{i}\) can be obtained by projecting the state vector \(U_{m}\) into the characteristic basis using the left eigenvectors:

\begin{equation} w^{i} = \sum_m L^{im} U_{m}. \end{equation}

The eigenvalues are in increasing order. The eigenvectors are normalized so that \(\sum_m L^{im} R_{jm} = \delta^{i}_{j}\). The right eigenvectors are not unit vectors.

See also
find_real_eigensystem for the index conventions and for how this eigensystem is computed at each grid point.