Source code for aerosandbox.atmosphere.thermodynamics.isentropic_flow
import aerosandbox.numpy as np
[docs]def temperature_over_total_temperature(
mach,
gamma=1.4
):
"""
Gives T/T_t, the ratio of static temperature to total temperature.
Args:
mach: Mach number [-]
gamma: The ratio of specific heats. 1.4 for air across most temperature ranges of interest.
"""
return (1 + (gamma - 1) / 2 * mach ** 2) ** -1
[docs]def pressure_over_total_pressure(
mach,
gamma=1.4
):
"""
Gives P/P_t, the ratio of static pressure to total pressure.
Args:
mach: Mach number [-]
gamma: The ratio of specific heats. 1.4 for air across most temperature ranges of interest.
"""
return temperature_over_total_temperature(mach=mach, gamma=gamma) ** (gamma / (gamma - 1))
[docs]def density_over_total_density(
mach,
gamma=1.4
):
"""
Gives rho/rho_t, the ratio of density to density after isentropic compression.
Args:
mach: Mach number [-]
gamma: The ratio of specific heats. 1.4 for air across most temperature ranges of interest.
"""
return temperature_over_total_temperature(mach=mach, gamma=gamma) ** (1 / (gamma - 1))
[docs]def area_over_choked_area(
mach,
gamma=1.4
):
"""
Gives A/A^* (where A^* is "A-star"), the ratio of cross-sectional flow area to the cross-sectional flow area that would result in choked (M=1) flow.
Applicable to 1D isentropic nozzle flow.
Args:
mach: Mach number [-]
gamma: The ratio of specific heats. 1.4 for air across most temperature ranges of interest.
"""
gp1 = gamma + 1
gm1 = gamma - 1
return (
(gp1 / 2) ** (-gp1 / (2 * gm1)) *
(1 + gm1 / 2 * mach ** 2) ** (gp1 / (2 * gm1)) / mach
)
if __name__ == '__main__':
import matplotlib.pyplot as plt
import aerosandbox.tools.pretty_plots as p
fig, ax = plt.subplots()
for name, data in {
"$T/T_t$" : temperature_over_total_temperature(mach),
"$P/P_t$" : pressure_over_total_pressure(mach),
"$A/A^*$" : area_over_choked_area(mach),
r"$\rho/\rho_t$": density_over_total_density(mach),
}.items():
plt.plot(mach, data, label=name)
p.show_plot()