1. Christopher Iliffe Sprague
Aerodynamics
Lifting Line Theory Wing Design (Python 2.7)
Purpose
This program uses lifting line theory to estimate the lift, induced drag, root bending moment, and span efficiency factor of a
wing with specified characteristics in specified cruising conditions. This program also outputs spanwise plots of the wing's
geometric angle of attack distribution and lift distribution.
How it Works
This program uses a Fourier sin series evaluated at 11 evenly spaced spanwise locations on the wing to approximate the wing's
circulation distribution which then, by the Kutta Joukowski theorem, is used to estimate the wing's lift distribution. The
spanwise sectional geometric angle of attack varies sinusoidally along the span according to 𝛼 = 𝛼0sin( 𝜃) where 𝜃 represents
the spanwise location and varies from 0 to 𝜋, 0 indicates the wing's left tip,
𝜋
2
indicates the wing's root, 𝜋 indicates the wing's
right tip; 𝛼0 represents the geometric angle of attack at the wing’s root.
Parameters
Chord (𝑐), Span (𝑏), Zero-Lift Angle of Attack (𝛼 𝐿=0), Free Stream Density (𝜌∞), Free Stream Velocity (𝑣∞)
7. Christopher Iliffe Sprague
Aerodynamics
85 return
(2*Lift(b,JigTwist,TipAngleAttack)**2)/(math.pi*rho*(V**2)*(b**2)*SpanEfficiencyFactor(b,JigTwist,TipAngleAttack))
86 def Characteristics(b,JigTwist,TipAngleAttack):
87 print "Lift: ", round(Lift(b,JigTwist,TipAngleAttack),4), "Newtons [N]"
88 print "Induced Drag: ", round(InducedDrag(b,JigTwist,TipAngleAttack),4), "Newtons [N]"
89 print "Root Bending Moment: ", round(RootMoment(b,JigTwist,TipAngleAttack),4), "Newtons [N]"
90 print "Span Efficiency Factor: ", round(SpanEfficiencyFactor(b,JigTwist,TipAngleAttack),4)
91 #Interactivity
92 r='y'
93 print "*"*23, "Lifting Line Theory: Wing Design","*"*23
94 print "*"*22,"Author: Christopher Iliffe Sprague","*"*22
95 print
96 print '*Purpose*'
97 print "This program uses lifting line theory to estimate the lift, induced drag, root bending moment, and span efficiency
factor of a wing with specified characteristics in specified cruising conditions. This program also outputs spanwise plots of
the wing's geometric angle of attack distribution and lift distribution."
98 print
99 print '*How It Works*'
100 print "This program uses a Fourier sin series evaluated at 11 evenly spaced spanwise locations on the wing to approximate
the wing's circulation distribution which then, by the Kutta Joukowski theorem, is used to estimate the wing's lift
distribution. The spanwise sectional geometric angle of attack varies sinusoidally along the span according to
a=RootAngle*Sin(Theta), where Theta represents the spanwise location and varries from 0 to Pi, 0 indicates the wing's left
tip, Pi/2 indicates the wing's root, Pi indicates the wing's right tip."
101 print
102 print '*Parameters*'
103 print "*Wing Characteristic Parameters: Chord, Span, Zero-Lift Angle of Attack."
104 print "*Cruising Condition Parameters: Free Stream Density, Free Stream Velocity."
105 n=11.
106 print
8. Christopher Iliffe Sprague
Aerodynamics
107 print '*Example*'
108 print 'Free Stream Density = 1.225 kg/m^3, Free Stream Velocity = 30 m/s, Chord = 0.75 m, Symmetry = n, Zero-Lift
Angle of Attack = -0.08 rad, Span = 13.5 m, Root Geometric Angle of Attack = 0.085 rad.'
109 print
110 while r=='y':
111 print "*Operating Conditions*"
112 rho=float(raw_input("Free stream density at cruise in kilograms per cubic meter [kg/m^3]?: "))
113 V=float(raw_input("Free stream crusing velocity in meters per second [m/s]?: "))
114 print
115 print "*Airfoil Characteristics*"
116 c=float(raw_input("Chord length of the wing's cross section in meters [m]?: "))
117 CS=raw_input("Wing's cross section symetric?(y for yes, n for no): ")
118 if CS == "y":
119 al0=0.
120 if CS == "n":
121 al0=float(raw_input("Zero-lift angle of attack for the wing's cross section in radians [rad]?: "))
122 b=float(raw_input("Wing's span in meters [m]?: "))
123 JigTwist=float(raw_input("Geometric angle of attack at the wing's root in radians [rad]?: "))
124 print
125 raw_input('Press enter to calculate results... (This may take up to a minute)')
126 print
127 print '*Results*'
128 Characteristics(b,JigTwist,0)
129 print
130 GeometricAngleAttackPlotCartesian(b,JigTwist,0)
131 print
132 SectionalLiftPlotCartesian(b,JigTwist,0)
133 print
134 raw_input('Press enter to startover...')
135 print