Skip to content
Aerospace Engineering

aerospace-engineering-ai999x

The standard atmosphere, lift and drag, aircraft performance, stability, propulsion and rocket performance, nozzles and orbital transfers.

80capabilities
13topics
80formulas typeset
8worked examples below
1.0.0version
About this model

What Aerospace Engineering does

Aerospace Engineering (aerospace-engineering-ai999x) is an offline Python package for aerospace engineering. It covers the standard atmosphere, lift and drag, aircraft performance, stability, propulsion and rocket performance, nozzles and orbital transfers.

It has 80 capabilities — 80 computational procedures — in 13 topics, the largest being Aircraft performance, Compressible flow, Orbits, Rocket performance, Rocket propulsion and Standard atmosphere. Ask a question in words with ask(), or call a capability by name with typed inputs with solve(). Every answer carries its value and unit, the steps that produced it and the formula in LaTeX.

When a question is not determined — a value is missing, an input is out of range, or the request is outside the package — it says so and names what it needs, instead of guessing. It runs on an ordinary CPU without a network connection (Python >=3.10), and the same question always gets the same answer.

Install

pip install aerospace-engineering-ai999x
hf download AI999X/aerospace-engineering-ai999x --local-dir aerospace-engineering-ai999x

What it covers

Aerodynamics3Critical Mach number of an airfoil · Elliptic wing by lifting-line theory · Thin-airfoil theory for a NACA 4-digit airfoilAircraft performance24Absolute ceiling of a jet aircraft · Best lift coefficients and lift-to-drag ratios of a drag polar · Breguet range of a jet aircraft …Airspeeds4Calibrated airspeed from true airspeed · Mach number from pitot and static pressures · Total (stagnation) air temperature in flight …Compressible flow13Fanno flow (adiabatic duct flow with friction) · Isentropic flow ratios at a Mach number · Mach number from the area ratio A/A* …Nozzles2Choked mass flow through a nozzle throat · Normal shock position in a converging-diverging nozzleOrbits9Bi-elliptic transfer between circular orbits · Circular orbit at an altitude above the Earth · Circular-orbit altitude for an orbital period …Propellers and rotors2Ideal hover power of a rotor (momentum theory) · Ideal propeller in axial flight (momentum theory)Re-entry3Ballistic coefficient · Peak deceleration of a ballistic re-entry (Allen-Eggers) · Speed and deceleration of a ballistic re-entry at an altitudeRocket performance7Burnout height and apogee of a vertical rocket · Delta-v of a multistage rocket · Gravity loss of a vertical rocket burn …Rocket propulsion6Characteristic velocity c* of a rocket propellant · Ideal rocket engine performance · Ideal rocket exhaust velocity …Rockets1Rocket thrust and specific impulse from mass flow and exhaust velocityStability1Neutral point and static margin (wing and tail)Standard atmosphere5Density altitude from pressure altitude and temperature · Geopotential height from geometric altitude · Mach number, dynamic pressure, equivalent airspeed and Reynolds number at an altitude …
Try it

Worked examples

Each question below was put to aerospace-engineering-ai999x and the answer shown is the one it returned, with the steps it took.

Standard atmospherem.ask(…)

ISA properties: h = 35000 ft

T = 218.9241756 K
p = 23908.90662 Pa
rho = 0.380455436 kg/m^3
a = 296.6142276 m/s
mu = 1.434083685e-05 Pa*s
sigma = 0.3105760801
Show the steps
  1. Standard atmosphere at an altitude
    T = T_b + L(H - H_b),\quad p = p_b\left(\frac{T_b}{T}\right)^{g_0/(RL)},\quad \rho = \frac{p}{RT},\quad a = \sqrt{\gamma R T}
    with h = 35000 ft
    → T = 218.9241756 K, p = 23908.90662 Pa, rho = 0.380455436 kg/m^3, a = 296.6142276 m/s, mu = 1.434083685e-05 Pa*s, sigma = 0.3105760801 kg/m^3, delta = 0.2359625622 kg/m^3, theta = 0.7597576804 kg/m^3, H = 10650.12683 m
Compressible flowm.ask(…)

Normal shock: M1 = 2

M2 = 0.5773502692
p2_p1 = 4.5
T2_T1 = 1.6875
rho2_rho1 = 2.666666667
p02_p01 = 0.7208738615
p02_p1 = 5.640440813
Show the steps
  1. Normal shock relations
    \frac{p_2}{p_1} = 1 + \frac{2\gamma}{\gamma+1}(M_1^2 - 1),\quad \frac{\rho_2}{\rho_1} = \frac{(\gamma+1)M_1^2}{(\gamma-1)M_1^2 + 2},\quad M_2^2 = \frac{1 + \frac{\gamma-1}{2}M_1^2}{\gamma M_1^2 - \frac{\gamma-1}{2}}
    with M1 = 2
    → M2 = 0.5773502692, p2_p1 = 4.5, T2_T1 = 1.6875, rho2_rho1 = 2.666666667, p02_p01 = 0.7208738615, p02_p1 = 5.640440813
Airspeedsm.ask(…)

True airspeed: CAS = 250 kt, hp = 30000 ft

TAS = 202.4112964 m/s
TAS_kt = 393.4560838
qc = 10498.2154 Pa
M = 0.6675168197
Show the steps
  1. True airspeed from calibrated airspeed
    q_c = p_0\left[\left(1 + 0.2\,\frac{V_c^2}{a_0^2}\right)^{3.5} - 1\right],\quad M = \sqrt{5\left[\left(\frac{q_c}{p} + 1\right)^{2/7} - 1\right]},\quad V = M a
    with CAS = 128.6111111 m/s, hp = 30000 ft
    → TAS = 202.4112964 m/s, TAS_kt = 393.4560838 m/s, qc = 10498.2154 Pa, M = 0.6675168197 m/s
Aircraft performancem.ask(…)

Breguet range: V = 230 m/s, c = 0.6 1/h, LD = 17, W0 = 2000 kN, W1 = 1500 kN

R = 6749021.42 m
R_km = 6749.02142
t = 29343.57139 s
t_h = 8.150992053
Show the steps
  1. Breguet range of a jet aircraft
    R = \frac{V}{g_0 c}\,\frac{L}{D}\,\ln\frac{W_0}{W_1}
    with V = 230 m/s, c = 1.699527022e-05 kg/(N*s), LD = 17, W0 = 2000 kN, W1 = 1500 kN
    → R = 6749021.42 m, R_km = 6749.02142 m, t = 29343.57139 s, t_h = 8.150992053 m
Compressible flowm.solve(…)
m.solve("aero_oblique_shock", M1=2, theta="10 deg")
beta_deg = 39.31393184
M2 = 1.640522229
p2_p1 = 1.706578604
T2_T1 = 1.170151284
rho2_rho1 = 1.458425613
p02_p01 = 0.9846440225
Show the steps
  1. Oblique shock from the deflection angle
    \tan\theta = 2\cot\beta\,\frac{M_1^2\sin^2\beta - 1}{M_1^2(\gamma + \cos 2\beta) + 2},\quad M_{n1} = M_1\sin\beta,\quad M_2 = \frac{M_{n2}}{\sin(\beta - \theta)}
    with M1 = 2, theta = 10 deg
    → beta_deg = 39.31393184, M2 = 1.640522229, p2_p1 = 1.706578604, T2_T1 = 1.170151284, rho2_rho1 = 1.458425613, p02_p01 = 0.9846440225, Mn1 = 1.267138036
Aerodynamicsm.ask(…)

Critical Mach: Cp0 = -0.43, rule = prandtl-glauert

M_cr = 0.7371059142
Cp_cr = -0.6363043586
Show the steps
  1. Critical Mach number of an airfoil
    C_{p,cr} = \frac{2}{\gamma M^2}\left[\left(\frac{2 + (\gamma-1)M^2}{\gamma+1}\right)^{\frac{\gamma}{\gamma-1}} - 1\right] = \frac{C_{p0}}{\sqrt{1 - M^2}}
    with Cp0 = -0.43, rule = prandtl-glauert
    → M_cr = 0.7371059142, Cp_cr = -0.6363043586
Nozzlesm.ask(…)

Choked mass flow: p0 = 100 kPa, T0 = 300 K, A = 10 cm^2

mdot = 0.233334283 kg/s
p_star = 52828.17877 Pa
T_star = 250 K
V_star = 316.9677826 m/s
Show the steps
  1. Choked mass flow through a nozzle throat
    \dot m = \frac{p_0 A^*}{\sqrt{R T_0}}\sqrt{\gamma}\left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}
    with p0 = 100 kPa, T0 = 300 K, A = 10 cm^2
    → mdot = 0.233334283 kg/s, p_star = 52828.17877 Pa, T_star = 250 K, V_star = 316.9677826 m/s
Orbitsm.ask(…)

Altitude for period: T = 40554.74657601441 s

h = 19134409.8 m
h_km = 19134.4098
v = 3952.682983 m/s
Show the steps
  1. Circular-orbit altitude for an orbital period
    R + h = \left(\mu\,\frac{T^2}{4\pi^2}\right)^{1/3}
    with T = 40554.74658 s
    → h = 19134409.8 m, h_km = 19134.4098 m, v = 3952.682983 m/s
Use it

From Python or the command line

Every snippet was run as shown; the output under it is what it printed.

import aerospace_engineering_ai999x as m

a = m.ask("ISA properties: h = 35000 ft")
print(a.outcome)
print(a.values)
for step in a.steps:
    print(step["name"])
Output
SOLVED
{'T': 218.924175599, 'p': 23908.9066172, 'rho': 0.380455436006, 'a': 296.614227594, 'mu': 1.43408368522e-05, 'sigma': 0.310576080137, 'delta': 0.235962562223, 'theta': 0.75975768037, 'H': 10650.126831}
Standard atmosphere at an altitude
Figures

Computed, not drawn by hand

Every value in these figures was computed by the package, each point a run of solve(); in a notebook, plot() and plot_relation() draw a capability's curves the same way.

The standard atmosphere: temperature with altitude

T = T_b + L(H - H_b),\quad p = p_b\left(\frac{T_b}{T}\right)^{g_0/(RL)},\quad \rho = \frac{p}{RT},\quad a = \sqrt{\gamma R T}
The standard atmosphere: temperature with altitudeTemperature of the International Standard Atmosphere from 0 to 47 km, 95 altitudes computed by the package (it covers the atmosphere to 47 km): 288.15 K at sea level, the tropospheric lapse to 216.774 K at 11 km (marked), the isothermal layer (coldest computed point 216.65 K at 11.5 km) and the warming stratosphere, 269.684 K at 47 km.22024026028002040216.774 K at 11 kmtemperatureT — temperature [K]h — geometric altitude [km]
Temperature of the International Standard Atmosphere from 0 to 47 km, 95 altitudes computed by the package (it covers the atmosphere to 47 km): 288.15 K at sea level, the tropospheric lapse to 216.774 K at 11 km (marked), the isothermal layer (coldest computed point 216.65 K at 11.5 km) and the warming stratosphere, 269.684 K at 47 km.

Ground speed around the compass in a wind

\sin\delta = \frac{V_w\sin(W - C)}{V},\quad V_g = V\cos\delta - V_w\cos(W - C)
Ground speed around the compass in a windGround speed for every course (5° steps) of an aircraft flying 100 m/s through a 20 m/s wind from 300°, each solved by the package's wind triangle: slowest 80 m/s heading into the wind (course 300°), fastest 120 m/s with it (course 120°, marked); largest wind correction 11.537°.40 m/s80 m/s120 m/sN30°60°E120°150°S210°240°W300°330°120 m/sground speedairspeedwindground speed by course [m/s] (north up)
Ground speed for every course (5° steps) of an aircraft flying 100 m/s through a 20 m/s wind from 300°, each solved by the package's wind triangle: slowest 80 m/s heading into the wind (course 300°), fastest 120 m/s with it (course 120°, marked); largest wind correction 11.537°.

Drag polar and the best lift-to-drag ratio

C_{L,md} = \sqrt{\frac{C_{D0}}{K}},\quad \left(\frac{L}{D}\right)_{max} = \frac{1}{2\sqrt{C_{D0}K}},\quad K = \frac{1}{\pi e A\!R}
Drag polar and the best lift-to-drag ratioDrag polar C_D = C_D0 + C_Di for C_D0 = 0.02, aspect ratio 10 and Oswald factor 0.8: the induced drag at 41 speeds from the package (W = 10000 N, S = 16 m², sea level); the tangent from the origin touches at the best lift-to-drag point it computes — marked: C_D = 0.04, C_L = 0.708982, L/D = 17.7245.00.050.10.150.200.511.52C_D0 = 0.02C_L = 0.708982computed points (41 speeds)(L/D)max = 17.7245C_D — drag coefficientC_L — lift coefficient
Drag polar C_D = C_D0 + C_Di for C_D0 = 0.02, aspect ratio 10 and Oswald factor 0.8: the induced drag at 41 speeds from the package (W = 10000 N, S = 16 m², sea level); the tangent from the origin touches at the best lift-to-drag point it computes — marked: C_D = 0.04, C_L = 0.708982, L/D = 17.7245.

The normal-shock table

\frac{p_2}{p_1} = 1 + \frac{2\gamma}{\gamma+1}(M_1^2 - 1),\quad \frac{\rho_2}{\rho_1} = \frac{(\gamma+1)M_1^2}{(\gamma-1)M_1^2 + 2},\quad M_2^2 = \frac{1 + \frac{\gamma-1}{2}M_1^2}{\gamma M_1^2 - \frac{\gamma-1}{2}}
The normal-shock tableThe normal-shock table for air (γ = 1.4): for upstream Mach numbers M₁ = 1.5, 2, 3, 4, 5 (rows, top to bottom) the downstream Mach number and the pressure, density, temperature and stagnation-pressure ratios, every cell computed by the package and each column shaded by its own largest value; at M₁ = 2: M₂ = 0.57735, p₂/p₁ = 4.5, ρ₂/ρ₁ = 2.66667, T₂/T₁ = 1.6875, p₀₂/p₀₁ = 0.720874.0.70110.57740.47520.4350.4152M₂2.4584.510.3318.529p₂/p₁1.8622.6673.8574.5715ρ₂/ρ₁1.321.6882.6794.0475.8T₂/T₁0.92980.72090.32830.13880.0617p₀₂/p₀₁
The normal-shock table for air (γ = 1.4): for upstream Mach numbers M₁ = 1.5, 2, 3, 4, 5 (rows, top to bottom) the downstream Mach number and the pressure, density, temperature and stagnation-pressure ratios, every cell computed by the package and each column shaded by its own largest value; at M₁ = 2: M₂ = 0.57735, p₂/p₁ = 4.5, ρ₂/ρ₁ = 2.66667, T₂/T₁ = 1.6875, p₀₂/p₀₁ = 0.720874.

Bi-elliptic burns against a Hohmann transfer

v = \sqrt{\mu\left(\frac{2}{r} - \frac{1}{a}\right)},\quad t = \pi\left(\sqrt{\frac{a_1^3}{\mu}} + \sqrt{\frac{a_2^3}{\mu}}\right)
Bi-elliptic burns against a Hohmann transferThe three burns of bi-elliptic transfers from a circular orbit of r₁ = 12756.3 km to 15 r₁ around the Earth, stacked, for five intermediate apoapses, against the Hohmann transfer's 2.99743 km/s, all from the package; totals r_b = 17 r₁: 2.99791 km/s; r_b = 25 r₁: 2.9904 km/s; r_b = 35 r₁: 2.97848 km/s; r_b = 45 r₁: 2.96888 km/s; r_b = 60 r₁: 2.95846 km/s.012317 r₁25 r₁35 r₁45 r₁60 r₁Hohmannfirst burnsecond burnthird burnHohmann (total)intermediate apoapsis r_bΔv [km/s]
The three burns of bi-elliptic transfers from a circular orbit of r₁ = 12756.3 km to 15 r₁ around the Earth, stacked, for five intermediate apoapses, against the Hohmann transfer's 2.99743 km/s, all from the package; totals r_b = 17 r₁: 2.99791 km/s; r_b = 25 r₁: 2.9904 km/s; r_b = 35 r₁: 2.97848 km/s; r_b = 45 r₁: 2.96888 km/s; r_b = 60 r₁: 2.95846 km/s.

Ballistic entry: speed with altitude

V = V_E\exp\left(-\frac{\rho_0 H e^{-h/H}}{2\beta\sin\gamma_E}\right),\quad a = \frac{\rho V^2}{2\beta}
Ballistic entry: speed with altitudeSpeed against altitude of a ballistic entry (m = 1000 kg, C_D = 1, A = 1 m², entry speed 7 km/s, vertical), 91 altitudes computed by the package; marked: peak deceleration 127.649 g at h = 15.6746 km, V = 4.24571 km/s.0246020406080127.649 gentry speedV — speed [km/s]h — altitude [km]
Speed against altitude of a ballistic entry (m = 1000 kg, C_D = 1, A = 1 m², entry speed 7 km/s, vertical), 91 altitudes computed by the package; marked: peak deceleration 127.649 g at h = 15.6746 km, V = 4.24571 km/s.
Formulas

The mathematics inside

12 of its 80 formulas; every one is in the capability browser below.

Standard atmosphere at an altitude
T = T_b + L(H - H_b),\quad p = p_b\left(\frac{T_b}{T}\right)^{g_0/(RL)},\quad \rho = \frac{p}{RT},\quad a = \sqrt{\gamma R T}
Normal shock relations
\frac{p_2}{p_1} = 1 + \frac{2\gamma}{\gamma+1}(M_1^2 - 1),\quad \frac{\rho_2}{\rho_1} = \frac{(\gamma+1)M_1^2}{(\gamma-1)M_1^2 + 2},\quad M_2^2 = \frac{1 + \frac{\gamma-1}{2}M_1^2}{\gamma M_1^2 - \frac{\gamma-1}{2}}
True airspeed from calibrated airspeed
q_c = p_0\left[\left(1 + 0.2\,\frac{V_c^2}{a_0^2}\right)^{3.5} - 1\right],\quad M = \sqrt{5\left[\left(\frac{q_c}{p} + 1\right)^{2/7} - 1\right]},\quad V = M a
Breguet range of a jet aircraft
R = \frac{V}{g_0 c}\,\frac{L}{D}\,\ln\frac{W_0}{W_1}
Oblique shock from the deflection angle
\tan\theta = 2\cot\beta\,\frac{M_1^2\sin^2\beta - 1}{M_1^2(\gamma + \cos 2\beta) + 2},\quad M_{n1} = M_1\sin\beta,\quad M_2 = \frac{M_{n2}}{\sin(\beta - \theta)}
Critical Mach number of an airfoil
C_{p,cr} = \frac{2}{\gamma M^2}\left[\left(\frac{2 + (\gamma-1)M^2}{\gamma+1}\right)^{\frac{\gamma}{\gamma-1}} - 1\right] = \frac{C_{p0}}{\sqrt{1 - M^2}}
Choked mass flow through a nozzle throat
\dot m = \frac{p_0 A^*}{\sqrt{R T_0}}\sqrt{\gamma}\left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}
Circular-orbit altitude for an orbital period
R + h = \left(\mu\,\frac{T^2}{4\pi^2}\right)^{1/3}
Elliptic wing by lifting-line theory
a = \frac{a_0}{1 + \frac{a_0}{\pi A\!R}},\quad C_{D_i} = \frac{C_L^2}{\pi A\!R},\quad \alpha_i = \frac{C_L}{\pi A\!R}
Absolute ceiling of a jet aircraft
\sigma_{abs} = \frac{2W\sqrt{K C_{D0}}}{T_0} = \frac{W}{T_0 (L/D)_{max}}
Calibrated airspeed from true airspeed
q_c = p\left[\left(1 + 0.2M^2\right)^{3.5} - 1\right],\quad V_{c} = a_0\sqrt{5\left[\left(\frac{q_c}{p_0} + 1\right)^{2/7} - 1\right]}
Fanno flow (adiabatic duct flow with friction)
\frac{\bar f L^*}{D} = \frac{1 - M^2}{\gamma M^2} + \frac{\gamma+1}{2\gamma}\ln\frac{(\gamma+1)M^2}{2 + (\gamma-1)M^2},\quad \frac{p}{p^*} = \frac{1}{M}\sqrt{\frac{\gamma+1}{2 + (\gamma-1)M^2}}
Capabilities

Every capability, with an example

Search by name, formula, input or topic. Each capability opens to show what it takes, what it returns, when it applies, and a question it answered.

80 capabilities

Aerodynamics 3

Critical Mach number of an airfoilaero_critical_mach

The free-stream Mach number at which the flow first reaches sonic speed at the airfoil's minimum-pressure point, from its incompressible minimum pressure coefficient and a compressibility rule (Prandtl-Glauert or Karman-Tsien), air (gamma = 1.4).

C_{p,cr} = \frac{2}{\gamma M^2}\left[\left(\frac{2 + (\gamma-1)M^2}{\gamma+1}\right)^{\frac{\gamma}{\gamma-1}} - 1\right] = \frac{C_{p0}}{\sqrt{1 - M^2}}

Inputs

  • Cp0 incompressible minimum pressure coefficient (negative)
  • rule compressibility correction: prandtl-glauert or karman-tsien choice

Returns

  • M_cr critical Mach number
  • Cp_cr critical (sonic) pressure coefficient at M_cr

Applies when

  • -3 <= Cp0 < -0.01
  • subsonic, small-perturbation compressibility rules
  • air, gamma = 1.4

Example

m.ask("Critical Mach: Cp0 = -0.43, rule = prandtl-glauert")
→ M_cr = 0.737106, Cp_cr = -0.636304
Elliptic wing by lifting-line theoryaero_elliptic_wing_lifting_line

The lift-curve slope, lift coefficient, induced drag coefficient and induced angle of attack of an untwisted elliptic wing of a given aspect ratio at an angle of attack measured from zero lift (Prandtl lifting-line theory, span efficiency 1).

a = \frac{a_0}{1 + \frac{a_0}{\pi A\!R}},\quad C_{D_i} = \frac{C_L^2}{\pi A\!R},\quad \alpha_i = \frac{C_L}{\pi A\!R}

Inputs

  • AR aspect ratio
  • alpha angle of attack from zero lift (deg) [rad]
  • a0 section lift-curve slope per radian (default 2 pi) optional

Returns

  • CL_alpha wing lift-curve slope per radian
  • CL wing lift coefficient
  • CDi induced drag coefficient
  • alpha_i_deg induced angle of attack in degrees

Applies when

  • 2 <= AR <= 40
  • 3 <= a0 <= 7.5 per rad
  • |alpha| <= 15 deg
  • untwisted elliptic planform, attached flow

Example

m.ask("Elliptic wing: AR = 2, alpha = 0.1 rad")
→ CL_alpha = 3.14159, CL = 0.314159, CDi = 0.015708, alpha_i_deg = 2.86479
Thin-airfoil theory for a NACA 4-digit airfoilaero_naca4_thin_airfoil

The zero-lift angle, lift coefficient and the pitching-moment coefficients about the quarter chord and the leading edge of a cambered NACA 4-digit airfoil at an angle of attack, from thin-airfoil theory.

C_L = 2\pi(\alpha - \alpha_{L0}),\quad \alpha_{L0} = -\frac{1}{\pi}\int_0^\pi \frac{dz}{dx}(\cos\theta - 1)\,d\theta,\quad C_{m,c/4} = \frac{\pi}{4}(A_2 - A_1)

Inputs

  • m maximum camber as a fraction of the chord (first digit / 100)
  • p chordwise position of maximum camber (second digit / 10; 0 for a symmetric section)
  • alpha angle of attack (deg) [rad]

Returns

  • alpha_L0_deg zero-lift angle of attack in degrees
  • CL section lift coefficient
  • Cm_c4 moment coefficient about the quarter chord
  • Cm_le moment coefficient about the leading edge

Applies when

  • 0 <= m <= 0.095
  • 0.05 <= p <= 0.95 when m > 0
  • |alpha| <= 15 deg
  • thin airfoil, inviscid, incompressible, unstalled

Example

m.ask("NACA 0012 thin airfoil: alpha = 0.1 rad")
→ alpha_L0_deg = 0, CL = 0.628319, Cm_c4 = 0, Cm_le = -0.15708

Aircraft performance 24

Absolute ceiling of a jet aircraftaero_absolute_ceiling_jet

The absolute ceiling of a jet aircraft (where the available thrust just equals the minimum drag) when the thrust falls in proportion to the air density, T = T0 rho/rho0.

\sigma_{abs} = \frac{2W\sqrt{K C_{D0}}}{T_0} = \frac{W}{T_0 (L/D)_{max}}

Inputs

  • W weight [N]
  • S wing area [m^2]
  • T0 sea-level thrust [N]
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor

Returns

  • h_abs absolute ceiling [m]
  • h_abs_ft absolute ceiling in feet
  • sigma density ratio at the ceiling

Applies when

  • minimum drag below the sea-level thrust
  • ceiling below 47 km
  • thrust proportional to density (stated lapse)
  • parabolic drag polar

Example

m.solve("aero_absolute_ceiling_jet", W=100000.0, S=30.0, T0=13486.71062689471, CD0=0.02, AR=7.0, e=0.8)
→ h_abs = 6669.77 m, h_abs_ft = 21882.4, sigma = 0.5
Best lift coefficients and lift-to-drag ratios of a drag polaraero_drag_polar_optimum

For a parabolic drag polar CD = CD0 + CL^2/(pi e AR): the lift coefficient and L/D for minimum drag (maximum L/D), for minimum power (best propeller endurance) and for the jet's best range (maximum sqrt(CL)/CD).

C_{L,md} = \sqrt{\frac{C_{D0}}{K}},\quad \left(\frac{L}{D}\right)_{max} = \frac{1}{2\sqrt{C_{D0}K}},\quad K = \frac{1}{\pi e A\!R}

Inputs

  • CD0 zero-lift (parasite) drag coefficient
  • AR wing aspect ratio b^2/S
  • e Oswald span efficiency factor

Returns

  • CL_md lift coefficient for minimum drag
  • LD_max maximum lift-to-drag ratio
  • CL_mp lift coefficient for minimum power required
  • LD_mp L/D at minimum power
  • CL_mr lift coefficient for best jet range (max sqrt(CL)/CD)
  • LD_mr L/D at best jet range

Applies when

  • 0.002 <= CD0 <= 0.2
  • 1 <= AR <= 50
  • 0.3 <= e <= 1
  • parabolic drag polar

Example

m.ask("Drag polar: CD0 = 0.02, AR = 10, e = 0.8")
→ CL_md = 0.708982, LD_max = 17.7245, CL_mp = 1.22799, LD_mp = 15.3499, CL_mr = 0.409331, LD_mr = 15.3499
Breguet range of a jet aircraftaero_breguet_range_jet

The cruise range and flight time of a jet aircraft at constant speed and lift-to-drag ratio (cruise-climb) from its thrust-specific fuel consumption and the weights at the start and end of cruise.

R = \frac{V}{g_0 c}\,\frac{L}{D}\,\ln\frac{W_0}{W_1}

Inputs

  • V cruise true airspeed [m/s]
  • c thrust-specific fuel consumption (kg/(N*s), 1/h, lb/(lbf*h)) [kg/(N*s)]
  • LD lift-to-drag ratio
  • W0 weight at the start of cruise [N]
  • W1 weight at the end of cruise [N]

Returns

  • R range [m]
  • R_km range in km
  • t flight time [s]
  • t_h flight time in hours

Applies when

  • V > 0
  • 0 < W1 < W0
  • 1 <= L/D <= 60
  • constant V, L/D and TSFC (cruise-climb)

Example

m.ask("Breguet range: V = 200 m/s, c = 1 1/h, LD = 15, W0 = 271.8281828459045 kN, W1 = 100 kN")
→ R = 1.08e+07 m, R_km = 10800, t = 54000 s, t_h = 15
Breguet range of a propeller aircraftaero_breguet_range_prop

The cruise range of a propeller-driven aircraft at constant lift-to-drag ratio and propeller efficiency from its power-specific fuel consumption and initial and final weights.

R = \frac{\eta_p}{g_0 c_P}\,\frac{L}{D}\,\ln\frac{W_0}{W_1}

Inputs

  • eta propeller efficiency
  • c power-specific fuel consumption (kg/J, g/(kW*h), lb/(hp*h)) [kg/J]
  • LD lift-to-drag ratio
  • W0 initial weight [N]
  • W1 final weight [N]

Returns

  • R range [m]
  • R_km range in km

Applies when

  • 0.1 <= eta <= 1
  • 0 < W1 < W0
  • 1 <= L/D <= 60
  • constant L/D, efficiency and BSFC

Example

m.ask("Propeller range: eta = 0.8, c = 0.0000001 kg/J, LD = 15, W0 = 27.18281828459045 kN, W1 = 10 kN")
→ R = 1.22366e+07 m, R_km = 12236.6
Endurance of a jet aircraftaero_breguet_endurance_jet

The time a jet aircraft can stay airborne at constant lift-to-drag ratio from its thrust-specific fuel consumption and initial and final weights (independent of speed).

E = \frac{1}{g_0 c}\,\frac{L}{D}\,\ln\frac{W_0}{W_1}

Inputs

  • c thrust-specific fuel consumption (kg/(N*s), 1/h, lb/(lbf*h)) [kg/(N*s)]
  • LD lift-to-drag ratio
  • W0 initial weight [N]
  • W1 final weight [N]

Returns

  • E endurance [s]
  • E_h endurance in hours

Applies when

  • 0 < W1 < W0
  • 1 <= L/D <= 60
  • constant L/D and TSFC

Example

m.ask("Jet endurance: c = 1 1/h, LD = 15, W0 = 271.8281828459045 kN, W1 = 100 kN")
→ E = 54000 s, E_h = 15
Endurance of a propeller aircraft at constant altitudeaero_prop_endurance_constant_altitude

How long a propeller-driven aircraft can loiter at a constant altitude and lift coefficient, from its propeller efficiency, power-specific fuel consumption, drag polar point, wing area and weights.

E = \frac{\eta_p}{g_0 c_P}\,\frac{C_L^{3/2}}{C_D}\sqrt{2\rho S}\left(W_1^{-1/2} - W_0^{-1/2}\right)

Inputs

  • eta propeller efficiency
  • c power-specific fuel consumption [kg/J]
  • CL lift coefficient
  • CD drag coefficient
  • S wing area [m^2]
  • h altitude [m]
  • W0 initial weight [N]
  • W1 final weight [N]

Returns

  • E endurance [s]
  • E_h endurance in hours

Applies when

  • 0.1 <= eta <= 1
  • 0 < W1 < W0
  • 0.05 <= CL <= 3
  • constant altitude and CL

Example

m.ask("Propeller endurance: eta = 0.8, c = 0.0000001 kg/J, CL = 1, CD = 0.05, S = 20 m^2, h = 0 m, W0 = 40 kN, W1 = 10 kN")
→ E = 571041 s, E_h = 158.622
Fuel a jet needs for a cruise rangeaero_jet_fuel_for_range

The fuel weight (and mass) a jet aircraft burns cruising a distance at constant speed and L/D, and its weight at the end, from the Breguet relation.

W_1 = W_0\exp\left(-\frac{R\,g_0 c}{V\,(L/D)}\right)

Inputs

  • R cruise distance (km, nmi) [m]
  • V cruise speed [m/s]
  • c thrust-specific fuel consumption [kg/(N*s)]
  • LD lift-to-drag ratio
  • W0 weight at the start of cruise [N]

Returns

  • W1 weight at the end of cruise [N]
  • Wf fuel weight burned [N]
  • mf fuel mass burned [kg]

Applies when

  • R, V > 0
  • fuel at most 80% of W0
  • constant V, L/D and TSFC

Example

m.ask("Fuel for range: R = 10800 km, V = 200 m/s, c = 1 1/h, LD = 15, W0 = 271.8281828459045 kN")
→ W1 = 100000 N, Wf = 171828 N, mf = 17521.6 kg
Glide ratio, angle and rangeaero_glide_range

The still-air glide range R = h (L/D) from a height h, the glide angle atan(D/L) and, with the airspeed, the sink rate and time aloft.

R = h\,\frac{L}{D},\quad \tan\gamma = \frac{D}{L}

Inputs

  • dh height to be lost [m]
  • LD lift-to-drag (glide) ratio
  • V airspeed along the glide path (optional) [m/s] optional

Returns

  • range glide range over the ground [m]
  • range_km glide range, km
  • glide_angle_deg glide angle below the horizon, degrees
  • sink_rate sink rate V sin(gamma) [m/s]
  • time time to lose the height [s]

Applies when

  • h > 0
  • 0 < L/D <= 100
  • still air, steady glide

Example

m.ask("Glide range: h = 2000 m, LD = 15")
→ range = 30000 m, range_km = 30, glide_angle_deg = 3.81407
Induced drag in level flightaero_induced_drag

The lift coefficient, induced drag coefficient CL^2/(pi e AR), induced drag and induced power of an aircraft in level flight at a true airspeed and altitude.

C_{D_i} = \frac{C_L^2}{\pi e A\!R},\quad D_i = \frac{W^2}{q S\,\pi e A\!R}

Inputs

  • W aircraft weight [N]
  • S wing area [m^2]
  • V true airspeed [m/s]
  • h altitude (standard atmosphere) [m]
  • AR wing aspect ratio b^2/S
  • e Oswald span efficiency factor

Returns

  • CL lift coefficient
  • CDi induced drag coefficient
  • Di induced drag [N]
  • P_induced induced power Di V [W]

Applies when

  • W, S, V > 0
  • 1 <= AR <= 50
  • 0.3 <= e <= 1
  • level flight, L = W

Example

m.ask("Induced drag: W = 10 kN, S = 16 m^2, V = 50 m/s, h = 0 m, AR = 8, e = 0.8")
→ CL = 0.408164, CDi = 0.00828588, Di = 203.004 N, P_induced = 10150.2 W
Jet range at constant altitude and lift coefficientaero_jet_range_constant_altitude

The range and flight time of a jet cruising at a constant altitude and constant lift coefficient, so that its speed falls as fuel burns (the second Breguet form).

R = \frac{2}{g_0 c}\sqrt{\frac{2}{\rho S}}\,\frac{C_L^{1/2}}{C_D}\left(\sqrt{W_0} - \sqrt{W_1}\right)

Inputs

  • W0 initial weight [N]
  • W1 final weight [N]
  • S wing area [m^2]
  • h cruise altitude [m]
  • CL cruise lift coefficient
  • CD cruise drag coefficient
  • c thrust-specific fuel consumption [kg/(N*s)]

Returns

  • R range [m]
  • R_km range in km
  • t flight time [s]
  • t_h flight time in hours

Applies when

  • 0 < W1 < W0
  • 0.05 <= CL <= 3
  • CD < CL
  • constant altitude, CL and TSFC

Example

m.ask("Jet range at constant altitude: W0 = 400 kN, W1 = 100 kN, S = 100 m^2, h = 0 m, CL = 0.5, CD = 0.05, c = 0.00001 kg/(N*s)")
→ R = 1.16539e+07 m, R_km = 11653.9, t = 141363 s, t_h = 39.2674
Landing ground rollaero_landing_ground_roll

The ground-roll distance and time from touchdown to a stop of an aircraft braking on a level runway, with aerodynamic drag, lift (which unloads the wheels) and optional reverse thrust.

s = \frac{1}{2B}\ln\left(1 + \frac{B V_{TD}^2}{A}\right),\quad A = g\left(\frac{T_r}{W} + \mu\right),\quad B = \frac{g\rho S}{2W}(C_D - \mu C_L)

Inputs

  • W weight at landing [N]
  • S wing area [m^2]
  • h airfield altitude [m]
  • VTD touchdown speed [m/s]
  • mu braking friction coefficient
  • CL lift coefficient during the roll
  • CD drag coefficient during the roll
  • Tr reverse thrust (default 0) [N] optional

Returns

  • s ground-roll distance [m]
  • t ground-roll time [s]

Applies when

  • 0 <= mu <= 0.8
  • the net deceleration positive throughout
  • level runway, no wind, constant reverse thrust

Example

m.ask("Landing roll: W = 10 kN, S = 10 m^2, h = 0 m, VTD = 30 m/s, mu = 0.4, CL = 0.25, CD = 0.1")
→ s = 114.718 m, t = 7.64787 s
Level coordinated turn at a bank angleaero_level_turn_bank

The load factor, turn radius, turn rate and the time for a full circle of an aircraft in a level, coordinated turn at a true airspeed and bank angle.

n = \frac{1}{\cos\phi},\quad R = \frac{V^2}{g\tan\phi},\quad \omega = \frac{g\tan\phi}{V}

Inputs

  • V true airspeed [m/s]
  • phi bank angle (deg) [rad]
  • g gravity (default 9.80665 m/s^2) [m/s^2] optional

Returns

  • n load factor L/W
  • phi_deg bank angle in degrees
  • R turn radius [m]
  • omega turn rate [rad/s]
  • omega_deg turn rate in degrees per second
  • t_360 time for a 360-degree turn [s]

Applies when

  • 1 deg <= phi <= 85 deg
  • V > 0
  • level, coordinated turn at constant speed

Example

m.ask("Level turn at bank angle: V = 100 m/s, phi = 45 deg")
→ n = 1.41421, phi_deg = 45, R = 1019.72 m, omega = 0.0980665 rad/s, omega_deg = 5.6188, t_360 = 64.0707 s
Level turn at a load factoraero_level_turn_load_factor

The bank angle, turn radius, turn rate and time for a full circle of a level coordinated turn flown at a true airspeed and load factor (g).

R = \frac{V^2}{g\sqrt{n^2 - 1}},\quad \omega = \frac{g\sqrt{n^2-1}}{V}

Inputs

  • V true airspeed [m/s]
  • n load factor (g)
  • g gravity (default 9.80665 m/s^2) [m/s^2] optional

Returns

  • n load factor
  • phi_deg bank angle in degrees
  • R turn radius [m]
  • omega turn rate [rad/s]
  • omega_deg turn rate in degrees per second
  • t_360 time for a 360-degree turn [s]

Applies when

  • 1.0002 <= n <= 11.5
  • V > 0
  • level, coordinated turn at constant speed

Example

m.ask("Level turn at load factor: V = 100 m/s, n = 2")
→ n = 2, phi_deg = 60, R = 588.733 m, omega = 0.169856 rad/s, omega_deg = 9.73204, t_360 = 36.9912 s
Lift coefficient in level flightaero_level_flight_lift_coefficient

The lift coefficient CL = 2W/(rho V^2 S) needed for steady level flight at a true airspeed and altitude, with the dynamic pressure.

C_L = \frac{2W}{\rho V^2 S}

Inputs

  • W aircraft weight [N]
  • S wing area [m^2]
  • V true airspeed (m/s, kt, km/h) [m/s]
  • h altitude (standard atmosphere) [m]

Returns

  • CL lift coefficient
  • q dynamic pressure [Pa]
  • wing_loading wing loading W/S [N/m^2]

Applies when

  • W, S, V > 0
  • -1 km <= h <= 47 km
  • level flight, L = W

Example

m.ask("Lift coefficient in level flight: W = 10 kN, S = 16 m^2, V = 50 m/s, h = 0 m")
→ CL = 0.408164, q = 1531.25 Pa, wing_loading = 625 N/m^2
Maximum rate of climb of a jetaero_max_rate_of_climb_jet

The maximum rate of climb of a jet aircraft (constant thrust) at an altitude, the speed at which it occurs and the climb angle there, for a parabolic drag polar.

V^2 = \frac{T + \sqrt{T^2 + 12ab}}{6a},\quad RC_{max} = \frac{V(T - aV^2 - b/V^2)}{W}

Inputs

  • W weight [N]
  • S wing area [m^2]
  • h altitude [m]
  • T available thrust [N]
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor

Returns

  • RC_max maximum rate of climb [m/s]
  • V speed for the maximum rate of climb [m/s]
  • gamma_deg climb angle at that speed, degrees

Applies when

  • minimum drag < T < 0.8 W
  • small climb angle (lift = weight)
  • parabolic drag polar

Example

m.solve("aero_max_rate_of_climb_jet", W=100000.0, S=30.0, h=0.0, T=30000.0, CD0=0.02, AR=7.0, e=0.8)
→ RC_max = 31.1332 m/s, V = 167.945 m/s, gamma_deg = 10.6831
Maximum rate of climb of a propeller aircraftaero_max_rate_of_climb_prop

The maximum rate of climb of a propeller aircraft (constant shaft power and propeller efficiency) at an altitude, the speed for it (minimum power required) and the climb angle there.

RC_{max} = \frac{\eta_p P - P_{R,min}}{W},\quad V_{mp} = \sqrt{\frac{2W}{\rho S}}\left(\frac{K}{3C_{D0}}\right)^{1/4}

Inputs

  • W weight [N]
  • S wing area [m^2]
  • h altitude [m]
  • P shaft power (W, kW, hp) [W]
  • eta propeller efficiency
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor

Returns

  • RC_max maximum rate of climb [m/s]
  • V speed for the maximum rate of climb [m/s]
  • gamma_deg climb angle in degrees

Applies when

  • available power above the minimum power required
  • climb angle below 30 degrees (lift = weight)
  • parabolic drag polar

Example

m.solve("aero_max_rate_of_climb_prop", W=11000.0, S=16.0, h=0.0, P=120000.0, eta=0.8, CD0=0.03, AR=7.5, e=0.8)
→ RC_max = 6.02265 m/s, V = 29.356 m/s, gamma_deg = 11.8388
Service ceiling of a jet aircraftaero_service_ceiling_jet

The service ceiling of a jet aircraft: the altitude where its maximum rate of climb has fallen to 100 ft/min (0.508 m/s, or a stated value), with thrust proportional to density.

RC_{max}(h_s) = RC_s,\quad T(h) = T_0\frac{\rho(h)}{\rho_0}

Inputs

  • W weight [N]
  • S wing area [m^2]
  • T0 sea-level thrust [N]
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor
  • RCs rate of climb that defines the ceiling (default 100 ft/min = 0.508 m/s) [m/s] optional

Returns

  • h_s service ceiling [m]
  • h_s_ft service ceiling in feet

Applies when

  • T0 < 0.8 W
  • climb possible at sea level
  • ceiling below 47 km
  • thrust proportional to density
  • small climb angle

Example

m.solve("aero_service_ceiling_jet", W=100000.0, S=30.0, T0=30000.0, CD0=0.02, AR=7.0, e=0.8)
→ h_s = 12557.9 m, h_s_ft = 41200.5
Speeds for minimum drag, minimum power and best jet rangeaero_min_drag_power_speeds

In steady level flight at an altitude: the speed for minimum drag and the minimum drag, the speed for minimum power required and that power, and the jet's best-range speed, for a parabolic drag polar.

V_{md} = \sqrt{\frac{2W}{\rho S}\sqrt{\frac{K}{C_{D0}}}},\quad D_{min} = 2W\sqrt{K C_{D0}},\quad V_{mp} = \frac{V_{md}}{3^{1/4}}

Inputs

  • W aircraft weight (N, kN, lbf) [N]
  • S wing area (m^2, ft^2) [m^2]
  • h altitude (standard atmosphere) [m]
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor

Returns

  • V_md speed for minimum drag (max L/D) [m/s]
  • D_min minimum drag [N]
  • V_mp speed for minimum power required [m/s]
  • P_min minimum power required [W]
  • V_mr best-range speed of a jet (max V/D) [m/s]

Applies when

  • W, S > 0
  • -1 km <= h <= 47 km
  • parabolic drag polar
  • steady level flight, L = W

Example

m.ask("Speeds for minimum drag: W = 10 kN, S = 20 m^2, h = 0 m, CD0 = 0.02, AR = 10, e = 0.8")
→ V_md = 33.9324 m/s, D_min = 564.19 N, V_mp = 25.7831 m/s, P_min = 16796.9 W, V_mr = 44.6576 m/s
Stall speed in level flightaero_stall_speed

The stall speed V_s = sqrt(2W/(rho S CL_max)) of an aircraft in level flight at an altitude of the standard atmosphere, as true and equivalent airspeed.

V_s = \sqrt{\frac{2W}{\rho S C_{L,max}}}

Inputs

  • W aircraft weight (N, kN, lbf) [N]
  • S wing area (m^2, ft^2) [m^2]
  • CLmax maximum lift coefficient
  • h altitude (standard atmosphere) [m]

Returns

  • V_stall stall speed (true airspeed) [m/s]
  • V_stall_kt stall speed in knots (TAS)
  • EAS_stall stall speed as equivalent airspeed [m/s]
  • wing_loading wing loading W/S [N/m^2]

Applies when

  • W, S > 0
  • 0.5 <= CL_max <= 5
  • -1 km <= h <= 47 km
  • level flight, load factor 1

Example

m.ask("Stall speed: W = 10 kN, S = 16 m^2, CLmax = 1.6, h = 0 m")
→ V_stall = 25.2538 m/s, V_stall_kt = 49.0895, EAS_stall = 25.2538 m/s, wing_loading = 625 N/m^2
Steepest climb angle of a jetaero_max_climb_angle_jet

The maximum climb angle of a jet aircraft (constant thrust, small-angle approximation lift = weight), the speed for it and the rate of climb at that speed.

\sin\gamma_{max} = \frac{T}{W} - \frac{1}{(L/D)_{max}}

Inputs

  • W weight [N]
  • S wing area [m^2]
  • h altitude [m]
  • T available thrust [N]
  • CD0 zero-lift drag coefficient
  • AR aspect ratio
  • e Oswald efficiency factor

Returns

  • gamma_max_deg maximum climb angle in degrees
  • V speed for the steepest climb [m/s]
  • RC rate of climb at that speed [m/s]

Applies when

  • minimum drag < T < 0.8 W
  • lift = weight (small angle)
  • parabolic drag polar

Example

m.ask("Maximum climb angle: W = 100 kN, S = 30 m^2, h = 0 m, T = 30 kN, CD0 = 0.02, AR = 7, e = 0.8")
→ gamma_max_deg = 13.4482, V = 95.7843 m/s, RC = 22.2762 m/s
Takeoff ground rollaero_takeoff_ground_roll

The ground-roll distance and time to lift-off speed of an aircraft accelerating under constant thrust against aerodynamic drag and rolling friction on a level runway.

s = \frac{1}{2B}\ln\frac{A}{A - BV_{LO}^2},\quad A = g\left(\frac{T}{W} - \mu\right),\quad B = \frac{g\rho S}{2W}(C_D - \mu C_L)

Inputs

  • W weight [N]
  • S wing area [m^2]
  • h airfield altitude (standard atmosphere) [m]
  • T thrust (constant during the roll) [N]
  • mu rolling friction coefficient
  • CL lift coefficient during the ground run
  • CD drag coefficient during the ground run
  • VLO lift-off speed [m/s]

Returns

  • s ground-roll distance [m]
  • t ground-roll time [s]

Applies when

  • thrust large enough to keep accelerating up to VLO
  • 0 <= mu <= 0.8
  • constant thrust, level runway, no wind

Example

m.ask("Takeoff roll: W = 10 kN, S = 10 m^2, h = 0 m, T = 3 kN, mu = 0.02, CL = 1, CD = 0.02, VLO = 40 m/s")
→ s = 291.347 m, t = 14.5674 s
Time to climb with a linearly decreasing rate of climbaero_time_to_climb

The time to climb between two altitudes when the maximum rate of climb falls linearly from its sea-level value to zero at the absolute ceiling (the standard textbook model).

t = \int_{h_1}^{h_2}\frac{dh}{RC_0(1 - h/H_c)} = \frac{H_c}{RC_0}\ln\frac{H_c - h_1}{H_c - h_2}

Inputs

  • RC0 maximum rate of climb at sea level (m/s, ft/min) [m/s]
  • Hc absolute ceiling [m]
  • h1 starting altitude [m]
  • h2 final altitude [m]

Returns

  • t time to climb [s]
  • t_min time to climb in minutes

Applies when

  • 0 <= h1 < h2 < Hc
  • RC(h) = RC0 (1 - h/Hc) (stated linear model)

Example

m.ask("Time to climb: RC0 = 10 m/s, Hc = 10 km, h1 = 0 m, h2 = 6321.205588285577 m")
→ t = 1000 s, t_min = 16.6667
Wind triangle: heading and ground speedaero_wind_triangle

The heading to fly, the wind correction angle and the ground speed for an aircraft of a given true airspeed to make good a true course in a wind (direction the wind blows from, and its speed).

\sin\delta = \frac{V_w\sin(W - C)}{V},\quad V_g = V\cos\delta - V_w\cos(W - C)

Inputs

  • TAS true airspeed (kt, km/h, m/s) [m/s]
  • course true course to make good (deg) [rad]
  • wind_from direction the wind blows from (deg true) [rad]
  • wind_speed wind speed [m/s]

Returns

  • heading_deg true heading to fly, degrees
  • wca_deg wind correction angle, degrees (positive = right of course)
  • GS ground speed [m/s]
  • GS_kt ground speed in knots

Applies when

  • crosswind component below 0.99 TAS
  • positive ground speed
  • angles in [0, 360] degrees

Example

m.ask("Wind triangle: TAS = 100 kt, course = 90 deg, wind_from = 90 deg, wind_speed = 20 kt")
→ heading_deg = 90, wca_deg = 0, GS = 41.1556 m/s, GS_kt = 80
Wing loadingaero_wing_loading

The wing loading W/S of an aircraft in N/m^2, as a mass per area (kg/m^2) and in lbf/ft^2.

\frac{W}{S}

Inputs

  • W aircraft weight (N, kN, lbf) [N]
  • S wing area (m^2, ft^2) [m^2]

Returns

  • wing_loading wing loading W/S [N/m^2]
  • wing_loading_kg_m2 wing loading as mass per area, kg/m^2
  • wing_loading_psf wing loading in lbf/ft^2

Applies when

  • W, S > 0

Example

m.ask("Wing loading: W = 600 kN, S = 120 m^2")
→ wing_loading = 5000 N/m^2, wing_loading_kg_m2 = 509.858, wing_loading_psf = 104.427

Airspeeds 4

Calibrated airspeed from true airspeedaero_calibrated_airspeed

The calibrated airspeed, impact pressure and pitot total pressure of an aircraft flying at a true airspeed at a pressure altitude (subsonic, compressible pitot formula).

q_c = p\left[\left(1 + 0.2M^2\right)^{3.5} - 1\right],\quad V_{c} = a_0\sqrt{5\left[\left(\frac{q_c}{p_0} + 1\right)^{2/7} - 1\right]}

Inputs

  • V true airspeed (m/s, km/h, kt) [m/s]
  • hp pressure altitude (m, ft) [m]
  • T outside air temperature (default: standard temperature) [K] optional

Returns

  • CAS calibrated airspeed [m/s]
  • CAS_kt calibrated airspeed in knots
  • qc impact pressure pt - p [Pa]
  • pt pitot total pressure [Pa]

Applies when

  • V > 0
  • flight Mach number below 1
  • -1 km <= hp <= 47 km
  • 150 K <= T <= 350 K

Example

m.ask("Calibrated airspeed: V = 150 kt, hp = 0 ft")
→ CAS = 77.1667 m/s, CAS_kt = 150, qc = 3694.38 Pa, pt = 105019 Pa
Mach number from pitot and static pressuresaero_mach_from_pitot

The flight Mach number from the static pressure and the pitot (total) pressure: the isentropic relation when subsonic, the Rayleigh pitot formula (normal shock ahead of the probe) when supersonic.

\frac{p_{t2}}{p_1} = \left[\frac{(\gamma+1)^2 M^2}{4\gamma M^2 - 2(\gamma-1)}\right]^{\frac{\gamma}{\gamma-1}}\frac{1 - \gamma + 2\gamma M^2}{\gamma + 1}

Inputs

  • p static pressure [Pa]
  • pt pitot (total) pressure measured by the probe [Pa]
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M flight Mach number

Applies when

  • pt > p > 0
  • M <= 20
  • 1.05 <= gamma <= 1.7

Example

m.ask("Mach from pitot: p = 10 kPa, pt = 18.92929158737854 kPa")
→ M = 1
Total (stagnation) air temperature in flightaero_total_temperature

The total (stagnation) air temperature, the ram temperature rise and the Mach number of an aircraft flying at a true airspeed through air of a static temperature (full recovery, perfect gas, air gamma = 1.4).

T_0 = T + \frac{V^2}{2c_p} = T\left(1 + \frac{\gamma-1}{2}M^2\right)

Inputs

  • V true airspeed [m/s]
  • T static (outside) air temperature [K]

Returns

  • T0 total (stagnation) temperature [K]
  • dT ram temperature rise [K]
  • M flight Mach number

Applies when

  • 150 K <= T <= 350 K
  • M < 5
  • full recovery (recovery factor 1)

Example

m.ask("Total temperature: V = 316.96778261595074 m/s, T = 250 K")
→ T0 = 300 K, dT = 50 K, M = 1
True airspeed from calibrated airspeedaero_true_airspeed_from_calibrated

The true airspeed and flight Mach number from the calibrated airspeed, the pressure altitude and the outside air temperature (subsonic).

q_c = p_0\left[\left(1 + 0.2\,\frac{V_c^2}{a_0^2}\right)^{3.5} - 1\right],\quad M = \sqrt{5\left[\left(\frac{q_c}{p} + 1\right)^{2/7} - 1\right]},\quad V = M a

Inputs

  • CAS calibrated airspeed (m/s, kt, km/h) [m/s]
  • hp pressure altitude (m, ft) [m]
  • T outside air temperature (default: standard temperature) [K] optional

Returns

  • TAS true airspeed [m/s]
  • TAS_kt true airspeed in knots
  • qc impact pressure [Pa]
  • M flight Mach number

Applies when

  • 0 < CAS < a0
  • subsonic flight
  • -1 km <= hp <= 47 km
  • 150 K <= T <= 350 K

Example

m.ask("True airspeed: CAS = 120 kt, hp = 0 ft")
→ TAS = 61.7333 m/s, TAS_kt = 120, qc = 2353.51 Pa, M = 0.181412

Compressible flow 13

Fanno flow (adiabatic duct flow with friction)aero_fanno_flow

For adiabatic flow with wall friction in a constant-area duct: the friction length f L*/D needed to reach Mach 1 from Mach M, and the pressure, temperature, density and stagnation-pressure ratios to the sonic (choked) state.

\frac{\bar f L^*}{D} = \frac{1 - M^2}{\gamma M^2} + \frac{\gamma+1}{2\gamma}\ln\frac{(\gamma+1)M^2}{2 + (\gamma-1)M^2},\quad \frac{p}{p^*} = \frac{1}{M}\sqrt{\frac{\gamma+1}{2 + (\gamma-1)M^2}}

Inputs

  • M Mach number at the duct station (0.05 to 10, not 1)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • fLD f L*/D with the Darcy friction factor f (= 4 times the Fanning factor)
  • p_pstar p/p*
  • T_Tstar T/T*
  • rho_rhostar rho/rho* (= V*/V)
  • p0_p0star p0/p0*

Applies when

  • 0.05 <= M <= 10
  • adiabatic, constant area, constant friction factor
  • 1.05 <= gamma <= 1.7

Example

m.ask("Fanno flow: M = 2")
→ fLD = 0.304997, p_pstar = 0.408248, T_Tstar = 0.666667, rho_rhostar = 0.612372, p0_p0star = 1.6875
Isentropic flow ratios at a Mach numberaero_isentropic_flow

Stagnation-to-static temperature, pressure and density ratios and the area ratio A/A* of isentropic flow of a perfect gas at a Mach number.

\frac{T_0}{T} = 1 + \frac{\gamma-1}{2}M^2,\quad \frac{p_0}{p} = \left(\frac{T_0}{T}\right)^{\frac{\gamma}{\gamma-1}},\quad \frac{A}{A^*} = \frac{1}{M}\left[\frac{2}{\gamma+1}\frac{T_0}{T}\right]^{\frac{\gamma+1}{2(\gamma-1)}}

Inputs

  • M Mach number (0.01 to 10)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • T0_T stagnation-to-static temperature ratio T0/T
  • p0_p stagnation-to-static pressure ratio p0/p
  • rho0_rho stagnation-to-static density ratio rho0/rho
  • A_Astar area ratio A/A* (A* = sonic throat area)

Applies when

  • 0.01 <= M <= 10
  • 1.05 <= gamma <= 1.7
  • isentropic flow of a calorically perfect gas

Example

m.ask("Isentropic flow: M = 2")
→ T0_T = 1.8, p0_p = 7.82445, rho0_rho = 4.34692, A_Astar = 1.6875
Mach number from the area ratio A/A*aero_mach_from_area_ratio

The subsonic or supersonic Mach number at which isentropic flow has a given area ratio A/A*, with the static-to-stagnation pressure and temperature ratios there.

\frac{A}{A^*} = \frac{1}{M}\left[\frac{2}{\gamma+1}\left(1 + \frac{\gamma-1}{2}M^2\right)\right]^{\frac{\gamma+1}{2(\gamma-1)}}

Inputs

  • ar area ratio A/A* (>= 1)
  • regime which branch: subsonic or supersonic choice
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M Mach number
  • p_p0 static-to-stagnation pressure ratio p/p0
  • T_T0 static-to-stagnation temperature ratio T/T0

Applies when

  • 1 <= A/A* <= 10000
  • 1.05 <= gamma <= 1.7

Example

m.ask("Mach from area ratio: ar = 1.6875, regime = supersonic")
→ M = 2, p_p0 = 0.127805, T_T0 = 0.555556
Mach number from the Prandtl-Meyer angleaero_mach_from_prandtl_meyer

The supersonic Mach number whose Prandtl-Meyer angle is nu, with the maximum turning angle of the gas (expansion to vacuum).

\nu(M) = \nu,\quad \nu_{max} = \frac{\pi}{2}\left(\sqrt{\frac{\gamma+1}{\gamma-1}} - 1\right)

Inputs

  • nu Prandtl-Meyer angle (deg, rad) [rad]
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M Mach number
  • nu_max_deg maximum Prandtl-Meyer angle (M -> infinity) in degrees

Applies when

  • 0 <= nu < nu(M = 50)
  • 1.05 <= gamma <= 1.7

Example

m.ask("Mach from Prandtl-Meyer angle: nu = 26.379760813416457 deg")
→ M = 2, nu_max_deg = 130.454
Mach number from the stagnation-to-static pressure ratioaero_mach_from_pressure_ratio

The Mach number of isentropic flow from the ratio of stagnation to static pressure p0/p, with T0/T and A/A*.

M = \sqrt{\frac{2}{\gamma-1}\left[\left(\frac{p_0}{p}\right)^{\frac{\gamma-1}{\gamma}} - 1\right]}

Inputs

  • pr stagnation-to-static pressure ratio p0/p (> 1)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M Mach number
  • T0_T stagnation-to-static temperature ratio
  • A_Astar area ratio A/A*

Applies when

  • 1 < p0/p <= 1e6
  • M <= 20
  • 1.05 <= gamma <= 1.7

Example

m.ask("Mach from pressure ratio: p0/p = 7.824449066867265")
→ M = 2, T0_T = 1.8, A_Astar = 1.6875
Maximum deflection angle of an attached oblique shockaero_max_deflection_angle

The largest wedge (deflection) angle for which an oblique shock stays attached at a given upstream Mach number, with the wave angle, downstream Mach number and pressure ratio at that limit; beyond it the shock detaches.

\sin^2\beta^* = \frac{\frac{\gamma+1}{4}M_1^2 - 1 + \sqrt{(\gamma+1)\left(1 + \frac{\gamma-1}{2}M_1^2 + \frac{\gamma+1}{16}M_1^4\right)}}{\gamma M_1^2}

Inputs

  • M1 upstream Mach number (>= 1.01)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • theta_max_deg maximum deflection angle in degrees
  • beta_deg wave angle at the maximum, degrees
  • M2 downstream Mach number at the maximum
  • p2_p1 pressure ratio at the maximum

Applies when

  • 1.01 <= M1 <= 20
  • 1.05 <= gamma <= 1.7

Example

m.ask("Maximum deflection angle: M1 = 2")
→ theta_max_deg = 22.9735, beta_deg = 64.669, M2 = 0.924256, p2_p1 = 3.64575
Normal shock from its pressure ratioaero_normal_shock_from_pressure_ratio

The upstream and downstream Mach numbers and the temperature, density and stagnation-pressure ratios of a normal shock of known static pressure ratio p2/p1 (shock strength).

M_1 = \sqrt{\frac{\gamma+1}{2\gamma}\left(\frac{p_2}{p_1} - 1\right) + 1}

Inputs

  • p21 static pressure ratio across the shock p2/p1 (> 1)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M1 upstream Mach number
  • M2 downstream Mach number
  • T2_T1 temperature ratio
  • rho2_rho1 density ratio
  • p02_p01 stagnation pressure ratio

Applies when

  • 1 < p2/p1 <= 500
  • 1.05 <= gamma <= 1.7

Example

m.ask("Normal shock from pressure ratio: p2/p1 = 4.5")
→ M1 = 2, M2 = 0.57735, T2_T1 = 1.6875, rho2_rho1 = 2.66667, p02_p01 = 0.720874
Normal shock relationsaero_normal_shock

Downstream Mach number and the pressure, temperature, density and stagnation-pressure ratios across a normal shock, with the pitot ratio p02/p1.

\frac{p_2}{p_1} = 1 + \frac{2\gamma}{\gamma+1}(M_1^2 - 1),\quad \frac{\rho_2}{\rho_1} = \frac{(\gamma+1)M_1^2}{(\gamma-1)M_1^2 + 2},\quad M_2^2 = \frac{1 + \frac{\gamma-1}{2}M_1^2}{\gamma M_1^2 - \frac{\gamma-1}{2}}

Inputs

  • M1 upstream Mach number (> 1)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M2 downstream Mach number
  • p2_p1 static pressure ratio p2/p1
  • T2_T1 temperature ratio T2/T1
  • rho2_rho1 density ratio rho2/rho1
  • p02_p01 stagnation pressure ratio p02/p01
  • p02_p1 pitot ratio p02/p1

Applies when

  • 1 < M1 <= 20
  • 1.05 <= gamma <= 1.7

Example

m.ask("Normal shock: M1 = 2")
→ M2 = 0.57735, p2_p1 = 4.5, T2_T1 = 1.6875, rho2_rho1 = 2.66667, p02_p01 = 0.720874, p02_p1 = 5.64044
Oblique shock from the deflection angleaero_oblique_shock

The wave angle, downstream Mach number and the pressure, temperature, density and stagnation-pressure ratios of an attached oblique shock turning a supersonic flow by a deflection angle (weak or strong solution).

\tan\theta = 2\cot\beta\,\frac{M_1^2\sin^2\beta - 1}{M_1^2(\gamma + \cos 2\beta) + 2},\quad M_{n1} = M_1\sin\beta,\quad M_2 = \frac{M_{n2}}{\sin(\beta - \theta)}

Inputs

  • M1 upstream Mach number (> 1)
  • theta flow deflection (wedge half-) angle (deg, rad) [rad]
  • branch weak (default) or strong shock solution choice optional
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • beta_deg shock wave angle in degrees
  • M2 downstream Mach number
  • p2_p1 pressure ratio p2/p1
  • T2_T1 temperature ratio T2/T1
  • rho2_rho1 density ratio rho2/rho1
  • p02_p01 stagnation pressure ratio
  • Mn1 upstream Mach number normal to the shock

Applies when

  • 1 < M1 <= 20
  • 0 < theta < theta_max(M1) (attached shock)
  • 1.05 <= gamma <= 1.7

Example

m.ask("Oblique shock: M1 = 2, theta = 10.62290962494955 deg")
→ beta_deg = 40, M2 = 1.61732, p2_p1 = 1.76149, T2_T1 = 1.18177, rho2_rho1 = 1.49056, p02_p01 = 0.981791, Mn1 = 1.28558
Oblique shock from the wave angleaero_oblique_shock_from_wave_angle

The flow deflection, downstream Mach number and the property ratios of an oblique shock of known wave angle (for example measured on a schlieren photograph).

\tan\theta = 2\cot\beta\,\frac{M_1^2\sin^2\beta - 1}{M_1^2(\gamma + \cos 2\beta) + 2}

Inputs

  • M1 upstream Mach number (> 1)
  • beta shock wave angle (deg, rad) [rad]
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • theta_deg flow deflection angle in degrees
  • M2 downstream Mach number
  • p2_p1 pressure ratio
  • T2_T1 temperature ratio
  • rho2_rho1 density ratio
  • p02_p01 stagnation pressure ratio
  • Mn1 upstream normal Mach number

Applies when

  • 1 < M1 <= 20
  • asin(1/M1) < beta <= 90 deg
  • 1.05 <= gamma <= 1.7

Example

m.ask("Oblique shock from wave angle: M1 = 2, beta = 90 deg")
→ theta_deg = 0, M2 = 0.57735, p2_p1 = 4.5, T2_T1 = 1.6875, rho2_rho1 = 2.66667, p02_p01 = 0.720874, Mn1 = 2
Prandtl-Meyer angle of a Mach numberaero_prandtl_meyer

The Prandtl-Meyer function nu(M): the angle through which a sonic flow must turn isentropically to reach Mach M.

\nu(M) = \sqrt{\frac{\gamma+1}{\gamma-1}}\arctan\sqrt{\frac{\gamma-1}{\gamma+1}(M^2-1)} - \arctan\sqrt{M^2-1}

Inputs

  • M Mach number (>= 1)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • nu_deg Prandtl-Meyer angle in degrees

Applies when

  • 1 <= M <= 50
  • 1.05 <= gamma <= 1.7

Example

m.ask("Prandtl-Meyer angle: M = 2")
→ nu_deg = 26.3798
Prandtl-Meyer expansion fanaero_expansion_fan

The downstream Mach number and the pressure, temperature and density ratios when a supersonic flow turns away from itself by an angle through a centred expansion fan.

\nu(M_2) = \nu(M_1) + \theta,\quad \frac{p_2}{p_1} = \left[\frac{1 + \frac{\gamma-1}{2}M_1^2}{1 + \frac{\gamma-1}{2}M_2^2}\right]^{\frac{\gamma}{\gamma-1}}

Inputs

  • M1 upstream Mach number (>= 1)
  • theta turning angle of the flow (deg, rad) [rad]
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • M2 downstream Mach number
  • nu1_deg upstream Prandtl-Meyer angle (deg)
  • nu2_deg downstream Prandtl-Meyer angle (deg)
  • p2_p1 pressure ratio p2/p1
  • T2_T1 temperature ratio T2/T1
  • rho2_rho1 density ratio rho2/rho1

Applies when

  • 1 <= M1 <= 20
  • 0 < theta < 90 deg
  • downstream Mach below 50
  • 1.05 <= gamma <= 1.7

Example

m.ask("Expansion fan: M1 = 1, theta = 26.379760813416457 deg")
→ M2 = 2, nu1_deg = 0, nu2_deg = 26.3798, p2_p1 = 0.241925, T2_T1 = 0.666667, rho2_rho1 = 0.362887
Rayleigh flow (duct flow with heat addition)aero_rayleigh_flow

For frictionless constant-area flow with heat addition: the stagnation temperature, temperature, pressure, density and stagnation-pressure ratios to the sonic (thermally choked) state at a Mach number.

\frac{p}{p^*} = \frac{1+\gamma}{1 + \gamma M^2},\quad \frac{T_0}{T_0^*} = \frac{(\gamma+1)M^2\left[2 + (\gamma-1)M^2\right]}{(1 + \gamma M^2)^2}

Inputs

  • M Mach number (0.05 to 10)
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • T0_T0star T0/T0*
  • T_Tstar T/T*
  • p_pstar p/p*
  • rho_rhostar rho/rho*
  • p0_p0star p0/p0*

Applies when

  • 0.05 <= M <= 10
  • frictionless, constant area
  • 1.05 <= gamma <= 1.7

Example

m.ask("Rayleigh flow: M = 2")
→ T0_T0star = 0.793388, T_Tstar = 0.528926, p_pstar = 0.363636, rho_rhostar = 0.6875, p0_p0star = 1.5031

Nozzles 2

Choked mass flow through a nozzle throataero_choked_mass_flow

The maximum (choked) mass flow of a perfect gas through a sonic throat from the stagnation pressure and temperature, with the throat (critical) pressure, temperature and speed.

\dot m = \frac{p_0 A^*}{\sqrt{R T_0}}\sqrt{\gamma}\left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}

Inputs

  • p0 stagnation (reservoir) pressure [Pa]
  • T0 stagnation temperature [K]
  • A throat area (m^2, cm^2, mm^2) [m^2]
  • gamma ratio of specific heats (default 1.4, air) optional
  • R specific gas constant (default air, 287.053 J/(kg*K)) [J/(kg*K)] optional

Returns

  • mdot choked mass flow rate [kg/s]
  • p_star throat pressure [Pa]
  • T_star throat temperature [K]
  • V_star throat (sonic) speed [m/s]

Applies when

  • p0, T0, A, R > 0
  • isentropic flow to a sonic throat
  • 1.05 <= gamma <= 1.7

Example

m.ask("Choked mass flow: p0 = 100 kPa, T0 = 300 K, A = 10 cm^2")
→ mdot = 0.233334 kg/s, p_star = 52828.2 Pa, T_star = 250 K, V_star = 316.968 m/s
Normal shock position in a converging-diverging nozzleaero_nozzle_normal_shock

Where a normal shock stands in the diverging part of a converging-diverging nozzle for a given back pressure: the area ratio at the shock, the Mach numbers before and after it, the exit Mach number and the stagnation-pressure loss.

\frac{p_e A_e}{p_{01} A_t} = \frac{p_e}{p_{02}}\frac{A_e}{A_2^*}\Big|_{M_e},\quad \frac{p_{02}}{p_{01}} = \frac{A_t}{A_2^*}

Inputs

  • pc reservoir (stagnation) pressure [Pa]
  • pb back pressure at the exit [Pa]
  • eps exit-to-throat area ratio Ae/At
  • gamma ratio of specific heats (default 1.4, air) optional

Returns

  • As_At area ratio at the shock As/At
  • M1 Mach number just before the shock
  • M2 Mach number just after the shock
  • Me exit Mach number (subsonic)
  • p02_p01 stagnation pressure ratio across the shock

Applies when

  • 1.05 <= eps <= 100
  • back pressure between the exit-shock and the critical subsonic exit pressures
  • 1.05 <= gamma <= 1.7

Example

m.ask("Normal shock in a nozzle: pc = 1 MPa, pb = 682.5585882398435 kPa, eps = 3")
→ As_At = 1.6875, M1 = 2, M2 = 0.57735, Me = 0.280418, p02_p01 = 0.720874

Orbits 9

Bi-elliptic transfer between circular orbitsaero_bielliptic_transfer

The three burns, total delta-v and transfer time of a bi-elliptic transfer from a lower to a higher circular orbit around the Earth through an intermediate apoapsis, with the Hohmann delta-v for comparison.

v = \sqrt{\mu\left(\frac{2}{r} - \frac{1}{a}\right)},\quad t = \pi\left(\sqrt{\frac{a_1^3}{\mu}} + \sqrt{\frac{a_2^3}{\mu}}\right)

Inputs

  • h1 altitude of the initial circular orbit [m]
  • h2 altitude of the final circular orbit [m]
  • hb altitude of the intermediate apoapsis (>= h2) [m]

Returns

  • dv1 first burn [m/s]
  • dv2 second burn (at the intermediate apoapsis) [m/s]
  • dv3 third burn (circularization) [m/s]
  • dv total delta-v [m/s]
  • t total transfer time [s]
  • t_days transfer time in days
  • dv_hohmann total delta-v of the Hohmann transfer between the same orbits [m/s]

Applies when

  • 100 km <= h1 < h2 <= hb
  • coplanar circular orbits, impulsive burns, two-body Earth

Example

m.solve("aero_bielliptic_transfer", h1=6378136.6, h2=19134409.799999997, hb=19134409.799999997)
→ dv1 = 864.766 m/s, dv2 = 725.331 m/s, dv3 = 0 m/s, dv = 1590.1 m/s, t = 33447.9 s, t_days = 0.387129, dv_hohmann = 1590.1 m/s
Circular orbit at an altitude above the Earthaero_circular_orbit

Orbital speed, period and revolutions per day of a circular orbit at an altitude above the Earth's equatorial radius.

v = \sqrt{\frac{\mu}{R + h}},\quad T = 2\pi\sqrt{\frac{(R + h)^3}{\mu}}

Inputs

  • h orbit altitude above the Earth (km) [m]

Returns

  • v circular orbital speed [m/s]
  • T orbital period [s]
  • T_min period in minutes
  • revs_per_day revolutions per day (86400 s)

Applies when

  • 100 km <= h <= 1e6 km
  • two-body Earth, mu = 3.986004418e14 m^3/s^2, R = 6378.1366 km

Example

m.ask("Circular orbit: h = 19134.409799999998 km")
→ v = 3952.68 m/s, T = 40554.7 s, T_min = 675.912, revs_per_day = 2.13045
Circular-orbit altitude for an orbital periodaero_altitude_for_period

The altitude above the Earth of the circular orbit with a given period (for example a geostationary orbit, one sidereal day), and its orbital speed.

R + h = \left(\mu\,\frac{T^2}{4\pi^2}\right)^{1/3}

Inputs

  • T orbital period (s, min, h, day) [s]

Returns

  • h orbit altitude [m]
  • h_km altitude in km
  • v orbital speed [m/s]

Applies when

  • the altitude between 100 km and 1e6 km
  • two-body Earth

Example

m.ask("Altitude for period: T = 40554.74657601441 s")
→ h = 1.91344e+07 m, h_km = 19134.4, v = 3952.68 m/s
Coverage of a satellite at an altitudeaero_satellite_coverage

The Earth central angle out to the edge of a satellite's coverage, the off-nadir angle and slant range to that edge, and the fraction of the Earth's surface in view, for a minimum elevation angle at the ground (0 = the geometric horizon).

\sin\eta = \frac{R\cos\varepsilon}{R + h},\quad \lambda = 90^\circ - \varepsilon - \eta,\quad d = \frac{R\sin\lambda}{\sin\eta},\quad f = \frac{1 - \cos\lambda}{2}

Inputs

  • h satellite altitude [m]
  • eps_min minimum elevation angle at the ground station (default 0 deg) [rad] optional

Returns

  • lambda_deg Earth central angle to the coverage edge, degrees
  • nadir_deg off-nadir angle to the edge, degrees
  • slant_range slant range to the coverage edge [m]
  • coverage fraction of the Earth's surface covered

Applies when

  • 100 km <= h <= 1e6 km
  • 0 <= eps_min <= 80 deg
  • spherical Earth of radius 6378.1366 km

Example

m.ask("Satellite coverage: h = 6378.1366 km")
→ lambda_deg = 60, nadir_deg = 30, slant_range = 1.10473e+07 m, coverage = 0.25
Escape speed at an altitude above the Earthaero_escape_speed

The speed needed to escape the Earth's gravity from an altitude, the circular orbital speed there and the burn needed to escape from that circular orbit.

v_{esc} = \sqrt{\frac{2\mu}{R + h}} = \sqrt{2}\,v_{circ}

Inputs

  • h altitude above the Earth (km); 0 = the surface [m]

Returns

  • v_esc escape speed [m/s]
  • v_circ circular orbital speed at that altitude [m/s]
  • dv burn from the circular orbit to escape [m/s]

Applies when

  • 0 <= h <= 1e6 km
  • two-body Earth, no atmosphere

Example

m.ask("Escape speed: h = 0 km")
→ v_esc = 11179.9 m/s, v_circ = 7905.37 m/s, dv = 3274.51 m/s
Inclination of a sun-synchronous orbitaero_sun_synchronous_inclination

The inclination at which J2 makes a circular orbit's plane turn eastward at one revolution per year (sun-synchronous), at an altitude, with the orbital period.

\cos i = -\frac{\dot\Omega_\odot}{\frac{3}{2}\,n\,J_2\,(R/r)^2}

Inputs

  • h altitude of the circular orbit (km) [m]

Returns

  • i_deg sun-synchronous inclination in degrees (retrograde, > 90)
  • period_min orbital period in minutes

Applies when

  • 100 km <= h <= 6000 km (none exists above about 5970 km)
  • circular orbit, first-order J2, node rate 360 deg per 365.2421897 days

Example

m.ask("Sun-synchronous orbit: h = 700 km")
→ i_deg = 98.188, period_min = 98.773
Lambert's problem (orbit through two positions in a given time)aero_lambert_problem

The velocities at departure and arrival of the zero-revolution Earth orbit that goes from one position to another in a given time of flight (prograde or retrograde), with the transfer angle.

\sqrt{\mu}\,t = \left(\frac{y}{C(z)}\right)^{3/2}S(z) + A\sqrt{y},\quad \mathbf v_1 = \frac{\mathbf r_2 - f\mathbf r_1}{g},\quad \mathbf v_2 = \frac{\dot g\,\mathbf r_2 - \mathbf r_1}{g}

Inputs

  • r1 departure position vector in km, e.g. '[7000, 0, 0]' vector
  • r2 arrival position vector in km vector
  • tof time of flight [s]
  • direction prograde (default) or retrograde transfer choice optional

Returns

  • v1 departure velocity vector in km/s
  • v2 arrival velocity vector in km/s
  • dtheta_deg transfer angle in degrees

Applies when

  • 2 deg <= transfer angle <= 358 deg, not within 2 deg of 180
  • tof > 0
  • zero revolutions, two-body Earth (mu = 398600.4418 km^3/s^2)

Example

m.ask("Lambert problem: r1 = [7000, 0, 0], r2 = [0, 7000, 0], tof = 1457.1291594215038 s")
→ v1 = [0.0, 7.54605329011, 0.0], v2 = [-7.54605329011, 0.0, 0.0], dtheta_deg = 90
Nodal regression from the Earth's oblateness (J2)aero_j2_nodal_regression

The secular drift of the right ascension of the ascending node caused by the Earth's equatorial bulge (J2), from the perigee and apogee altitudes and the inclination.

\dot\Omega = -\frac{3}{2}\,n\,J_2\left(\frac{R}{p}\right)^2\cos i

Inputs

  • hp perigee altitude (or the altitude of a circular orbit) [m]
  • i inclination (deg) [rad]
  • ha apogee altitude (default: circular orbit) [m] optional

Returns

  • raan_rate_deg_day node drift rate in degrees per day (negative = westward regression)
  • raan_rate node drift rate [rad/s]

Applies when

  • 100 km <= hp <= ha <= 1e5 km
  • 1 deg <= i <= 179 deg
  • first-order secular J2 theory, J2 = 1.08263e-3

Example

m.ask("Nodal regression: hp = 19134.409799999998 km, i = 60 deg")
→ raan_rate_deg_day = -0.0389221, raan_rate = -7.86248e-09 rad/s
Rotation of the line of apsides from J2aero_j2_apsidal_rotation

The secular rotation of the argument of perigee of an eccentric Earth orbit caused by J2 (zero at the critical inclination 63.4 degrees, as used by Molniya orbits).

\dot\omega = \frac{3}{4}\,n\,J_2\left(\frac{R}{p}\right)^2\left(5\cos^2 i - 1\right)

Inputs

  • hp perigee altitude [m]
  • ha apogee altitude [m]
  • i inclination (deg) [rad]

Returns

  • argp_rate_deg_day perigee rotation rate in degrees per day
  • argp_rate perigee rotation rate [rad/s]

Applies when

  • 100 km <= hp < ha <= 1e5 km
  • eccentricity >= 1e-4
  • 1 deg <= i <= 179 deg
  • first-order secular J2 theory

Example

m.solve("aero_j2_apsidal_rotation", hp=12756273.2, ha=25512546.4, i=1.5707963267948966)
→ argp_rate_deg_day = -0.0442847, argp_rate = -8.94575e-09 rad/s

Propellers and rotors 2

Ideal hover power of a rotor (momentum theory)aero_actuator_disk_hover

The induced velocity at the disk, the ideal (induced) power and the far-wake velocity of a hovering rotor or static propeller from its thrust, diameter and the air density (actuator-disk momentum theory).

v_i = \sqrt{\frac{T}{2\rho A}},\quad P_i = T v_i = \frac{T^{3/2}}{\sqrt{2\rho A}}

Inputs

  • T thrust [N]
  • D rotor (disk) diameter [m]
  • rho air density [kg/m^3]

Returns

  • v_i induced velocity at the disk [m/s]
  • P_ideal ideal induced power [W]
  • w far-wake velocity [m/s]

Applies when

  • T, D, rho > 0
  • ideal actuator disk: uniform, inviscid, no swirl

Example

m.ask("Hover power: T = 6.283185307179586 N, D = 2 m, rho = 1 kg/m^3")
→ v_i = 1 m/s, P_ideal = 6.28319 W, w = 2 m/s
Ideal propeller in axial flight (momentum theory)aero_actuator_disk_forward

The induced velocity, ideal power, ideal (Froude) propulsive efficiency and far-wake velocity increment of a propeller producing a thrust at a flight speed (actuator-disk momentum theory).

v_i = -\frac{V}{2} + \sqrt{\frac{V^2}{4} + \frac{T}{2\rho A}},\quad \eta_i = \frac{V}{V + v_i}

Inputs

  • T thrust [N]
  • V flight (axial) speed [m/s]
  • D propeller diameter [m]
  • rho air density [kg/m^3]

Returns

  • v_i induced velocity at the disk [m/s]
  • P_ideal ideal power absorbed [W]
  • eta_ideal ideal propulsive efficiency T V/P
  • w far-wake velocity increment [m/s]

Applies when

  • T, V, D, rho > 0
  • ideal actuator disk

Example

m.ask("Ideal propeller: T = 25.132741228718345 N, V = 3 m/s, D = 2 m, rho = 1 kg/m^3")
→ v_i = 1 m/s, P_ideal = 100.531 W, eta_ideal = 0.75, w = 2 m/s

Re-entry 3

Ballistic coefficientaero_ballistic_coefficient

The ballistic coefficient beta = m/(CD A) of a body (mass per unit drag area), in kg/m^2 and as a weight per area in lbf/ft^2.

\beta = \frac{m}{C_D A}

Inputs

  • m mass [kg]
  • CD drag coefficient
  • A reference area [m^2]

Returns

  • beta ballistic coefficient m/(CD A) [kg/m^2]
  • beta_psf ballistic coefficient as weight per drag area, lbf/ft^2

Applies when

  • m, CD, A > 0
  • CD <= 5

Example

m.ask("Ballistic coefficient: m = 1000 kg, CD = 1.2, A = 1.5 m^2")
→ beta = 555.556 kg/m^2, beta_psf = 113.787
Peak deceleration of a ballistic re-entry (Allen-Eggers)aero_ballistic_entry_peak_deceleration

The peak deceleration (in g), the altitude where it occurs and the speed there for a body entering an exponential atmosphere on a straight ballistic path, from its mass, drag coefficient and reference area (ballistic coefficient m/(CD A)), entry speed and flight-path angle.

a_{max} = \frac{V_E^2\sin\gamma_E}{2eH},\quad h^* = H\ln\frac{\rho_0 H}{\beta\sin\gamma_E},\quad V^* = V_E\,e^{-1/2},\quad \beta = \frac{m}{C_D A}

Inputs

  • m mass [kg]
  • CD drag coefficient
  • A drag reference area [m^2]
  • VE entry speed [m/s]
  • gamma_e entry flight-path angle below the horizontal (deg) [rad]
  • H atmospheric scale height (default 7.2 km) [m] optional
  • rho0 surface density of the exponential atmosphere (default 1.225 kg/m^3) [kg/m^3] optional

Returns

  • n_max peak deceleration in g (9.80665 m/s^2)
  • a_max peak deceleration [m/s^2]
  • h_peak altitude of peak deceleration [m]
  • V_peak speed at peak deceleration [m/s]

Applies when

  • 2 deg <= gamma_e <= 90 deg
  • peak above sea level
  • straight-line path, gravity and lift neglected, exponential atmosphere rho0 exp(-h/H)

Example

m.ask("Peak deceleration: m = 1000 kg, CD = 1, A = 1 m^2, VE = 7 km/s, gamma_e = 90 deg")
→ n_max = 127.649, a_max = 1251.81 m/s^2, h_peak = 15674.6 m, V_peak = 4245.71 m/s
Speed and deceleration of a ballistic re-entry at an altitudeaero_ballistic_entry_velocity

The speed and the deceleration of a body on a straight ballistic entry into an exponential atmosphere when it reaches a given altitude (Allen-Eggers).

V = V_E\exp\left(-\frac{\rho_0 H e^{-h/H}}{2\beta\sin\gamma_E}\right),\quad a = \frac{\rho V^2}{2\beta}

Inputs

  • m mass [kg]
  • CD drag coefficient
  • A drag reference area [m^2]
  • VE entry speed [m/s]
  • gamma_e entry flight-path angle below the horizontal (deg) [rad]
  • h altitude [m]
  • H atmospheric scale height (default 7.2 km) [m] optional
  • rho0 surface density (default 1.225 kg/m^3) [kg/m^3] optional

Returns

  • V speed at the altitude [m/s]
  • n deceleration in g
  • a deceleration [m/s^2]

Applies when

  • 2 deg <= gamma_e <= 90 deg
  • 0 <= h <= 40 H
  • straight-line path, gravity and lift neglected, exponential atmosphere

Example

m.solve("aero_ballistic_entry_velocity", m=1000.0, CD=1.0, A=1.0, VE=7000.0, gamma_e=1.5707963267948966, h=15674.557464134641)
→ V = 4245.71 m/s, n = 127.649, a = 1251.81 m/s^2

Rocket performance 7

Burnout height and apogee of a vertical rocketaero_vertical_rocket_trajectory

Burnout speed and height, apogee height and time to apogee of a rocket launched vertically under constant thrust and mass flow and constant gravity, neglecting drag.

h_b = c\,t_b\left(1 - \frac{\ln R}{R - 1}\right) - \frac{1}{2}g t_b^2,\quad h_{max} = h_b + \frac{v_b^2}{2g}

Inputs

  • Isp specific impulse [s]
  • m0 initial mass [kg]
  • mf burnout mass [kg]
  • tb burn time [s]
  • g gravitational acceleration (default 9.80665 m/s^2) [m/s^2] optional

Returns

  • v_b burnout speed [m/s]
  • h_b burnout height [m]
  • h_max apogee height [m]
  • t_apex time from lift-off to apogee [s]

Applies when

  • 0 < mf < m0
  • thrust-to-weight above 1
  • constant thrust, constant g, no drag
  • vertical flight

Example

m.ask("Vertical rocket: Isp = 300 s, m0 = 2718.2818284590453 kg, mf = 1000 kg, tb = 100 s")
→ v_b = 1961.33 m/s, h_b = 73949 m, h_max = 270082 m, t_apex = 300 s
Delta-v of a multistage rocketaero_multistage_delta_v

The total ideal velocity change of a multistage rocket and the contribution of each stage, from each stage's specific impulse and the vehicle mass at its ignition and at its burnout.

\Delta v = \sum_i I_{sp,i}\,g_0\ln\frac{m_{0,i}}{m_{f,i}}

Inputs

  • Isp specific impulse of each stage in seconds, e.g. '[290, 340]' vector
  • m0 vehicle mass at each stage's ignition in kilograms vector
  • mf vehicle mass at each stage's burnout in kilograms vector

Returns

  • dv total delta-v [m/s]
  • dv_stages delta-v of each stage in m/s

Applies when

  • equal numbers of stages
  • 0 < mf < m0 for each stage
  • each ignition mass below the previous burnout mass
  • no gravity or drag

Example

m.ask("Multistage rocket: Isp = [300, 300], m0 = [2718.2818284590453, 500], mf = [1000, 183.93972058572118]")
→ dv = 5883.99 m/s, dv_stages = [2941.995, 2941.995]
Gravity loss of a vertical rocket burnaero_delta_v_gravity_loss

The burnout speed of a rocket climbing vertically under constant thrust and constant gravity (no drag), its ideal delta-v and the gravity loss g tb.

v_b = I_{sp}g_0\ln\frac{m_0}{m_f} - g\,t_b

Inputs

  • Isp specific impulse [s]
  • m0 initial mass [kg]
  • mf burnout mass [kg]
  • tb burn time [s]
  • g gravitational acceleration (default 9.80665 m/s^2) [m/s^2] optional

Returns

  • v_b vertical speed at burnout [m/s]
  • dv_ideal ideal delta-v (no gravity) [m/s]
  • loss gravity loss [m/s]

Applies when

  • 0 < mf < m0
  • thrust-to-weight above 1 at lift-off
  • constant thrust and mass flow, constant g, no drag, vertical flight

Example

m.ask("Gravity loss: Isp = 300 s, m0 = 4 t, mf = 1 t, tb = 100 s")
→ v_b = 3097.81 m/s, dv_ideal = 4078.47 m/s, loss = 980.665 m/s
Optimal staging of a multistage rocketaero_optimal_staging

The lightest rocket that gives a payload a required delta-v with stages of given specific impulses and structural coefficients: the optimal mass ratio and mass of each stage, the lift-off mass and the payload fraction (Lagrange-multiplier solution).

R_i = \frac{\lambda c_i - 1}{\lambda c_i \varepsilon_i},\quad \sum_i c_i\ln R_i = \Delta v,\quad m_i = m_{above}\frac{R_i - 1}{1 - R_i\varepsilon_i}

Inputs

  • Isp specific impulse of each stage in seconds, bottom stage first, e.g. '[300, 350, 450]' vector
  • eps structural coefficient ms/(ms + mp) of each stage vector
  • dv required total delta-v [m/s]
  • m_pl payload mass [kg]

Returns

  • m0 minimum lift-off mass [kg]
  • payload_fraction payload fraction m_pl/m0
  • R optimal mass ratio of each stage (list)
  • stage_mass mass of each stage, structure plus propellant, in kg (list)

Applies when

  • 2 to 5 stages
  • 0.01 <= eps <= 0.5
  • delta-v below what the stages could reach with zero payload
  • impulsive staging, no gravity or drag losses

Example

m.ask("Optimal staging: Isp = [300, 300], eps = [0.1, 0.1], dv = 8156.942157885825 m/s, m_pl = 1000 kg")
→ m0 = 36000 kg, payload_fraction = 0.0277778, R = [4.0, 4.0], stage_mass = [30000.0, 5000.0]
Payload fraction of a rocket with identical stagesaero_identical_stages_payload

For a rocket of n identical stages (same specific impulse and structural coefficient, equal delta-v split): the payload ratio of each stage, the overall payload fraction, the stage mass ratio and the gross lift-off mass per kilogram of payload.

R = e^{\Delta v/(n I_{sp} g_0)},\quad \lambda = \frac{1 - \varepsilon R}{R - 1},\quad \frac{m_{pl}}{m_0} = \left(\frac{\lambda}{1+\lambda}\right)^n

Inputs

  • n number of stages (1 to 6) integer
  • dv total delta-v [m/s]
  • Isp specific impulse of every stage [s]
  • eps structural coefficient ms/(ms + mp) of every stage

Returns

  • lam payload ratio of each stage (payload above / stage mass)
  • payload_fraction overall payload fraction m_payload/m0
  • R mass ratio of each stage
  • gross_per_payload lift-off mass per unit payload mass

Applies when

  • 1 <= n <= 6
  • 0.01 <= eps <= 0.5
  • eps R < 1
  • identical stages, equal delta-v split

Example

m.ask("Identical stages: n = 1, dv = 4078.4710789429123 m/s, Isp = 300 s, eps = 0.1")
→ lam = 0.2, payload_fraction = 0.166667, R = 4, gross_per_payload = 6
Propellant mass for a required delta-vaero_propellant_for_delta_v

The propellant mass, initial mass and mass ratio a rocket stage needs to give a velocity change, from its specific impulse and burnout mass (structure plus payload).

\frac{m_0}{m_f} = e^{\Delta v/(I_{sp} g_0)},\quad m_p = m_f\left(e^{\Delta v/(I_{sp} g_0)} - 1\right)

Inputs

  • dv required velocity change (m/s, km/s) [m/s]
  • Isp specific impulse (s) [s]
  • mf burnout mass (dry mass plus payload) [kg]

Returns

  • m0 initial mass [kg]
  • mp propellant mass [kg]
  • R mass ratio m0/mf

Applies when

  • dv > 0
  • 1 s <= Isp <= 10000 s
  • mf > 0
  • mass ratio <= 10000

Example

m.ask("Propellant for delta-v: dv = 2941.995 m/s, Isp = 300 s, mf = 1000 kg")
→ m0 = 2718.28 kg, mp = 1718.28 kg, R = 2.71828
Rocket delta-v from specific impulse (Tsiolkovsky)aero_rocket_delta_v

The ideal velocity change of a rocket (no gravity or drag) from its specific impulse and its initial and burnout masses.

\Delta v = I_{sp}\,g_0\ln\frac{m_0}{m_f}

Inputs

  • Isp specific impulse (s) [s]
  • m0 initial (lift-off or ignition) mass [kg]
  • mf final (burnout) mass [kg]

Returns

  • dv ideal velocity change delta-v [m/s]

Applies when

  • 1 s <= Isp <= 10000 s
  • 0 < mf < m0
  • no gravity, no drag

Example

m.ask("Rocket delta-v: Isp = 450 s, m0 = 4000 kg, mf = 1000 kg")
→ dv = 6117.71 m/s

Rocket propulsion 6

Characteristic velocity c* of a rocket propellantaero_characteristic_velocity

The characteristic exhaust velocity c* = pc At / mdot of ideal rocket combustion products from the chamber temperature, molar mass and ratio of specific heats, with the Vandenkerckhove function.

c^* = \frac{\sqrt{R T_c}}{\Gamma},\quad \Gamma = \sqrt{\gamma}\left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}

Inputs

  • Tc chamber (combustion) temperature [K]
  • Mw molar mass of the combustion products (g/mol, kg/kmol) [kg/mol]
  • gamma ratio of specific heats of the products

Returns

  • c_star characteristic velocity c* [m/s]
  • Gamma Vandenkerckhove function Gamma(gamma)

Applies when

  • Tc > 0
  • 1 <= Mw <= 300 g/mol
  • 1.05 <= gamma <= 1.7
  • ideal, frozen, isentropic flow

Example

m.ask("Characteristic velocity: Tc = 3000 K, Mw = 20 g/mol, gamma = 1.2")
→ c_star = 1721.99 m/s, Gamma = 0.648531
Ideal rocket engine performanceaero_rocket_engine_performance

Thrust, mass flow, specific impulse, thrust coefficient, characteristic velocity and the exit pressure, velocity and Mach number of an ideal rocket engine from its chamber conditions, propellant products, throat area, expansion ratio and the ambient pressure.

F = \dot m v_e + (p_e - p_a)A_e,\quad \dot m = \frac{p_c A_t}{c^*},\quad I_{sp} = \frac{F}{\dot m g_0}

Inputs

  • pc chamber pressure [Pa]
  • Tc chamber temperature [K]
  • Mw molar mass of the products (g/mol) [kg/mol]
  • gamma ratio of specific heats
  • At throat area [m^2]
  • eps expansion area ratio Ae/At
  • pa ambient pressure (0 for vacuum) [Pa]

Returns

  • F thrust [N]
  • mdot propellant mass flow [kg/s]
  • Isp specific impulse [s]
  • CF thrust coefficient
  • c_star characteristic velocity [m/s]
  • pe exit pressure [Pa]
  • ve exit (exhaust) velocity [m/s]
  • Me exit Mach number

Applies when

  • 1 < eps <= 500
  • 0 <= pa < pc
  • pe >= 0.4 pa (no flow separation)
  • 1 <= Mw <= 300 g/mol
  • 1.05 <= gamma <= 1.7
  • ideal, frozen, isentropic, one-dimensional nozzle flow

Example

m.ask("Rocket engine performance: pc = 1 MPa, Tc = 3000 K, Mw = 20 g/mol, gamma = 1.4, At = 0.01 m^2, eps = 1.6875, pa = 0 Pa")
→ F = 14234.2 N, mdot = 6.13137 kg/s, Isp = 236.731 s, CF = 1.42342, c_star = 1630.96 m/s, pe = 127805 Pa, ve = 1969.79 m/s, Me = 2
Ideal rocket exhaust velocityaero_ideal_exhaust_velocity

The exhaust velocity of an ideal rocket nozzle expanding combustion products from the chamber to the exit pressure, with the specific impulse at that exit pressure (optimum expansion) and the exit Mach number.

v_e = \sqrt{\frac{2\gamma}{\gamma-1}\frac{R_u T_c}{\mathcal{M}}\left[1 - \left(\frac{p_e}{p_c}\right)^{\frac{\gamma-1}{\gamma}}\right]}

Inputs

  • Tc chamber temperature [K]
  • Mw molar mass of the products (g/mol) [kg/mol]
  • gamma ratio of specific heats
  • pc chamber pressure [Pa]
  • pe nozzle exit pressure (> 0) [Pa]

Returns

  • ve exhaust velocity [m/s]
  • Isp specific impulse ve/g0 (exit pressure = ambient) [s]
  • Me exit Mach number

Applies when

  • 0 < pe < pc
  • 1 <= Mw <= 300 g/mol
  • 1.05 <= gamma <= 1.7
  • ideal, frozen, isentropic expansion

Example

m.ask("Exhaust velocity: Tc = 3000 K, Mw = 20 g/mol, gamma = 1.4, pc = 1 MPa, pe = 127.80452546295093 kPa")
→ ve = 1969.79 m/s, Isp = 200.863 s, Me = 2
Nozzle thrust coefficientaero_thrust_coefficient

The thrust coefficient CF = F/(pc At) of an ideal rocket nozzle of given expansion area ratio at an ambient pressure, with the exit pressure ratio and Mach number and the vacuum thrust coefficient.

C_F = \sqrt{\frac{2\gamma^2}{\gamma-1}\left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{\gamma-1}}\left[1 - \left(\frac{p_e}{p_c}\right)^{\frac{\gamma-1}{\gamma}}\right]} + \frac{p_e - p_a}{p_c}\frac{A_e}{A_t}

Inputs

  • gamma ratio of specific heats of the exhaust
  • eps nozzle expansion area ratio Ae/At (> 1)
  • pc chamber pressure [Pa]
  • pa ambient pressure (0 for vacuum) [Pa]

Returns

  • CF thrust coefficient
  • pe_pc exit-to-chamber pressure ratio
  • Me exit Mach number
  • CF_vac vacuum thrust coefficient

Applies when

  • 1 < eps <= 500
  • 0 <= pa < pc
  • pe >= 0.4 pa (no flow separation)
  • 1.05 <= gamma <= 1.7

Example

m.ask("Thrust coefficient: gamma = 1.4, eps = 1.6875, pc = 1 MPa, pa = 0 Pa")
→ CF = 1.42342, pe_pc = 0.127805, Me = 2, CF_vac = 1.42342
Optimum nozzle area ratioaero_optimum_area_ratio

The nozzle expansion area ratio that expands the exhaust exactly to the ambient pressure (optimum expansion, maximum thrust at that pressure), with the exit Mach number and the thrust coefficient.

M_e = \sqrt{\frac{2}{\gamma-1}\left[\left(\frac{p_c}{p_a}\right)^{\frac{\gamma-1}{\gamma}} - 1\right]},\quad \varepsilon = \frac{A}{A^*}(M_e)

Inputs

  • gamma ratio of specific heats
  • pc chamber pressure [Pa]
  • pa ambient pressure [Pa]

Returns

  • eps optimum area ratio Ae/At
  • Me exit Mach number
  • CF thrust coefficient at optimum expansion

Applies when

  • 2 <= pc/pa <= 1e6
  • 1.05 <= gamma <= 1.7

Example

m.ask("Optimum area ratio: gamma = 1.4, pc = 782.4449066867265 kPa, pa = 100 kPa")
→ eps = 1.6875, Me = 2, CF = 1.20775
Throat area of a rocket engine for a required thrustaero_throat_area_for_thrust

The throat and exit areas, mass flow and specific impulse of an ideal rocket engine sized to give a required thrust at an ambient pressure.

A_t = \frac{F}{C_F\,p_c},\quad \dot m = \frac{p_c A_t}{c^*},\quad I_{sp} = \frac{c^* C_F}{g_0}

Inputs

  • F required thrust (N, kN, lbf) [N]
  • pc chamber pressure [Pa]
  • Tc chamber temperature [K]
  • Mw molar mass of the products [kg/mol]
  • gamma ratio of specific heats
  • eps expansion area ratio Ae/At
  • pa ambient pressure (0 for vacuum) [Pa]

Returns

  • At throat area [m^2]
  • Ae exit area [m^2]
  • mdot propellant mass flow [kg/s]
  • Isp specific impulse [s]

Applies when

  • F > 0
  • 1 < eps <= 500
  • 0 <= pa < pc
  • pe >= 0.4 pa
  • 1.05 <= gamma <= 1.7

Example

m.ask("Throat area for thrust: F = 1 kN, pc = 1 MPa, Tc = 3000 K, Mw = 20 g/mol, gamma = 1.4, eps = 1.6875, pa = 127.80452546295093 kPa")
→ At = 0.000827984 m^2, Ae = 0.00139722 m^2, mdot = 0.507668 kg/s, Isp = 200.863 s

Rockets 1

Rocket thrust and specific impulse from mass flow and exhaust velocityaero_rocket_thrust

The thrust F = mdot ve + (pe - pa) Ae of a rocket engine, its specific impulse F/(mdot g0) and effective exhaust velocity, from the propellant mass flow and the exhaust velocity (with the pressure thrust when the exit conditions are given).

F = \dot m v_e + (p_e - p_a)A_e,\quad I_{sp} = \frac{F}{\dot m g_0}

Inputs

  • mdot propellant mass flow rate (kg/s) [kg/s]
  • ve exhaust velocity at the nozzle exit [m/s]
  • pe exit pressure (optional, with pa and Ae) [Pa] optional
  • pa ambient pressure (optional) [Pa] optional
  • Ae nozzle exit area (optional) [m^2] optional

Returns

  • F thrust [N]
  • F_kN thrust, kN
  • Isp specific impulse F/(mdot g0) [s]
  • c_eff effective exhaust velocity F/mdot [m/s]
  • F_pressure pressure thrust (pe - pa) Ae [N]

Applies when

  • mdot, ve > 0
  • pe, pa, Ae given together or not at all
  • steady, one-dimensional exit flow

Example

m.ask("Rocket thrust: mdot = 250 kg/s, ve = 3000 m/s")
→ F = 750000 N, F_kN = 750, Isp = 305.915 s, c_eff = 3000 m/s, F_pressure = 0 N

Stability 1

Neutral point and static margin (wing and tail)aero_neutral_point

The stick-fixed neutral point, the static margin, the airplane lift-curve slope and the pitching-moment slope Cm_alpha of a wing-tail aircraft (positions as fractions of the mean aerodynamic chord, aft of its leading edge).

h_n = h_{ac} + \eta\,\bar V_H\,\frac{a_t}{a}\left(1 - \frac{d\varepsilon}{d\alpha}\right),\quad \bar V_H = \frac{S_t l_t}{S\bar c},\quad C_{m\alpha} = -a\,(h_n - h_{cg})

Inputs

  • h_ac wing-body aerodynamic centre / mean chord
  • a_w wing lift-curve slope (per rad)
  • a_t tail lift-curve slope (per rad)
  • St_S tail area / wing area
  • lt_c distance from the wing aerodynamic centre to the tail aerodynamic centre / mean chord
  • deps downwash gradient d(epsilon)/d(alpha)
  • h_cg centre of gravity / mean chord
  • eta_t tail efficiency (dynamic-pressure ratio, default 1) optional

Returns

  • h_n neutral point / mean chord
  • SM static margin h_n - h_cg (positive = stable)
  • CL_alpha airplane lift-curve slope (per rad)
  • Cm_alpha pitching-moment slope about the cg (per rad)

Applies when

  • linear aerodynamics (small angles)
  • thrust and fuselage moment effects neglected beyond h_ac
  • stated ranges of each input

Example

m.ask("Neutral point: h_ac = 0.25, a_w = 5, a_t = 5, St_S = 0.2, lt_c = 4, deps = 0.5, h_cg = 0.3")
→ h_n = 0.613636, SM = 0.313636, CL_alpha = 5.5, Cm_alpha = -1.725

Standard atmosphere 5

Density altitude from pressure altitude and temperatureaero_density_altitude

Air density and density altitude (the standard-atmosphere height with the same density) from the pressure altitude and the outside air temperature.

\rho = \frac{p_{std}(h_p)}{R\,T},\quad \rho_{std}(h_\rho) = \rho

Inputs

  • hp pressure altitude (m, ft) [m]
  • T outside air temperature (K, °C, °F) [K]

Returns

  • rho air density [kg/m^3]
  • sigma density ratio rho/rho0
  • h_rho density altitude (geometric) [m]
  • h_rho_ft density altitude in feet
  • p static pressure at the pressure altitude [Pa]

Applies when

  • 150 K <= T <= 350 K
  • -1 km <= hp <= 47 km
  • the density within the standard atmosphere

Example

m.ask("Density altitude: hp = 0 ft, T = 15 °C")
→ rho = 1.225 kg/m^3, sigma = 1, h_rho = 0 m, h_rho_ft = 0, p = 101325 Pa
Geopotential height from geometric altitudeaero_geopotential_altitude

The geopotential height (the height in a uniform gravity field g0 with the same potential energy) and the local gravity at a geometric altitude.

H = \frac{1}{g_0}\int_0^h g\,dz = \frac{r_0 h}{r_0 + h},\quad g = g_0\left(\frac{r_0}{r_0 + h}\right)^2

Inputs

  • h geometric altitude (m, km, ft), 0 to 1000 km [m]

Returns

  • H geopotential height [m]
  • g gravitational acceleration at the altitude [m/s^2]
  • dH geometric minus geopotential height [m]

Applies when

  • 0 <= h <= 1000 km
  • inverse-square gravity with r0 = 6356766 m

Example

m.ask("Geopotential height: h = 0 km")
→ H = 0 m, g = 9.80665 m/s^2, dH = 0 m
Mach number, dynamic pressure, equivalent airspeed and Reynolds number at an altitudeaero_flight_condition

For a true airspeed at an altitude of the standard atmosphere: the Mach number, dynamic pressure, equivalent airspeed and (with a reference length) the Reynolds number.

M = \frac{V}{\sqrt{\gamma R T}},\quad q = \tfrac12\rho V^2,\quad V_E = V\sqrt{\rho/\rho_0},\quad Re = \frac{\rho V L}{\mu}

Inputs

  • V true airspeed (m/s, kt, km/h) [m/s]
  • h geometric altitude (standard atmosphere) [m]
  • L reference length for the Reynolds number, e.g. the chord (optional) [m] optional

Returns

  • M Mach number
  • q dynamic pressure [Pa]
  • EAS equivalent airspeed [m/s]
  • EAS_kt equivalent airspeed, knots
  • a speed of sound [m/s]
  • rho air density [kg/m^3]
  • Re Reynolds number rho V L/mu (with L)

Applies when

  • V > 0
  • -1 km <= h <= 47 km

Example

m.ask("Flight condition: V = 100 m/s, h = 0 m")
→ M = 0.293863, q = 6125 Pa, EAS = 100 m/s, EAS_kt = 194.384, a = 340.294 m/s, rho = 1.225 kg/m^3
Pressure altitude from static pressureaero_pressure_altitude

The pressure altitude: the height in the standard atmosphere at which the standard pressure equals the measured static pressure (what an altimeter set to 1013.25 hPa reads).

H = H_b + \frac{T_b}{L}\left[\left(\frac{p}{p_b}\right)^{-RL/g_0} - 1\right],\quad h = \frac{r_0 H}{r_0 - H}

Inputs

  • p static pressure (Pa, hPa, inHg, psi) [Pa]

Returns

  • h pressure altitude (geometric) [m]
  • h_ft pressure altitude in feet
  • H geopotential pressure altitude [m]
  • T_std standard temperature at that altitude [K]

Applies when

  • p within the standard atmosphere between -1 km and 47 km

Example

m.ask("Pressure altitude: p = 1013.25 hPa")
→ h = 0 m, h_ft = 0, H = 0 m, T_std = 288.15 K
Standard atmosphere at an altitudeaero_isa_properties

Temperature, pressure, density, speed of sound and viscosity of the International Standard Atmosphere (US 1976) at a geometric altitude, with the density, pressure and temperature ratios and the geopotential height.

T = T_b + L(H - H_b),\quad p = p_b\left(\frac{T_b}{T}\right)^{g_0/(RL)},\quad \rho = \frac{p}{RT},\quad a = \sqrt{\gamma R T}

Inputs

  • h geometric altitude above mean sea level (m, km, ft), -1 km to 47 km [m]

Returns

  • T temperature [K]
  • p pressure [Pa]
  • rho density [kg/m^3]
  • a speed of sound [m/s]
  • mu dynamic viscosity (Sutherland) [Pa*s]
  • sigma density ratio rho/rho0
  • delta pressure ratio p/p0
  • theta temperature ratio T/T0
  • H geopotential height [m]

Applies when

  • -1000 m <= h <= 47000 m

Example

m.ask("ISA properties: h = 0 m")
→ T = 288.15 K, p = 101325 Pa, rho = 1.225 kg/m^3, a = 340.294 m/s, mu = 1.78938e-05 Pa*s, sigma = 1, delta = 1, theta = 1, H = 0 m
Questions

Frequently asked

What does aerospace-engineering-ai999x do?

Aerospace Engineering answers questions in aerospace engineering: the standard atmosphere, lift and drag, aircraft performance, stability, propulsion and rocket performance, nozzles and orbital transfers. Each answer gives the value with its unit, the steps and the formula in LaTeX.

How do I install aerospace-engineering-ai999x?

With pip: pip install aerospace-engineering-ai999x. The same files are on Hugging Face (hf download AI999X/aerospace-engineering-ai999x --local-dir aerospace-engineering-ai999x) and GitHub.

Does it run offline?

Yes. It is a Python package that runs on an ordinary CPU without a network connection (Python >=3.10); no GPU and no API key are needed.

How many capabilities does aerospace-engineering-ai999x have?

80 capabilities in 13 topics, including Aircraft performance, Compressible flow, Orbits, Rocket performance, Rocket propulsion.

Which field and tasks does it cover?

Field: Engineering. Tasks: Question Answering, Token Classification, Text Classification, Sentence Similarity, Feature Extraction.

What does an answer look like?

Asked "ISA properties: h = 35000 ft", it answers: T = 218.924 K, p = 23908.9 Pa, rho = 0.380455 kg/m^3, a = 296.614 m/s, mu = 1.43408e-05 Pa*s, sigma = 0.310576, delta = 0.235963, theta = 0.759758, H = 10650.1 m.

What happens when a question cannot be answered?

It says so and names what is missing or out of range, instead of guessing a number.

More from AI999X

Explore every model.