SpECTRE  v2024.05.11
grmhd::AnalyticData::KhInstability Class Reference

Analytic initial data for a Kelvin-Helmholtz instability simulation. More...

#include <KhInstability.hpp>

Classes

struct  AdiabaticIndex
 The adiabatic index of the fluid. More...
 
struct  BackgroundDensity
 The mass density outside of the strip. More...
 
struct  BackgroundVelocity
 The velocity along \(x\) outside of the strip. More...
 
struct  MagneticField
 The uniform magnetic field. More...
 
struct  PerturbAmplitude
 The amplitude of the perturbation. More...
 
struct  PerturbWidth
 The characteristic length for the width of the perturbation. More...
 
struct  Pressure
 The initial (constant) pressure of the fluid. More...
 
struct  StripBimedianHeight
 The vertical coordinate of the horizontal bimedian of the strip. More...
 
struct  StripDensity
 The mass density in the strip. More...
 
struct  StripThickness
 The thickness of the strip. More...
 
struct  StripVelocity
 The velocity along \(x\) in the strip. More...
 

Public Types

using equation_of_state_type = EquationsOfState::IdealFluid< true >
 
using options = tmpl::list< AdiabaticIndex, StripBimedianHeight, StripThickness, StripDensity, StripVelocity, BackgroundDensity, BackgroundVelocity, Pressure, PerturbAmplitude, PerturbWidth, MagneticField >
 
- 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

 KhInstability (const KhInstability &)=default
 
KhInstabilityoperator= (const KhInstability &)=default
 
 KhInstability (KhInstability &&)=default
 
KhInstabilityoperator= (KhInstability &&)=default
 
 KhInstability (double adiabatic_index, double strip_bimedian_height, double strip_thickness, double strip_density, double strip_velocity, double background_density, double background_velocity, double pressure, double perturbation_amplitude, double perturbation_width, const std::array< double, 3 > &magnetic_field)
 
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< KhInstability >
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 KhInstability &lhs, const KhInstability &rhs)
 
bool operator!= (const KhInstability &lhs, const KhInstability &rhs)
 

Detailed Description

Analytic initial data for a Kelvin-Helmholtz instability simulation.

This is similar to the data from Section 4.7 of [17]. The initial state consists of a horizontal strip of mass density \(\rho_\text{in}\) moving with horizontal speed \(v_{\text{in}}\). The rest of the fluid possesses mass density \(\rho_\text{out}\), and its horizontal velocity is \(v_{\text{out}}\), both constant. Mathematically,

\begin{align*} \rho(x, y) = \begin{cases} \rho_\text{in}, & \left|y - y_\text{mid}\right| < b/2\\ \rho_\text{out}, & \text{otherwise}, \end{cases} \end{align*}

and

\begin{align*} v_x(x, y) = \begin{cases} v_{\text{in}}, & \left|y - y_\text{mid}\right| < b/2\\ v_{\text{out}}, & \text{otherwise}, \end{cases} \end{align*}

where \(b > 0\) is the thickness of the strip, and \(y = y_\text{mid}\) is its horizontal bimedian. The initial pressure is set equal to a constant, and the system is evolved assuming an ideal fluid of known adiabatic index. Finally, in order to excite the instability, the vertical velocity is initialized to

\begin{align*} v_y(x, y) = A\sin(4\pi x) \left[\exp\left(-\dfrac{(y - y_\text{top})^2}{2\sigma^2}\right) + \exp\left(-\dfrac{(y - y_\text{bot})^2}{2\sigma^2}\right)\right], \end{align*}

whose net effect is to perturb the horizontal boundaries of the strip periodically along the \(x-\)axis. Here \(A\) is the amplitude, \(\sigma\) is a characteristic length for the perturbation width, and \(y_\text{top} = y_\text{mid} + b/2\) and \(y_\text{bot} = y_\text{mid} - b/2\) are the vertical coordinates of the top and bottom boundaries of the strip, respectively.

A uniform magnetic field can be added.

Member Function Documentation

◆ get_clone()

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

Member Data Documentation

◆ help

constexpr Options::String grmhd::AnalyticData::KhInstability::help
staticconstexpr
Initial value:
= {
"Initial data to simulate the magnetized KH instability."}

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