This notebook contains course material from CBE20255 by Jeffrey Kantor (jeff at nd.edu); the content is available on Github. The text is released under the CC-BY-NC-ND-4.0 license, and code is released under the MIT license.
This notebook demonstrates a variety of energy calculations analyzing the design requirements for propulsion systems of naval torpedos.
Torpedo technology contributes to the security and safety of naval forces. In this notebook we explore the extreme requirements and design alternatives for torpedo propulsion.
"MK46 torpedo launch" by United States Navy, Mass Communication Specialist John L. Beeman - Navy NewsStand Photo ID: 070412-N-9851B-007
Navy NewsStand Home. Licensed under Public Domain via Wikimedia Commons.
Torpedo propulsion systems must operate in the absence of atmospheric oxygen for an oxidizer, provide the power necessary for fast and deep dives, be stable in storage and safe in marine and airborne environments. In this note we'll look at
The drag force on a torpedo is given by the formula
$$F_D = \frac{1}{2}\rho v^2 C_D A $$where CD is the drag coefficient, ρ is the density of the fluid, v is velocity, and A is the cross-sectional area. Assume CD = 0.095 for a well-designed torpedo.
The Mk-48 ADCAP, which is 21 inches in diameter and a mass of 1,663 kg, is claimed to have a range of 42,530 yards at 55 knots.
%matplotlib inline
import numpy as np
# One knot = 0.51444 meters per sec
v = 55*0.51444 # m/s
# One inch = 0.0254 meters
A = 0.25*np.pi*(21*0.0254)**2 # m**2
Cd = 0.095
rho = 1025.0 # kg/m**3 (sea water)
Fd = 0.5*rho*v**2*Cd*A # Newtons
print("Drag force at 55 knots = {:6.1f} Newtons".format(Fd))
W = v*Fd # Joules
print("Power requirement at 55 knots = {:6.1f} kW".format(W/1000.0))
print("Power requirement at 55 knots = {:6.1f} Hp".format(W/745.7))
Drag force at 55 knots = 8709.8 Newtons Power requirement at 55 knots = 246.4 kW Power requirement at 55 knots = 330.5 Hp
m = 1663.0 # kg
v = 55*0.51444 # m/s
Ea = 0.5*m*v**2 # Joules
print("Energy required to accelerate to 55 knots= {:6.1f} kJ".format(Ea/1000.0))
Energy required to accelerate to 55 knots= 665.7 kJ
d = 42530*0.9144 # meters
v = 55*0.51444 # m/s
t = d/v # seconds to range
Er = W*t # energy required
print("Time required for range = {:6.1f} sec".format(t))
print("Energy required for range = {:7.1f} kJ".format(Er/1000))
Time required for range = 1374.5 sec Energy required for range = 338719.2 kJ
E_fuel = (Er + Ea)/0.25/1000.0 # kJ
print("Fuel Energy Requirment at 25% eff. = {:6.1f} kJ".format(E_fuel))
Fuel Energy Requirment at 25% eff. = 1357539.5 kJ
"Mk 48 torpedo maintenance 1982" by United States Navy - U.S. DefenseImagery photo VIRIN: DN-SC-86-00553. Licensed under Public Domain via Wikimedia Commons.
The Mk 48 and torpedos use a monopropellant called Otto Fuel II to drive a hot-gas piston engine. The principle component of Otto fuel is propylene glycol dinitrate (PGDN, also called by its IUPAC name 1,2-propanediol dinitrate) that makes up 76% of the fuel by weight. Assuming the reaction proceeds as
C3H6N2O6 → 3 CO2 + 3 NH3
What is the specific energy content measured as kJ/kg of fuel at standard conditions?
The Mk 48 torpedo has an estimated maximum operating depth of 800m. What is specific energy content of the fuel at the pressure encountered at that depth?
How much fuel will be required by the Mk 48 ADCAP?
The density of Otto fuel is 1.232 g/ml. The thermochemical data for 1,2-propanediol dinitrate is available from the NIST Webbook.
mw = dict()
mw['PGDN'] = 166.0895 # g/gmol
Hf = dict()
Hf['PGDN'] = -296.9 # kJ/gmol
Hf['CO2'] = -393.5
Hf['NH3'] = -45.94
dH = 3*Hf['CO2'] + 3*Hf['NH3'] - Hf['PGDN']
print("Molar Heat of Reaction = {:6.1f} kJ/gmol PGDN".format(dH))
dH_fuel = 0.76*1000*dH/mw['PGDN']
print("Heat of Reaction = {:6.1f} kJ/kg fuel".format(dH_fuel))
Molar Heat of Reaction = -1021.4 kJ/gmol PGDN Heat of Reaction = -4673.9 kJ/kg fuel
# volume of fuel per kg-mol of PGDN
rho = 1232.0 # kg/m**3
gmols = rho*0.76*1000.0/mw['PGDN'] # gmols/m**3
Vhat = 1.0/gmols # m**3/gmol
Patm = 101325.0 # N/m**2
P800 = Patm + 800.0*1025.0*9.81 # N/m**2
R = 8.314 # m**3Pa/K/gmol
T = 298.15 # standard temperature
Hf['PGDN'] = -296.9 + Vhat*(P800-Patm)/1000
Hf['CO2'] = -393.5 + R*T*np.log(P800/Patm)/1000
Hf['NH3'] = -45.94 + R*T*np.log(P800/Patm)/1000
dH = 3*Hf['CO2'] + 3*Hf['NH3'] - Hf['PGDN']
print("Molar Heat of Reaction = {:6.1f} kJ/gmol PGDN".format(dH))
dH_fuel_800 = 0.76*1000*dH/mw['PGDN']
print("Heat of Reaction = {:6.1f} kJ/kg fuel".format(dH_fuel_800))
Molar Heat of Reaction = -957.6 kJ/gmol PGDN Heat of Reaction = -4381.8 kJ/kg fuel
mass_fuel = E_fuel/(-dH_fuel)
print("Otto Fuel Required = {:6.1f} kg".format(mass_fuel))
Otto Fuel Required = 290.5 kg
We can also try and estimate the fuel capacity from available diagrams of the Mk 48 torpedo.
L = (400.0/1951.0)*5.86 # length of fuel tank in m
A = 0.25*np.pi*(0.50)**2 # cross-sectional area in m
V = A*L*1000.0 # volume in liters
rho = 1.232 # Otto fuel density in g/ml
print("Maximum fuel capacity = {:6.1f} liters".format(V))
print("Maximum fuel capacity = {:6.1f} kg".format(V*rho))
Maximum fuel capacity = 235.9 liters Maximum fuel capacity = 290.6 kg
Compute the engine work requirement assuming an 85% propulsion system efficiency, and a motor conversion efficiency of 88% (same as a Tesla roadster).
W_engine = (Ea+Er)/0.85/0.88
Estimate the adiabatic combustion temperature assuming that 76% of the fuel mass is available for a sensible temperature increase.
Cp = dict()
Cp['CO2'] = 35.6 # J/K/gmol
Cp['NH3'] = 37.0 # J/K/gmol
Tcomb = 298.15 - 0.76*dH*1000.0/(3*Cp['CO2'] + 3*Cp['NH3'])
print("Estimated Combustion Temperature = {:6.1f} K".format(Tcomb))
Estimated Combustion Temperature = 3639.6 K
Assume that work is extracted by a 12-to-1 adiabatic expansion of the combustion gases in a hot-gas piston engine, compute the moles of hot gas required.
R = 8.314 # m**3 Pa/K/gmol
gamma = (0.52+0.21)/(0.4 + 0.16)
alpha = 1.0/(gamma-1)
Vr = 1.0 - 12.0**(1-gamma)
n_gas = W_engine/alpha/8.314/Tcomb/Vr
print("gram-moles of hot gas required = {:6.1f}".format(n_gas))
gram-moles of hot gas required = 8593.5
Assume the fuel additives have the same average molecular weight as the ammonia/carbon dioxide mixture.
n_pgdn = (0.76*n_gas)/6.0
mass_pgdn = mw['PGDN']*n_pgdn
mass_otto = mass_pgdn/0.76/1000.0
print("Otto fuel required = {:6.1f} kg".format(mass_otto))
Otto fuel required = 237.9 kg
The Mk 50 torpedo was designed a lightweight device that could be used against fast and deep-diving submarines. It is a much smaller device only 9.5 ft long, 12.75 inches in diameter, and 800 pounds. The small size allows it to launched from a variety of platforms, including ships, airplanes, and helicopters.
"US Navy 040623-N-5319A-001 Sailors assigned to the weapons department aboard the guided missile destroyer USS Bulkeley (DDG 84), hoist an Anti-Submarine Warfare (ASW) MK-50 Torpedo off of the flight deck" by U.S. Navy photo by Photographer's Mate 1st Class Brien Aho - This Image was released by the United States Navy with the ID 040623-N-5319A-001. Licensed under Public Domain via Wikimedia Commons.
A critical part of its design is the Stored Chemical Energy Propulsion System (SCEPS) in which sulfur hexaflouride gas is sprayed onto a solid block of lithium to produce the heat necessary to run a steam-powered, closed-cycle rankine engine. Sulfer hexaflouride has a number of interesting properties which are demonstrated in these videos.
from IPython.display import YouTubeVideo
YouTubeVideo("d-XbjFn3aqE",420,315,rel=0)
Sulfur hexaflouride is relatively inert but reacts with lithium at an operating temperature of about 790 °C via the stoichiometric reaction
8 Li + SF6 → Li2S + 6 LiF
This reaction produces no gaseous products which allows the propulsion system to be completely self-contained - an enormous design advantage for a torpedo that must operate under high pressure conditions in deep ocean waters.
The core issue for this problem is finding reliable thermodynamic information. Here's one source ( http://www.update.uu.se/~jolkkonen/pdf/CRC_TD.pdf) that you may find useful in addition to the NIST Webbook.
Hf = dict() # kJ/gmol
Cp = dict() # J/K/gmol
Hf['Li'] = 0.0
Cp['Li'] = 24.8
Hf['SF6'] = -1220.5
Cp['SF6'] = 97.0
Hf['Li2S'] = -441.4
Cp['Li2S'] = 54.1 # Missing Data, use Li2O
Hf['LiF'] = -616.0
Cp['LiF'] = 41.6
Hr = Hf['Li2S'] + Cp['Li2S']*(25-790)/1000.0 \
+ 6*(Hf['LiF'] + Cp['LiF']*(25-790)/1000.0) \
- 8*Hf['Li'] - Hf['SF6']
print("Heat of Reaction at 790 deg C = {:6.1f} kJ/gmol".format(Hr))
Heat of Reaction at 790 deg C = -3149.2 kJ/gmol
mw = dict()
mw['Li'] = 6.941
mw['SF6'] = 146.06
dH = Hr*1000.0/(8*mw['Li'] + mw['SF6'])
print("Heat of Reaction at 790 deg C = {:6.1f} kJ/kg".format(dH))
Heat of Reaction at 790 deg C = -15622.1 kJ/kg
eta_carnot = 1 - (30+273.15)/(565+273.15)
print("Carnot efficiency = {:6.3f}".format(eta_carnot))
Carnot efficiency = 0.638
eta_ca = 1 - np.sqrt((30+273.15)/(565+273.15))
print("Curzon-Ahlborn efficiency = {:6.3f}".format(eta_ca))
Curzon-Ahlborn efficiency = 0.399
A = 0.25*np.pi*(12.75*0.0254)**2 # area in m**2
rho = 1025.0 # kg/m**3
v = 50*0.5144 # m/s
Cd = 0.10
Fd = 0.5*rho*Cd*A*v**2 # drag force in Newtons
print("Drag force at 50 knots = {:6.1f} Newtons".format(Fd))
W = v*Fd
print("Power requirement at 50 knots = {:6.1f} Watts".format(W))
print("Power requirement at 50 knots = {:6.1f} Hp".format(W/745.7))
t = 15000.0/v # time in sec
E = W*t/1000.0 # energy required in kJ
print("Hydrodynamic Energy requirement at 50 knots = {:6.1f} kJ".format(E))
E_fuel = E/0.85/eta_ca
print("Fuel Energy requirement at 50 knots = {:6.1f} kJ".format(E_fuel))
print("Fuel Requirement at 50 knots = {:6.1f} kg".format(E_fuel/(-dH)))
w_Li = 8*mw['Li']/(8*mw['Li'] + mw['SF6'])
print("Li Requirement = {:6.2f} kg".format(w_Li*E_fuel/(-dH)))
print("SF6 Requirement = {:6.2f} kg".format((1-w_Li)*E_fuel/(-dH)))
Drag force at 50 knots = 2792.6 Newtons Power requirement at 50 knots = 71826.5 Watts Power requirement at 50 knots = 96.3 Hp Hydrodynamic Energy requirement at 50 knots = 41889.5 kJ Fuel Energy requirement at 50 knots = 123638.9 kJ Fuel Requirement at 50 knots = 7.9 kg Li Requirement = 2.18 kg SF6 Requirement = 5.73 kg
The Black Shark torpedo is an electrically powered, 21 inch diameter torpedo produced by Whitehead Sistemi Subacquei (WASS) group of Italy. It has an estimated range of 22 km at a speed of 52 knots.
<img src = "http://www.naval.com.br/blog/wp-content/uploads/2009/02/al-torpedos.jpg%22/ style = "height:600px">
The Black Shark torpedo employs a salt water activated [AgO-Al battery[(http://www.saftbatteries.com/force_download/Torpedo_brochure09_13.pdf) The anode half-reaction is
2 Al + 8 OH- → 2 Al02- + 4 H2O + 6 electrons
The OH- is produced by the dissolution of NaOH when then the torpedo enters the water. The cathode half-reaction is
3 AgO + 3 H2O + 6 electrons → 3 Ag + 6 OH-
for an overall electrochemical reaction
2 Al + 3 AgO + 2 OH- → 2 AlO2- + 3 AgO + H2O
An individual battery cell has a measured potential of Ecell = 1.33 volts under operating conditions. The Gibb's free energy $\Delta G$, is related to the number of electrons transferred in the reaction, $n$, and the cell potential by
$$\Delta G = -n F E_{cell} $$where $F = 96,485$ Columbs/gmol is the charge on one gram-mole of electrons.
Assuming the battery/motor system has an overall efficiency of a Tesla roadster (88% efficient), and the propulsion system is 85% efficient, estimate the chemical reactants necessary to power the Black Shark torpedo.
dG = -6.0*96485.0*1.33/1000.0
print("Gibb's Free Energy = {:6.1f} kJ".format(dG))
mw['Al'] = 26.98
mw['AgO'] = 231.735
mw['NaOH'] = 39.997
dG = 1000.0*dG/(2*mw['Al'] + 3*mw['AgO'] + 2*mw['NaOH'])
print("Gibb's Free Energy = {:6.1f} kJ/kg".format(dG))
Gibb's Free Energy = -770.0 kJ Gibb's Free Energy = -928.6 kJ/kg
A = 0.25*np.pi*(21.0*0.0254)**2 # area in m**2
rho = 1025.0 # kg/m**3
v = 52*0.5144 # m/s
Cd = 0.095
Fd = 0.5*rho*Cd*A*v**2 # drag force in Newtons
print("Drag force at 52 knots = {:6.1f} Newtons".format(Fd))
W = v*Fd
print("Power requirement at 52 knots = {:6.1f} Watts".format(W))
print("Power requirement at 52 knots = {:6.1f} Hp".format(W/745.7))
t = 22000.0/v # time in sec
E = W*t/1000.0 # energy required in kJ
print("Hydrodynamic Energy requirement at 52 knots = {:6.1f} kJ".format(E))
Drag force at 52 knots = 7784.3 Newtons Power requirement at 52 knots = 208221.8 Watts Power requirement at 52 knots = 279.2 Hp Hydrodynamic Energy requirement at 52 knots = 171255.6 kJ
E_battery = E/0.85/0.88
print("Battery Energy requirement at 52 knots = {:6.1f} kJ".format(E_battery))
print("Battery Reactant Requirements at 52 knots = {:6.1f} kg".format(E_battery/(-dG)))
Battery Energy requirement at 52 knots = 228951.3 kJ Battery Reactant Requirements at 52 knots = 246.6 kg