Source code for aerosandbox.library.aerodynamics.normal_shock_relations
# From https://www.grc.nasa.gov/WWW/K-12/airplane/normal.html
[docs]def mach_number_after_normal_shock(
mach_upstream,
gamma=1.4,
):
"""
Computes the mach number immediately after a normal shock wave.
Args:
mach_upstream: The mach number immediately before the normal shock wave.
gamma: The ratio of specific heats of the fluid. 1.4 for air.
Returns: The mach number immediately after the normal shock wave.
"""
gm1 = gamma - 1
m2 = mach_upstream ** 2
return (
(gm1 * m2 + 2) / (2 * gamma * m2 - gm1)
) ** 0.5
[docs]def density_ratio_across_normal_shock(
mach_upstream,
gamma=1.4
):
"""
Computes the ratio of fluid density across a normal shock.
Specifically, returns: rho_after_shock / rho_before_shock
Args:
mach_upstream: The mach number immediately before the normal shock wave.
gamma: The ratio of specific heats of the fluid. 1.4 for air.
Returns: rho_after_shock / rho_before_shock
"""
return (
(gamma + 1) * mach_upstream ** 2
) / (
(gamma - 1) * mach_upstream ** 2 + 2
)
[docs]def temperature_ratio_across_normal_shock(
mach_upstream,
gamma=1.4
):
"""
Computes the ratio of fluid temperature across a normal shock.
Specifically, returns: T_after_shock / T_before_shock
Args:
mach_upstream: The mach number immediately before the normal shock wave.
gamma: The ratio of specific heats of the fluid. 1.4 for air.
Returns: T_after_shock / T_before_shock
"""
gm1 = gamma - 1
m2 = mach_upstream ** 2
return (
(2 * gamma * m2 - gm1) * (gm1 * m2 + 2)
) / (
(gamma + 1) ** 2 * m2
)
[docs]def pressure_ratio_across_normal_shock(
mach_upstream,
gamma=1.4
):
"""
Computes the ratio of fluid static pressure across a normal shock.
Specifically, returns: P_after_shock / P_before_shock
Args:
mach_upstream: The mach number immediately before the normal shock wave.
gamma: The ratio of specific heats of the fluid. 1.4 for air.
Returns: P_after_shock / P_before_shock
"""
m2 = mach_upstream ** 2
return (
2 * gamma * m2 - (gamma - 1)
) / (
(gamma + 1)
)
[docs]def total_pressure_ratio_across_normal_shock(
mach_upstream,
gamma=1.4
):
"""
Computes the ratio of fluid total pressure across a normal shock.
Specifically, returns: Pt_after_shock / Pt_before_shock
Args:
mach_upstream: The mach number immediately before the normal shock wave.
gamma: The ratio of specific heats of the fluid. 1.4 for air.
Returns: Pt_after_shock / Pt_before_shock
"""
return density_ratio_across_normal_shock(
mach_upstream=mach_upstream,
gamma=gamma
) ** (gamma / (gamma - 1)) * (
(gamma + 1) / (2 * gamma * mach_upstream ** 2 - (gamma - 1))
) ** (1 / (gamma - 1))
if __name__ == '__main__':
[docs] def q_ratio(mach):
return (
density_ratio_across_normal_shock(mach) *
(
mach_number_after_normal_shock(mach) *
temperature_ratio_across_normal_shock(mach) ** 0.5
) ** 2
)
q_ratio(2)