SpECTRE  v2024.04.12
grmhd::AnalyticData::BlastWave Class Reference

Analytic initial data for a cylindrical or spherical blast wave. More...

#include <BlastWave.hpp>

Classes

struct  AdiabaticIndex
 The adiabatic index of the ideal fluid. More...
 
struct  GeometryOption
 The geometry of the blast wave, i.e. Cylindrical or Spherical. More...
 
struct  InnerDensity
 Density at radii less than InnerRadius. More...
 
struct  InnerPressure
 Pressure at radii less than InnerRadius. More...
 
struct  InnerRadius
 Inside InnerRadius, density is InnerDensity. More...
 
struct  MagneticField
 The x,y,z components of the uniform magnetic field threading the matter. More...
 
struct  OuterDensity
 Density at radii greater than OuterRadius. More...
 
struct  OuterPressure
 Pressure at radii greater than OuterRadius. More...
 
struct  OuterRadius
 Outside OuterRadius, density is OuterDensity. More...
 

Public Types

enum class  Geometry { Cylindrical , Spherical }
 
using equation_of_state_type = EquationsOfState::IdealFluid< true >
 
using options = tmpl::list< InnerRadius, OuterRadius, InnerDensity, OuterDensity, InnerPressure, OuterPressure, MagneticField, AdiabaticIndex, GeometryOption >
 
- Public Types inherited from grmhd::AnalyticDataBase
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

 BlastWave (const BlastWave &)=default
 
BlastWaveoperator= (const BlastWave &)=default
 
 BlastWave (BlastWave &&)=default
 
BlastWaveoperator= (BlastWave &&)=default
 
 BlastWave (double inner_radius, double outer_radius, double inner_density, double outer_density, double inner_pressure, double outer_pressure, const std::array< double, 3 > &magnetic_field, double adiabatic_index, Geometry geometry, const Options::Context &context={})
 
auto get_clone () const -> std::unique_ptr< evolution::initial_data::InitialData > override
 
template<typename DataType , typename Tag1 , typename Tag2 , typename... Tags>
tuples::TaggedTuple< Tag1, Tag2, Tags... > variables (const tnsr::I< DataType, 3 > &x, tmpl::list< Tag1, Tag2, Tags... >) const
 Retrieve a collection of hydrodynamic variables at position x.
 
template<typename DataType , typename Tag , Requires< tmpl::list_contains_v< gr::analytic_solution_tags< 3, DataType >, Tag > > = nullptr>
tuples::TaggedTuple< Tag > variables (const tnsr::I< DataType, 3 > &x, tmpl::list< Tag >) const
 Retrieve the metric variables.
 
const EquationsOfState::IdealFluid< true > & equation_of_state () const
 
void pup (PUP::er &) override
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::RestMassDensity< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::RestMassDensity< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::ElectronFraction< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::ElectronFraction< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpecificInternalEnergy< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::SpecificInternalEnergy< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::Pressure< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::Pressure< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpatialVelocity< DataType, 3 > >) const -> tuples::TaggedTuple< hydro::Tags::SpatialVelocity< DataType, 3 > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::MagneticField< DataType, 3 > >) const -> tuples::TaggedTuple< hydro::Tags::MagneticField< DataType, 3 > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::DivergenceCleaningField< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::DivergenceCleaningField< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::LorentzFactor< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::LorentzFactor< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::SpecificEnthalpy< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::SpecificEnthalpy< DataType > >
 Retrieve the GRMHD variables at a given position.
 
template<typename DataType >
auto variables (const tnsr::I< DataType, 3 > &x, tmpl::list< hydro::Tags::Temperature< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::Temperature< DataType > >
 Retrieve the GRMHD variables at a given position.
 
virtual auto get_clone () const -> std::unique_ptr< InitialData >=0
 
- Public Member Functions inherited from hydro::TemperatureInitialization< BlastWave >
auto variables (const tnsr::I< DataType, Dim > &x, tmpl::list< hydro::Tags::Temperature< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::Temperature< DataType > >
 
auto variables (const tnsr::I< DataType, Dim > &x, const double t, tmpl::list< hydro::Tags::Temperature< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::Temperature< DataType > >
 
auto variables (ExtraVars &extra_variables, const tnsr::I< DataType, Dim > &x, Args &... extra_args, tmpl::list< hydro::Tags::Temperature< DataType > >) const -> tuples::TaggedTuple< hydro::Tags::Temperature< DataType > >
 

Static Public Attributes

static constexpr Options::String help
 
- Static Public Attributes inherited from grmhd::AnalyticDataBase
static constexpr size_t volume_dim = 3_st
 

Friends

bool operator== (const BlastWave &lhs, const BlastWave &rhs)
 
bool operator!= (const BlastWave &lhs, const BlastWave &rhs)
 

Detailed Description

Analytic initial data for a cylindrical or spherical blast wave.

This class implements analytic initial data for a cylindrical blast wave, as described, e.g., in [103] Sec. 6.2.3. A uniform magnetic field threads an ideal fluid. The solution begins with material at fixed (typically high) density and pressure at rest inside a cylinder of radius \(r < r_{\rm in}\) and material at fixed (typically low) density and pressure at rest in a cylindrical shell with radius \(r > r_{\rm out}\). In the region \( r_{\rm in} < r < r_{\rm out}\), the solution transitions such that the logarithms of the density and pressure vary linearly. E.g., if \(\rho(r < r_{\rm in}) = \rho_{\rm in}\) and \(\rho(r > r_{\rm out}) = \rho_{\rm out}\), then

\[ \log \rho = [(r_{\rm in} - r) \log(\rho_{\rm out}) + (r - r_{\rm out}) \log(\rho_{\rm in})] / (r_{\rm in} - r_{\rm out}). \]

Note that the cylinder's axis is the \(z\) axis. To evolve this analytic initial data, use a cubic or cylindrical domain with periodic boundary conditions applied to the outer boundaries whose normals are parallel or antiparallel to the z axis. In the transverse (e.g., x and y) dimensions, the domain should be large enough that the blast wave doesn't reach the boundary at the final time. E.g., if InnerRadius = 0.8, OuterRadius = 1.0, and the final time is 4.0, a good domain extends from (x,y)=(-6.0, -6.0) to (x,y)=(6.0, 6.0).

An analogous problem with spherical geometry has also been used [34] [35] [38]. The magnetic field is chosen to be in the z-direction instead of the x-direction.

Member Function Documentation

◆ get_clone()

auto grmhd::AnalyticData::BlastWave::get_clone ( ) const -> std::unique_ptr< evolution::initial_data::InitialData >
overridevirtual

Member Data Documentation

◆ help

constexpr Options::String grmhd::AnalyticData::BlastWave::help
staticconstexpr
Initial value:
= {
"Cylindrical or spherical blast wave analytic initial data."}

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