The Standard Atmosphere & Airspeeds

Every performance number assumes an atmosphere. Learn the layers of the atmosphere, the International Standard Atmosphere (ISA) equations for temperature, pressure, density and speed of sound, pressure and density altitude, and the airspeeds pilots and engineers use — indicated, calibrated, equivalent and true airspeed, ground speed and Mach — with Python implementations of ISA and pitot-static airspeed.

Air gets thinner and (up to 11 km) colder with height. Engines lose thrust, wings need more speed, and the speed of sound drops. To compare aircraft fairly, engineers use a standard model: the International Standard Atmosphere (ISA), defined by ICAO.

Airspeed is surprisingly subtle: the pitot tube measures dynamic pressure, not speed. The airspeed indicator therefore shows a density-dependent 'indicated' speed that differs from the true speed through the air, which differs again from speed over the ground.

An analogy

The atmosphere is like a stack of mattresses: the bottom ones are squashed by everything above (high pressure and density), the top ones are fluffy (low density). A wing 'feels' how many air molecules hit it per second — that's what indicated airspeed measures.

Layers of the atmosphere

Troposphere (0 to ~11 km): weather, temperature falls 6.5 °C per km. Tropopause and lower stratosphere (11–20 km): temperature constant at −56.5 °C in ISA, calm air where airliners cruise. Higher: stratosphere warming (ozone), mesosphere, thermosphere (where the ISS orbits at ~400 km) and exosphere. The Kármán line (100 km) is the conventional edge of space.

Altitudes

Several 'altitudes' are in use:

Airspeeds

IAS: read from the airspeed indicator. CAS: IAS corrected for instrument and position errors. EAS: CAS corrected for compressibility — directly related to dynamic pressure and therefore to lift, stall and structural loads. TAS: actual speed through the air (EAS/√σ). Ground speed: TAS plus wind. Mach number: TAS divided by local speed of sound — the limiting speed at high altitude.

Compressibility and the flight envelope

At high subsonic speed the pitot measures total pressure including compressibility: CAS = a₀√(5[((q_c/p₀) + 1)^(2/7) − 1]). Airliners fly a constant CAS in the climb until reaching their cruise Mach (the 'crossover altitude'), then constant Mach. The upper limit where stall speed approaches the maximum Mach is the 'coffin corner'.

Formulas

Worked example: Temperature at FL100

Given: h = 3048 m, ISA

Find: T.

Answer: −4.8 °C

Worked example: Density at 5 km

Given: p = 54.02 kPa, T = 255.65 K

Find: ρ.

Answer: 0.736 kg/m³ (σ = 0.60)

Worked example: TAS from EAS

Given: EAS 70 m/s at 10 km (σ ≈ 0.337)

Find: TAS.

Answer: ≈ 120.6 m/s

International Standard Atmosphere

import math
# International Standard Atmosphere (troposphere 0-11 km, isothermal 11-20 km)
g0, R, T0, p0, L = 9.80665, 287.053, 288.15, 101325.0, 0.0065
def isa(h):
    if h <= 11000:
        T = T0 - L * h
        p = p0 * (T / T0) ** (g0 / (R * L))
    else:
        T11 = T0 - L * 11000
        p11 = p0 * (T11 / T0) ** (g0 / (R * L))
        T = T11
        p = p11 * math.exp(-g0 * (h - 11000) / (R * T11))
    rho = p / (R * T)
    a = math.sqrt(1.4 * R * T)
    return T, p, rho, a
for h in (0, 5000, 11000, 15000):
    T, p, rho, a = isa(h)
    print(f"h={h:6d} m: T={T-273.15:6.1f} C  p={p/1000:7.2f} kPa  rho={rho:.4f} kg/m3  a={a:.1f} m/s")
# h=     0 m: T=  15.0 C  p= 101.33 kPa  rho=1.2250 kg/m3  a=340.3 m/s
# h=  5000 m: T= -17.5 C  p=  54.02 kPa  rho=0.7361 kg/m3  a=320.5 m/s
# h= 11000 m: T= -56.5 C  p=  22.63 kPa  rho=0.3639 kg/m3  a=295.1 m/s
# h= 15000 m: T= -56.5 C  p=  12.04 kPa  rho=0.1937 kg/m3  a=295.1 m/s

At airliner cruise (11 km) density is only 30% of sea level — which is why jets cruise there: less drag for the same equivalent airspeed, and the engines work efficiently in the cold air.

From pitot pressure to true airspeed

import math
# Pitot-static: indicated -> true airspeed (incompressible approximation)
rho0 = 1.225
def isa_rho(h):
    T = 288.15 - 0.0065 * h
    return 1.225 * (T / 288.15) ** 4.256
q = 3000.0                        # measured dynamic pressure, Pa
EAS = math.sqrt(2 * q / rho0)
for h in (0, 3000, 10000):
    TAS = EAS * math.sqrt(rho0 / isa_rho(h))
    print(f"h={h:5d} m: EAS {EAS:.1f} m/s, TAS {TAS:.1f} m/s")
# Ground speed with 20 m/s headwind
print(f"ground speed at 10 km with 20 m/s headwind: {EAS*math.sqrt(rho0/isa_rho(10000))-20:.1f} m/s")
# h=    0 m: EAS 70.0 m/s, TAS 70.0 m/s
# h= 3000 m: EAS 70.0 m/s, TAS 81.2 m/s
# h=10000 m: EAS 70.0 m/s, TAS 120.6 m/s
# ground speed at 10 km with 20 m/s headwind: 100.6 m/s

The same dynamic pressure (same indicated speed, same stall speed on the dial) means much higher true speed at altitude. Navigation uses TAS and wind to get ground speed; handling and structural limits are set in EAS/CAS. (Above ~M 0.3 compressibility corrections apply.)

Common mistakes

Applications

Key takeaways

Going further