Normal Shock Relations¶
This module computes flow parameters of 1D, stationary, equilibrium reaction normal shocks. The implementation follows that of 1
For a stationary normal shock, total enthalpy is constant (adiabatic flow).
High-level API¶
minuteman.eq.normal_shock.lookup_table_by_density_temperature ¶
lookup_table_by_density_temperature(
density: ArraylikeFloat,
temperature: ArraylikeFloat,
velocity: ArraylikeFloat,
mole_fraction: str = "N2: 0.79, O2: 0.21",
mechanism: str = "airNASA9.yaml",
) -> EqNormalShockSolution
Lookup equilibrium normal shock table properties by upstream density \(\rho_1\) and temperature \(T_1\)
Parameters:
-
density(ArraylikeFloat) –Upstream density \(\rho_1\) [kg/m3]. Bounds: (0, \(\infty\))
-
temperature(ArraylikeFloat) –Upstream temperature \(T_1\) [K]. Bounds: (0, \(\infty\))
-
velocity(ArraylikeFloat) –Upstream velocity \(u_1\) [m/s]. Bounds: (Mach 1, \(\infty\))
-
mole_fraction(str, default:'N2: 0.79, O2: 0.21') –Upstream mole fractions \(X_1\).
-
mechanism(str, default:'airNASA9.yaml') –Reaction mechanism file.
Returns:
-
EqNormalShockSolution–Equilibrium normal shock table.
Raises:
-
OutOfBoundsError–Density or temperature are out of bounds.
minuteman.eq.normal_shock.lookup_table_by_pressure_temperature ¶
lookup_table_by_pressure_temperature(
pressure: ArraylikeFloat,
temperature: ArraylikeFloat,
velocity: ArraylikeFloat,
mole_fraction: str = "N2: 0.79, O2: 0.21",
mechanism: str = "airNASA9.yaml",
) -> EqNormalShockSolution
Lookup equilibrium normal shock table properties by upstream pressure \(p_1\) and temperature \(T_1\)
Parameters:
-
pressure(ArraylikeFloat) –Upstream pressure \(p_1\) [Pa]. Bounds: (0, \(\infty\))
-
temperature(ArraylikeFloat) –Upstream temperature \(T_1\) [K]. Bounds: (0, \(\infty\))
-
velocity(ArraylikeFloat) –Upstream velocity \(u_1\) [m/s]. Bounds: (Mach 1, \(\infty\))
-
mole_fraction(str, default:'N2: 0.79, O2: 0.21') –Upstream mole fractions \(X_1\).
-
mechanism(str, default:'airNASA9.yaml') –Reaction mechanism file.
Returns:
-
EqNormalShockSolution–Equilibrium normal shock table.
Raises:
-
OutOfBoundsError–Pressure or temperature are out of bounds.
minuteman.eq.normal_shock.lookup_table_by_states ¶
Lookup equilibrium normal shock table properties by preinitialized upstream thermodynamic states
Parameters:
-
states1(SolutionArray) –Upstream equilibrium thermodynamic states. Note there is no "equilibrate" call made in this function, the user is responsible for this.
-
velocity(NDArrayFloat) –Upstream velocity \(u_1\). Bounds: (Mach 1, \(\infty\))
Returns:
-
EqNormalShockSolution–Equilibrium normal shock table.
Raises:
-
OutOfBoundsError–Upstream velocity (Mach) is out of bounds
-
RootFindingError–Root finder failed to converge.
Low-level API¶
minuteman.eq.normal_shock.enthalpy_by_density ¶
enthalpy_by_density(
density_ratio: ArraylikeFloat,
velocity_upstream: ArraylikeFloat,
enthalpy_upstream: ArraylikeFloat,
) -> NDArrayFloat
Compute downstream enthalpy \(h_2\) from the density ratio.
Parameters:
-
density_ratio(ArraylikeFloat) –Density ratio \(\rho_1/\rho_2\)
-
velocity_upstream(ArraylikeFloat) –Upstream velocity \(u_1\)
-
enthalpy_upstream(ArraylikeFloat) –Upstream enthalpy \(h_1\)
Returns:
-
NDArrayFloat–Downstream enthalpy \(h_2\)
minuteman.eq.normal_shock.pressure_by_density ¶
pressure_by_density(
density_ratio: ArraylikeFloat,
density_upstream: ArraylikeFloat,
velocity_upstream: ArraylikeFloat,
pressure_upstream: ArraylikeFloat,
) -> NDArrayFloat
Compute downstream pressure \(p_2\) from the density ratio.
Parameters:
-
density_ratio(ArraylikeFloat) –Density ratio \(\rho_1/\rho_2\)
-
density_upstream(ArraylikeFloat) –Upstream density \(\rho_1\)
-
velocity_upstream(ArraylikeFloat) –Upstream velocity \(u_1\)
-
pressure_upstream(ArraylikeFloat) –Upstream pressure \(p_1\)
Returns:
-
NDArrayFloat–Downstream pressure \(p_2\)
Data Structures¶
minuteman.eq.normal_shock.EqFlowStates
dataclass
¶
Equilibrium flow state.
states: ct.SolutionArray
instance-attribute
¶
Thermodynamic states
velocity: NDArrayFloat
instance-attribute
¶
Flow velocity \(u\) [m/s]
speed_of_sound_eq: NDArrayFloat
instance-attribute
¶
Equilibrium speed of sound \(a_{eq}\) [m/s]
speed_of_sound_fr: NDArrayFloat
property
¶
Frozen speed of sound \(a_{f}\) [m/s]
isentropic_exponent: NDArrayFloat
instance-attribute
¶
Isentropic exponent \(\gamma_s\)
pressure: NDArrayFloat
property
¶
Pressure, \(p\) [Pa]
temperature: NDArrayFloat
property
¶
Temperature, \(T\) [K]
density: NDArrayFloat
property
¶
Density, \(\rho\) [kg/\(m^{-3}\)]
mach: NDArrayFloat
property
¶
Mach number, \(M\) (using equilibrium speed of sound)
mass_fraction(name: str) -> NDArrayFloat
¶
Mass fraction \(Y_i\) for species \(i\).
Parameters:
-
name(str) –Species name.
Returns:
-
NDArrayFloat–Mass fraction \(Y_i\).
mole_fraction(name: str) -> NDArrayFloat
¶
Mole fraction \(X_i\) for species \(i\).
Parameters:
-
name(str) –Species name.
Returns:
-
NDArrayFloat–Mole fraction \(X_i\).
number_density(name: str) -> NDArrayFloat
¶
Return number density \(n_i\) for species \(i\).
Parameters:
-
name(str) –Species name
Returns:
-
NDArrayFloat–Number density \(n_i\) [particles/\(m^{-3}\)]
minuteman.eq.normal_shock.EqNormalShockSolution
dataclass
¶
Normal shock solution for a stationary shock in chemical equilibrium.
upstream: EqFlowStates
instance-attribute
¶
Upstream flow properties.
downstream: EqFlowStates
instance-attribute
¶
Downstream flow properties.
temperature_ratio: NDArrayFloat
property
¶
Temperature ratio, \(T_2 / T_1\)
pressure_ratio: NDArrayFloat
property
¶
Static pressure ratio, \(p_2 / p_1\)
density_ratio: NDArrayFloat
property
¶
Density ratio, \(\rho_2 / \rho_1\)
speed_of_sound_ratio: NDArrayFloat
property
¶
Speed of sound ratio, \(a_2 / a_1\)
Error Types¶
References¶
- Anderson, J. D., Jr. (2019). Hypersonic and high-temperature gas dynamics (3rd ed.). American Institute of Aeronautics and Astronautics.