SpECTRE
v2024.05.11
|
Bondi-Michel accretion [127] 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 [127] 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\) [157].
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 [61]
\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 [157]
\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 |