Skip to content
scipython.com

E8.23A simple model of an airship envelope

A simple model for the envelope of an airship treats it as the volume of revolution obtained from a pair of quarter-ellipses joined at their (equal) semi-minor axes. The semi-major axis of the aft ellipse is taken to be longer than that representing the bow, by a factor \(\alpha=6\). Equations describing the cross section (in the vertical plane) of the airship envelope may be written

\[y = \begin{cases} \frac{b}{a}\sqrt{x(2a-x)} & (x \le a),\\ \frac{b}{a}\sqrt{a^2 - \frac{(x-a)^2}{\alpha^2}} & (a < x \le \alpha(a+1)). \end{cases}\]

The drag on the envelope is given by the formula

\[D = \textstyle \frac{1}{2}\rho_\mathrm{air}v^2V^{2/3}C_\mathrm{DV},\]

where \(\rho_\mathrm{air}\) is the air density, \(v\) the speed of the airship, \(V\) the envelope volume and the drag coefficient, \(C_\mathrm{DV}\) is estimated using the following empirical formula [1]:

\[C_\mathrm{DV} = \mathrm{Re}^{-1/6}[0.172(l/d)^{1/3} + 0.252(d/l)^{1.2} + 1.032(d/l)^{2.7}].\]

Here, \(\mathrm{Re} = \rho_\mathrm{air}vl/\mu\) is the Reynold's number and \(\mu\) the dynamic viscosity of the air. \(l\) and \(d\) are the airship length and maximum diameter (\(=2b\)) respectively.

Suppose we wish to minimize the drag with respect to the parameters \(a\) and \(b\) but fix the total volume of the airship envelope, \(V = \frac{2}{3}\pi a b^2(1+\alpha)\). The following program does this using the slsqp algorithm, for a volume of \(200000\;\mathrm{m^3}\), that of the Hindenburg.

airship
import numpy as np
from scipy.optimize import minimize

# air density (kg.m-3) and dynamic viscosity (Pa.s) at cruise altitude
rho, mu = 1.1, 1.5e-5
# air speed (m.s-1) at cruise altitude
v = 30


def CDV(l, d):
    """Calculate the drag coefficient."""
    Re = rho * v * l / mu  # Reynold's number
    r = l / d  # "Fineness" ratio
    return (0.172 * r ** (1 / 3) + 0.252 / r**1.2 + 1.032 / r**2.7) / Re ** (
        1 / 6
    )


def D(X):
    """Return the total drag on the airship envelope."""
    a, b = X
    l = a * (1 + alpha)
    return 0.5 * rho * v**2 * V(X) ** (2 / 3) * CDV(l, 2 * b)


# Fixed total volume of the airship envelope (m3)
V0 = 2.0e5
# Parameter describing the tapering of the stern of the envelope
alpha = 6


def V(X):
    """Return the volume of the envelope."""
    a, b = X
    return 2 * np.pi * a * b**2 * (1 + alpha) / 3


# Minimize the drag, constraining the volume to be equal to V0
a0, b0 = 70, 45  # initial guesses for a, b
con = {"type": "eq", "fun": lambda X: V(X) - V0}
res = minimize(D, (a0, b0), method="slsqp", constraints=con)
if res["success"]:
    a, b = res["x"]
    l, d = a * (1 + alpha), 2 * b  # length, greatest diameter
    print(f"Optimum parameters: a = {a:g} m, b = {b:g} m")
    print(f"V = {V(res['x']):g} m3")
    print(f"Drag, D = {res['fun']:g} N")
    print(f"Total length, l = {l:g} m")
    print(f"Greatest diameter, d = {d:g} m")
    print(f"Fineness ratio, l/d = {l / d:g}")
else:
    # We failed to converge: output the results dictionary
    print("Failed to minimize D!", res, sep="\n")

This example is a little contrived, since for fixed \(\alpha\) the requirement that \(V\) be constant means that \(a\) and \(b\) are not independent, but a solution is found readily enough:

Optimum parameters: a = 32.9301 m, b = 20.3536 m
V = 200000 m3
Drag, D = 20837.6 N
Total length, l = 230.51 m
Greatest diameter, d = 40.7071 m
Fineness ratio, l/d = 5.66266

The actual dimensions of the Hindenburg were \(l=245\;\mathrm{m}, d=41\;\mathrm{m}\) giving a the ratio \(l/d = 5.98\), so we didn't do too badly.

References

  1. S. F. Hoerner, Fluid Dynamic Drag, Hoerner Fluid Dynamics (1965)