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
The drag on the envelope is given by the formula
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]:
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.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
- S. F. Hoerner, Fluid Dynamic Drag, Hoerner Fluid Dynamics (1965)