Normal Shock Relations¶
This module computes flow parameters of 1D, stationary, calorically perfect normal shocks (\(\gamma\) is constant).
For a stationary, nonreacting normal shock, total enthalpy is constant (adiabatic flow). For perfect (calorically+thermally) gases, total temperature is thus also constant across the shock.
High-level API¶
minuteman.cpg.normal_shock.lookup_table_by_density ¶
lookup_table_by_density(
density_ratio: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the density ratio, \(\rho_2 / \rho_1\)
Parameters:
-
density_ratio(ArraylikeFloat) –density ratio, \(\rho_2 / \rho_1\). Bounds: \(\left[1.0, \frac{\gamma+1}{\gamma-1}\right]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
minuteman.cpg.normal_shock.lookup_table_by_downstream_mach ¶
lookup_table_by_downstream_mach(
mach_downstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the downstream Mach number, \(M_2\)
Parameters:
-
mach_downstream(ArraylikeFloat) –downstream Mach number, \(M_2\). Bounds: \(\left[\sqrt{\frac{\gamma-1}{2\gamma}}, 1\right]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
minuteman.cpg.normal_shock.lookup_table_by_pitot_pressure ¶
lookup_table_by_pitot_pressure(
pitot_pressure_ratio: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the Rayleigh Pitot tube pressure ratio, \(p_{02} / p_1\)
Parameters:
-
pitot_pressure_ratio(ArraylikeFloat) –Rayleigh Pitot tube pressure ratio, \(p_{02} / p_1\). Bounds: \(\left[ \left( \frac{\gamma+1}{2}\right)^ \frac{\gamma}{\gamma-1}, \infty\right)\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
-
RootFindingError–find_root failed
minuteman.cpg.normal_shock.lookup_table_by_pressure ¶
lookup_table_by_pressure(
pressure_ratio: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the static pressure ratio, \(p_2 / p_1\)
Parameters:
-
pressure_ratio(ArraylikeFloat) –static pressure ratio, \(p_2 / p_1\). Bounds: \([1.0, \infty]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
minuteman.cpg.normal_shock.lookup_table_by_temperature ¶
lookup_table_by_temperature(
temperature_ratio: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the temperature ratio, \(T_2 / T_1\)
Parameters:
-
temperature_ratio(ArraylikeFloat) –temperature ratio, \(T_2 / T_1\). Bounds: \([1.0, \infty]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
-
RootFindingError–find_root failed
minuteman.cpg.normal_shock.lookup_table_by_total_pressure ¶
lookup_table_by_total_pressure(
total_pressure_ratio: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the total pressure ratio, \(p_{02} / p_{01}\)
Parameters:
-
total_pressure_ratio(ArraylikeFloat) –total pressure ratio, \(p_{02} / p_{01}\). Bounds: \((0, 1]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
-
RootFindingError–find_root failed
minuteman.cpg.normal_shock.lookup_table_by_upstream_mach ¶
lookup_table_by_upstream_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat = 1.4
) -> NormalShockTable
Look up a normal shock table result from the upstream Mach number, \(M_1\)
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\). Bounds: \(\left[ 1.0, \infty \right]\)
-
specific_heat_ratio(ArraylikeFloat, default:1.4) –Ratio of specific heats, \(\gamma\). Bounds: \((1, 1.67]\)
Returns:
-
NormalShockTable–Normal shock table result
Raises:
-
OutOfBoundsError–invalid inputs
Low-level API¶
minuteman.cpg.normal_shock.density_ratio_by_mach ¶
density_ratio_by_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat
) -> NDArrayFloat
Computes the density ratio across a normal shock, \(\rho_2 / \rho_1\).
The density ratio \(\rho_2 / \rho_1\) is equivalent to the inverse velocity ratio \(u_1 / u_2\)
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\)
-
specific_heat_ratio(ArraylikeFloat) –ratio of specific heats, \(\gamma\)
Returns:
-
NDArrayFloat–Density ratio, \(\rho_2 / \rho_1\)
minuteman.cpg.normal_shock.entropy_change ¶
Compute the change in specific entropy across a normal shock, \(s_2 - s_1\)
Parameters:
-
total_pressure_ratio(ArraylikeFloat) –total pressure ratio, \(p_{02} / p_{01}\)
-
gas_constant(ArraylikeFloat) –specific gas constant, \(R\)
Returns:
-
NDArrayFloat–Change in specific entropy, \(s_2 - s_1\)
minuteman.cpg.normal_shock.internal_energy_change ¶
internal_energy_change(
pressure_upstream: ArraylikeFloat,
pressure_downstream: ArraylikeFloat,
density_upstream: ArraylikeFloat,
density_downstream: ArraylikeFloat,
) -> NDArrayFloat
Computes the change in specific internal energy across a normal shock, \(e\). This is the Hugoniot relation.
This relates only thermodynamic quantities across a normal shock. This relation is valid for perfect, chemically reacting, and real gases.
Parameters:
-
pressure_upstream(ArraylikeFloat) –upstream static pressure, \(p_1\)
-
pressure_downstream(ArraylikeFloat) –downstream static pressure, \(p_2\)
-
density_upstream(ArraylikeFloat) –upstream static density, \(\rho_1\)
-
density_downstream(ArraylikeFloat) –downstream static density, \(\rho_2\)
Returns:
-
NDArrayFloat–Change in specific internal energy, \(e\)
minuteman.cpg.normal_shock.mach_downstream_by_mach ¶
mach_downstream_by_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat
) -> NDArrayFloat
Computes the Mach number downstream of a normal shock, \(M_2\).
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\)
-
specific_heat_ratio(ArraylikeFloat) –ratio of specific heats, \(\gamma\)
Returns:
-
NDArrayFloat–Downstream Mach number, \(M_2\)
minuteman.cpg.normal_shock.pressure_ratio_by_mach ¶
pressure_ratio_by_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat
) -> NDArrayFloat
Computes the static pressure ratio across a normal shock, \(p_2 / p_1\).
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\)
-
specific_heat_ratio(ArraylikeFloat) –ratio of specific heats, \(\gamma\)
Returns:
-
NDArrayFloat–Static pressure ratio, \(p_2 / p_1\)
minuteman.cpg.normal_shock.temperature_ratio_by_mach ¶
temperature_ratio_by_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat
) -> NDArrayFloat
Computes the temperature ratio across a normal shock, \(T_2 / T_1\).
This is also equivalent to the enthalpy ratio across the normal shock, \(h_2 / h_1\).
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\)
-
specific_heat_ratio(ArraylikeFloat) –ratio of specific heats, \(\gamma\)
Returns:
-
NDArrayFloat–Temperature ratio across shock, \(T_2 / T_1\)
minuteman.cpg.normal_shock.total_pressure_ratio_by_mach ¶
total_pressure_ratio_by_mach(
mach_upstream: ArraylikeFloat, specific_heat_ratio: ArraylikeFloat
) -> NDArrayFloat
Computes the total pressure ratio across a normal shock, \(p_{02} / p_{01}\).
Parameters:
-
mach_upstream(ArraylikeFloat) –upstream Mach number, \(M_1\)
-
specific_heat_ratio(ArraylikeFloat) –ratio of specific heats, \(\gamma\)
Returns:
-
NDArrayFloat–Total pressure ratio across shock, \(p_{02} / p_{01}\)
Data Structures¶
minuteman.cpg.normal_shock.NormalShockTable
dataclass
¶
Normal shock table, for a stationary, calorically perfect gas
mach_upstream: NDArrayFloat
instance-attribute
¶
Upstream mach number, \(M_1\)
mach_downstream: NDArrayFloat
instance-attribute
¶
Downstream mach number, \(M_2\)
temperature_ratio: NDArrayFloat
instance-attribute
¶
Temperature ratio, \(T_2 / T_1\)
pressure_ratio: NDArrayFloat
instance-attribute
¶
Static pressure ratio, \(p_2 / p_1\)
density_ratio: NDArrayFloat
instance-attribute
¶
Density ratio, \(\rho_2 / \rho_1\)
total_pressure_ratio: NDArrayFloat
instance-attribute
¶
Total pressure ratio, \(p_{02} / p_{01}\)
pitot_pressure_ratio: NDArrayFloat
instance-attribute
¶
Rayleigh Pitot tube pressure ratio, \(p_{02} / p_1\)
specific_heat_ratio: NDArrayFloat
instance-attribute
¶
Ratio of specific heats, \(\gamma\)