International Standard Atmosphere for Aircraft rapid decompression calculations¶
Aircraft rapid decompression calculations require a $\Delta_P$ between cabin and ambient atmosphere as a basic data.
Given a given Cabin pressure $P_{cabin}$, $\Delta_P$ is easilly calculated: $\Delta_P = P_{ambient} - P_{cabin}$
Ambient pressure $P_{ambient}$ is determined by using Standard Atmosphere, also known as ISA (International Standard Atmosphere). ISA defines the atmosphere’s properties (pressure, temperature, density) as a function of altitude.
http://en.wikipedia.org/wiki/International_Standard_Atmosphere
A good reference for a mathematical model of the atmosphere is the NACA report 1235 (http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19930090991.pdf). This report is based on the ICAO standard atmosphere. As stated in SAE AIR5661:
“Consequently, atmospheric properties calculated from NACA Report 1235 equations will match data provided in more current publications, such as for the U.S. and ISA Standard Atmospheres.”
Standard atmosphere for the [0km - 11km] range (troposphere)¶
NACA report 1235, eq.18:
$$ \frac{P}{P_0} = \left[\frac{T_0 - a\times H}{T0}\right]^n=\left[\frac{T}{T_0}\right]^n$$
derived from properties at sea level, with $n=5.2561$, and where $H$ is the altitude in $meters$:
$$P = 101325 \times \left ( 1-2.25569\times 10^{-5}\times H\right ) ^{5.25616}\ [Pa]$$
The temperature are varying linearly in the troposphere (NACA1235, eq.13):
$$T=T_0-a\times H$$
where $a=0.0065°C\times m^-1$ is the troposphere lapse rate
Standard atmosphere for the [11km - 20km] range (stratosphere)¶
Once Tropopause (the boundary layer between the troposphere and the stratosphere) is passed, we reach the stratosphere.
NACA report 1235, eq.30:
$$ log{\frac{P}{P_0}}=n\times log{\left[\frac{T_0-aH^*}{T_0}\right]}-B(H-H^*)$$
$$P=0.223356 \times 101325 * e^{-0.000157688 * (H-11000)}$$
The temperatures in the stratosphere are considered constant and equal to Tropopause temperature $T^*$:
$$T=T^*=216.66\ K$$
where $T^*$, $P^*$ and $H^*$ are respectively the Temperature, Pressure and Altitude for Tropopause.
What looks it like? A bit of python¶
Let see now which those equations draw. We will run for that a couple of Python codelines. Let’s write a function isa(altitude)
that returns a tuple (pressure, temperature):
from math import log, exp, sqrt # import some useful mathematical stuff
def isa(altitude):
""" return a 2-uplet (pressure, temperature) depending on provided altitude.
Units are SI (m, PA, Kelvin)"""
if altitude<=11000:
# troposphere
pressure = 101325 * (1 - 2.25569E-5 * altitude)**5.25616
temperature = 288.14 - 0.00649 * altitude
elif altitude<=20000:
pressure = 0.223356 * 101325 * exp(-0.000157688 * (altitude - 11000)) # stratosphere
temperature = 216.66
else:
raise ValueError('altitude out of range [0-20000m]')
return (pressure, temperature)
Calculated over the altitude range [0-20000m], this looks like:
altitudes = range(0, 21000, 1000) # altitudes from 0 to 20000m every 1000m
# calculate (pressure, temperature) for the given range and put them in a list
values = [isa(alt) for alt in altitudes] # pressure, temperature for all altitudes
# split temperature and pressure into two lists
pressures = [data[0] * 1E-5 for data in values] # convert from Pa to bar
temperatures = [data[1] for data in values] # Kelvin
# we will also store ``pressures_pa`` for la ter use
pressures_pa = [data[0] for data in values]
We will plot temperature and pressure using the amazing Bokeh library
# import plotting functions
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import LinearAxis,Range1d
output_notebook() # prepare it for current notebook
We will plot pressures and temperaturse on the same diagram, using two different Y-axis.
y_range = Range1d(start=min(pressures), end=max(pressures))
p0 = figure(title="ISA values [0-20km]", x_axis_label='altitude (m)',
y_range=y_range, y_axis_label='pressure (bar)', tools=[])
p0.line(altitudes, pressures, color="red", legend='pressure')
# plot temperature
# add a second axis for temperature overlay
p0.extra_y_ranges = {'temp_scale':
Range1d(start=min(temperatures)-5,
end=max(temperatures)+5)}
temp_axis = LinearAxis(y_range_name='temp_scale')
temp_axis.axis_label = 'temperature (deg K)'
p0.add_layout(temp_axis, 'right')
p0.line(altitudes, temperatures, color='blue',
y_range_name='temp_scale', line_dash='dashed',
legend='temperature')
show(p0)
Correction of ambient pressure for cockpit load case¶
The ambient pressure calculated above are fine for any tengential opening hole,i.e for any opening hole whose normal is perpendicular to aircraft velocity.
However, an opening in the cockpit windshield is slightly different. Indeed, the additional pressure given by relative velocity needs to be taken into account.
This is done by correcting ambient pressure $P_{\infty}$ as follows:
$P=\frac{1}{2}\rho_{\infty}.[M_{Aircraft} . M_{\infty}]² . C_p + P_{\infty}$
Where:
- $M_{aircraft}$ is the aircraft mach number.
- $M_{\infty}$ is the sound celerity for the given altitude.
- $P_{\infty}$ is the static ambient for the given altitude.
- $\rho_{\infty}$ is the air density for the given altitude.
- $C_{p}$ is the Aircraft Pressure coefficient.
We thus need to calculate two intermediate variables : $M_{\infty}$, the sound celerity for the given altitude and $\rho_{\infty}$, the density of ambient air.
Sound celerity as a function of temperature¶
Sounc Celerity is calculated as
$$M_{\infty}=\sqrt{K_{heat}\times R_s \times T_{\infty}}$$
with:
- $T_{\infty}$: temperature in Kelvin
- $K_{heat} =1.4$
- $R_s=287$
Air density¶
Using perfect gas laws:
$$\rho_{\infty}=\frac{ P_{\infty}}{R_s\times T_{\infty}}$$
Example for an A330¶
Now, let see the impact of such a pressure correction for a Airbus A330, using $C_p=0.7$ and $M_{Aircraft}=0.82$.
RS = 287
K_HEAT = 1.4
CP = 0.7 # pressure coefficient
Ma = 0.82 # Aicraft mach number
def calc_a_and_rho(P, T):
""" return a tuple (``a``, ``rho``) based on provided Pressure ``P``
and temperature ``T``"""
a = sqrt(K_HEAT * RS * T)
rho = P / (RS * T)
return a, rho
By reusing pressure
and temperature
already calculated above, we will create a mod_pressures
list to plot them
mod_pressures = []
for p, T in zip(pressures_pa, temperatures):
a, rho = calc_a_and_rho(p, T)
mod_p = p + 0.5 * rho * (Ma * a)**2 * CP
mod_pressures.append(mod_p * 1E-5) # store it in bar
y_range = Range1d(start=min(pressures), end=max(mod_pressures))
p1 = figure(title="Modified pressures (A330) -- altitude [0-20km]",
x_axis_label='altitude (m)',
y_range=y_range, y_axis_label='pressure (bar)', tools=[])
p1.line(altitudes, mod_pressures, color="blue", legend='modified pressure')
p1.line(altitudes, pressures, color="red", legend='ambient pressure')
show(p1)
Online Caclulator is available
You can find a dedicated online calculator here