SpECTRE  v2024.04.12
NewtonianEuler::AnalyticData::KhInstability< Dim > Class Template Reference

Initial data to simulate the Kelvin-Helmholtz instability. 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  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< false >
 
using options = tmpl::list< AdiabaticIndex, StripBimedianHeight, StripThickness, StripDensity, StripVelocity, BackgroundDensity, BackgroundVelocity, Pressure, PerturbAmplitude, PerturbWidth >
 

Public Member Functions

 KhInstability (const KhInstability &)=default
 
KhInstabilityoperator= (const KhInstability &)=default
 
 KhInstability (KhInstability &&)=default
 
KhInstabilityoperator= (KhInstability &&)=default
 
auto get_clone () const -> std::unique_ptr< evolution::initial_data::InitialData > override
 
 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)
 
template<typename DataType , typename... Tags>
tuples::TaggedTuple< Tags... > variables (const tnsr::I< DataType, Dim, Frame::Inertial > &x, tmpl::list< Tags... >) const
 Retrieve a collection of hydrodynamic variables at position x.
 
const EquationsOfState::IdealFluid< false > & equation_of_state () const
 
void pup (PUP::er &) override
 
virtual auto get_clone () const -> std::unique_ptr< InitialData >=0
 

Static Public Attributes

static constexpr Options::String help
 

Friends

template<size_t SpatialDim>
bool operator== (const KhInstability< SpatialDim > &lhs, const KhInstability< SpatialDim > &rhs)
 

Detailed Description

template<size_t Dim>
class NewtonianEuler::AnalyticData::KhInstability< Dim >

Initial data to simulate the Kelvin-Helmholtz instability.

For comparison purposes, this class implements the planar shear of [159], which is evolved using periodic boundary conditions. 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.

Note
The periodic form of the perturbation enforces the horizontal extent of the domain to be a multiple of 0.5. The domain chosen in [159] is the square \([0, 1]^2\), which covers two wavelengths of the perturbation. In addition, the authors ran their simulations using
AdiabaticIndex: 1.4
StripBimedianHeight: 0.5
StripThickness: 0.5
StripDensity: 2.0
StripVelocity: 0.5
BackgroundDensity: 1.0
BackgroundVelocity: -0.5
Pressure: 2.5
PerturbAmplitude: 0.1
PerturbWidth: 0.035355339059327376 # 0.05/sqrt(2)
auto sqrt(const TensorExpression< T, X, Symm, IndexList, tmpl::list< Args... > > &t)
Returns the tensor expression representing the square root of a tensor expression that evaluates to a...
Definition: SquareRoot.hpp:253
Note
This class can be used to initialize 2D and 3D data. In 3D, the strip is aligned to the \(xy-\)plane, and the vertical direction is taken to be the \(z-\)axis.

Member Function Documentation

◆ get_clone()

template<size_t Dim>
auto NewtonianEuler::AnalyticData::KhInstability< Dim >::get_clone ( ) const -> std::unique_ptr< evolution::initial_data::InitialData >
overridevirtual

Member Data Documentation

◆ help

template<size_t Dim>
constexpr Options::String NewtonianEuler::AnalyticData::KhInstability< Dim >::help
staticconstexpr
Initial value:
= {
"Initial data to simulate the KH instability."}

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