A 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 \begin{align*} y = \begin{array}{ll} \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{array} \end{align*}

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.

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.e5
# 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('Optimum parameters: a = {:g} m, b = {:g} m'.format(a, b))
    print('V = {:g} m3'.format(V(res['x'])))
    print('Drag, D = {:g} N'.format(res['fun']))
    print('Total length, l = {:g} m'.format(l))
    print('Greatest diameter, d = {:g} m'.format(d))
    print('Fineness ratio, l/d = {:g}'.format(l/d))
    # 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.

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