|
SpECTRE
v2025.08.19
|
Bondi-Michel accretion [142] with superposed magnetic field in Schwarzschild spacetime in Cartesian Kerr-Schild coordinates. More...
#include <BondiMichel.hpp>
Classes | |
| struct | IntermediateVars |
| struct | MagFieldStrength |
| The strength of the radial magnetic field. More... | |
| struct | Mass |
| The mass of the black hole. More... | |
| struct | PolytropicExponent |
| The polytropic exponent for the polytropic fluid. More... | |
| struct | SonicDensity |
| The rest mass density of the fluid at the sonic radius. More... | |
| struct | SonicRadius |
| The radius at which the fluid becomes supersonic. More... | |
Public Types | |
| using | equation_of_state_type = EquationsOfState::PolytropicFluid< true > |
| using | options = tmpl::list< Mass, SonicRadius, SonicDensity, PolytropicExponent, MagFieldStrength > |
Public Types inherited from grmhd::AnalyticSolution | |
| template<typename DataType > | |
| using | tags = tmpl::push_back< typename gr::AnalyticSolution< 3 >::template tags< DataType >, hydro::Tags::RestMassDensity< DataType >, hydro::Tags::ElectronFraction< DataType >, hydro::Tags::SpecificInternalEnergy< DataType >, hydro::Tags::Temperature< DataType >, hydro::Tags::Pressure< DataType >, hydro::Tags::SpatialVelocity< DataType, 3 >, hydro::Tags::MagneticField< DataType, 3 >, hydro::Tags::DivergenceCleaningField< DataType >, hydro::Tags::LorentzFactor< DataType >, hydro::Tags::SpecificEnthalpy< DataType > > |
Public Member Functions | |
| BondiMichel (const BondiMichel &)=default | |
| BondiMichel & | operator= (const BondiMichel &)=default |
| BondiMichel (BondiMichel &&)=default | |
| BondiMichel & | operator= (BondiMichel &&)=default |
| BondiMichel (double mass, double sonic_radius, double sonic_density, double polytropic_exponent, double mag_field_strength) | |
| auto | get_clone () const -> std::unique_ptr< evolution::initial_data::InitialData > override |
| template<typename DataType , typename... Tags> | |
| tuples::TaggedTuple< Tags... > | variables (const tnsr::I< DataType, 3 > &x, const double, tmpl::list< Tags... >) const |
Retrieve a collection of hydro variables at (x, t) | |
| template<typename DataType , typename Tag > | |
| tuples::TaggedTuple< Tag > | variables (const tnsr::I< DataType, 3 > &x, const double, tmpl::list< Tag >) const |
| void | pup (PUP::er &) override |
| const EquationsOfState::PolytropicFluid< true > & | equation_of_state () const |
| virtual auto | get_clone () const -> std::unique_ptr< InitialData >=0 |
Static Public Attributes | |
| static constexpr Options::String | help |
Static Public Attributes inherited from grmhd::AnalyticSolution | |
| static constexpr size_t | volume_dim = 3_st |
Protected Member Functions | |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::RestMassDensity< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::RestMassDensity< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::ElectronFraction< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::ElectronFraction< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpecificInternalEnergy< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::SpecificInternalEnergy< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::Pressure< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::Pressure< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::Temperature< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::Temperature< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpatialVelocity< DataType, 3 > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::SpatialVelocity< DataType, 3 > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::MagneticField< DataType, 3 > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::MagneticField< DataType, 3 > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::DivergenceCleaningField< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::DivergenceCleaningField< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::LorentzFactor< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::LorentzFactor< DataType > > |
| template<typename DataType > | |
| auto | variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpecificEnthalpy< DataType > >, const IntermediateVars< DataType > &vars) const -> tuples::TaggedTuple< hydro::Tags::SpecificEnthalpy< DataType > > |
| template<typename DataType , typename Tag , Requires< not tmpl::list_contains_v< tmpl::push_back< hydro::grmhd_tags< DataType >, hydro::Tags::SpecificEnthalpy< DataType > >, Tag > > = nullptr> | |
| tuples::TaggedTuple< Tag > | variables (const tnsr::I< DataType, 3 > &, tmpl::list< Tag >, const IntermediateVars< DataType > &vars) const |
Protected Attributes | |
| double | mass_ = std::numeric_limits<double>::signaling_NaN() |
| double | sonic_radius_ = std::numeric_limits<double>::signaling_NaN() |
| double | sonic_density_ = std::numeric_limits<double>::signaling_NaN() |
| double | polytropic_exponent_ = std::numeric_limits<double>::signaling_NaN() |
| double | mag_field_strength_ = std::numeric_limits<double>::signaling_NaN() |
| double | sonic_fluid_speed_squared_ |
| double | sonic_sound_speed_squared_ |
| double | polytropic_constant_ = std::numeric_limits<double>::signaling_NaN() |
| double | mass_accretion_rate_over_four_pi_ |
| double | bernoulli_constant_squared_minus_one_ |
| double | rest_mass_density_at_infinity_ |
| EquationsOfState::PolytropicFluid< true > | equation_of_state_ {} |
| gr::Solutions::KerrSchild | background_spacetime_ {} |
Friends | |
| bool | operator== (const BondiMichel &lhs, const BondiMichel &rhs) |
Bondi-Michel accretion [142] with superposed magnetic field in Schwarzschild spacetime in Cartesian Kerr-Schild coordinates.
An analytic solution to the 3-D GRMHD system. The user specifies the sonic radius \(r_c\) and sonic rest mass density \(\rho_c\), which are the radius and rest mass density at the sonic point, the radius at which the fluid's Eulerian velocity as seen by a distant observer overtakes the local sound speed \(c_{s,c}\). With a specified polytropic exponent \(\gamma\), these quantities can be related to the sound speed at infinity \(c_{s,\infty}\) using the following relations:
\begin{align*} c_{s,c}^2 &= \frac{M}{2r_c - 3M} \\ c_{s,\infty}^2 &= \gamma - 1 + (c_{s,c}^2 - \gamma + 1)\sqrt{1 + 3c_{s,c}^2} \end{align*}
In the case of the interstellar medium, the sound speed is \(\approx 10^{-4}\), which results in a sonic radius of \(\approx 10^8 M\) for \(\gamma \neq 5/3\) [177].
The density is found via root-finding, through the Bernoulli equation. As one approaches the sonic radius, a second root makes an appearance and one must take care to bracket the correct root. This is done by using the upper bound \(\frac{\dot{M}}{4\pi}\sqrt{\frac{2}{Mr^3}}\).
Additionally specified by the user are the polytropic exponent \(\gamma\), and the strength parameter of the magnetic field \(B_0\). In Cartesian Kerr-Schild coordinates \((x, y, z)\), where \( r = \sqrt{x^2 + y^2 + z^2}\), the superposed magnetic field is [70]
\begin{align*} B^i(\vec{x},t) = \frac{B_0 M^2}{r^3 \sqrt{\gamma}}x^i =\frac{B_0 M^2}{r^3 \sqrt{1 + 2M/r}}x^i. \end{align*}
The accretion rate is
\begin{align*} \dot{M}=4\pi r^2\rho u^r, \end{align*}
and at the sonic radius
\begin{align*} \dot{M}_c=\sqrt{8}\pi \sqrt{M}r_c^{3/2}\rho_c. \end{align*}
The polytropic constant is given by
\begin{align*} K=\frac{1}{\gamma\rho_c^{\gamma-1}} \left[\frac{M(\gamma-1)}{(2r_c-3M)(\gamma-1)-M}\right]. \end{align*}
The density as a function of the sound speed is
\begin{align*} \rho^{\gamma-1}=\frac{(\gamma-1)c_s^2}{\gamma K(\gamma-1-c_s^2)}. \end{align*}
The density at the horizon is given by:
\begin{align*} \rho_h\simeq\frac{1}{16} \left(\frac{5-3\gamma}{2}\right)^{(3\gamma-5)/[2(\gamma-1)]} \frac{\rho_\infty}{c_{s,\infty}^3}. \end{align*}
Using the Lorentz invariance of \(b^2\) we evaluate:
\begin{align*} b^2=\frac{B^2}{W^2}+(B^i v_i)^2= B^r B^r(1-\gamma_{rr}v^r v^r)+B^r B^r v^r v^r =B^r B^r = \frac{B_0^2 M^4}{r^4}, \end{align*}
where \(r\) is the Cartesian Kerr-Schild radius, which is equal to the areal radius for a non-spinning black hole. At the horizon we get
\begin{align*} b^2_h=\frac{B^2_0}{16}. \end{align*}
Finally, we get
\begin{align*} B_0 = 4 \sqrt{b^2_h} = 4\sqrt{\rho_h} \sqrt{\frac{b^2_h}{\rho_h}}, \end{align*}
where the last equality is useful for comparison to papers that give \(b^2_h/\rho_h\).
To help with comparing to other codes the following script can be used to compute \(b^2_h/\rho_h\):
The density at the horizon is given by:
\begin{align*} \rho_h\simeq \frac{1}{16}\frac{\rho_\infty}{u_h c_{s,\infty}^3}, \end{align*}
which gives [177]
\begin{align*} \rho_h\simeq 0.08\frac{\rho_\infty}{c_{s,\infty}^3}. \end{align*}
The magnetic field \(b^2\) is the same as the \(\gamma\ne5/3\).
|
overridevirtual |
Implements evolution::initial_data::InitialData.
|
protected |
|
staticconstexpr |
|
protected |
|
protected |
|
protected |
|
protected |