Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Ok-landscape
GitHub Repository: Ok-landscape/computational-pipeline
Path: blob/main/latex-templates/templates/aerospace/aerodynamic_lift.tex
51 views
unlisted
1
\documentclass[a4paper, 11pt]{article}
2
\usepackage[utf8]{inputenc}
3
\usepackage[T1]{fontenc}
4
\usepackage{amsmath, amssymb}
5
\usepackage{graphicx}
6
\usepackage{siunitx}
7
\usepackage{booktabs}
8
\usepackage{algorithm2e}
9
\usepackage{subcaption}
10
\usepackage[makestderr]{pythontex}
11
12
% Theorem environments for technical report style
13
\newtheorem{definition}{Definition}
14
\newtheorem{theorem}{Theorem}
15
\newtheorem{remark}{Remark}
16
17
\title{Aerodynamic Lift Analysis: From Thin Airfoil Theory to Computational Modeling\\
18
\large Multi-Airfoil Comparison with Reynolds Number Effects}
19
\author{Aerospace Engineering Division\\Computational Science Templates}
20
\date{\today}
21
22
\begin{document}
23
\maketitle
24
25
\begin{abstract}
26
This technical report presents a comprehensive analysis of aerodynamic lift characteristics for various airfoil configurations. We examine lift coefficient behavior as a function of angle of attack across multiple NACA airfoil series, investigate Reynolds number effects on boundary layer transition, and compute optimal flight conditions for maximum aerodynamic efficiency. The analysis includes thin airfoil theory validation, stall modeling, and drag polar construction for performance envelope determination.
27
\end{abstract}
28
29
\section{Introduction}
30
Aerodynamic forces are fundamental to aircraft design and performance optimization. The lift coefficient $C_L$ determines an aircraft's ability to generate the force necessary for flight, while the drag coefficient $C_D$ represents the resistance to motion through the fluid. Understanding the relationship between these coefficients and flight conditions is essential for efficient aircraft design.
31
32
\begin{definition}[Lift Coefficient]
33
The lift coefficient is a dimensionless quantity relating lift force to dynamic pressure and reference area:
34
\begin{equation}
35
C_L = \frac{L}{\frac{1}{2}\rho V^2 S}
36
\end{equation}
37
where $L$ is lift force, $\rho$ is air density, $V$ is freestream velocity, and $S$ is the reference wing area.
38
\end{definition}
39
40
\section{Mathematical Framework}
41
42
\subsection{Thin Airfoil Theory}
43
For incompressible, inviscid flow over a thin airfoil, the lift coefficient varies linearly with angle of attack:
44
\begin{equation}
45
C_L = C_{L_\alpha}(\alpha - \alpha_{L=0})
46
\end{equation}
47
where $C_{L_\alpha} = 2\pi$ rad$^{-1}$ is the lift curve slope and $\alpha_{L=0}$ is the zero-lift angle of attack.
48
49
\begin{theorem}[Kutta-Joukowski]
50
The lift per unit span on a two-dimensional airfoil is given by:
51
\begin{equation}
52
L' = \rho V \Gamma
53
\end{equation}
54
where $\Gamma$ is the circulation around the airfoil.
55
\end{theorem}
56
57
\subsection{Drag Polar}
58
The total drag coefficient consists of parasitic and induced components:
59
\begin{equation}
60
C_D = C_{D_0} + \frac{C_L^2}{\pi e AR}
61
\end{equation}
62
where $C_{D_0}$ is zero-lift drag, $e$ is the Oswald efficiency factor, and $AR$ is the aspect ratio.
63
64
\subsection{Reynolds Number Effects}
65
The Reynolds number characterizes the flow regime:
66
\begin{equation}
67
Re = \frac{\rho V c}{\mu} = \frac{V c}{\nu}
68
\end{equation}
69
Higher Reynolds numbers promote earlier boundary layer transition, affecting both lift curve slope and maximum lift coefficient.
70
71
\section{Computational Analysis}
72
73
\begin{pycode}
74
import numpy as np
75
import matplotlib.pyplot as plt
76
from scipy.interpolate import interp1d
77
plt.rc('text', usetex=True)
78
plt.rc('font', family='serif')
79
80
np.random.seed(42)
81
82
# Define multiple NACA airfoils with different characteristics
83
airfoils = {
84
'NACA 0012': {'camber': 0.0, 'thickness': 0.12, 'Cl_alpha': 5.73, 'alpha_0': 0.0, 'Cd_0': 0.006, 'Cl_max': 1.5},
85
'NACA 2412': {'camber': 0.02, 'thickness': 0.12, 'Cl_alpha': 5.90, 'alpha_0': -2.0, 'Cd_0': 0.007, 'Cl_max': 1.6},
86
'NACA 4412': {'camber': 0.04, 'thickness': 0.12, 'Cl_alpha': 6.05, 'alpha_0': -4.0, 'Cd_0': 0.008, 'Cl_max': 1.7},
87
'NACA 6412': {'camber': 0.06, 'thickness': 0.12, 'Cl_alpha': 6.15, 'alpha_0': -5.5, 'Cd_0': 0.010, 'Cl_max': 1.75}
88
}
89
90
# Angle of attack range
91
alpha_deg = np.linspace(-8, 22, 150)
92
93
# Function to compute lift coefficient with stall
94
def compute_Cl(alpha_deg, params, Re_factor=1.0):
95
alpha_rad = np.deg2rad(alpha_deg)
96
alpha_0_rad = np.deg2rad(params['alpha_0'])
97
98
# Linear region
99
Cl_linear = params['Cl_alpha'] * (alpha_rad - alpha_0_rad)
100
101
# Stall modeling with smooth transition
102
stall_alpha = 14.0 * Re_factor # Stall angle increases with Re
103
Cl_max = params['Cl_max'] * Re_factor
104
105
# Smooth stall using tanh transition
106
stall_sharpness = 0.5
107
alpha_diff = alpha_deg - stall_alpha
108
stall_factor = 0.5 * (1 - np.tanh(stall_sharpness * alpha_diff))
109
post_stall = Cl_max * np.exp(-0.08 * np.maximum(0, alpha_diff))
110
111
Cl = stall_factor * np.minimum(Cl_linear, Cl_max) + (1 - stall_factor) * post_stall
112
return Cl
113
114
# Function to compute drag coefficient
115
def compute_Cd(Cl, params, AR=8, e=0.85):
116
Cd_0 = params['Cd_0']
117
Cd_induced = Cl**2 / (np.pi * e * AR)
118
return Cd_0 + Cd_induced
119
120
# Compute for all airfoils
121
results = {}
122
for name, params in airfoils.items():
123
Cl = compute_Cl(alpha_deg, params)
124
Cd = compute_Cd(Cl, params)
125
L_D = np.where(Cd > 0, Cl / Cd, 0)
126
127
# Find key points
128
max_ld_idx = np.argmax(L_D)
129
max_Cl_idx = np.argmax(Cl)
130
131
results[name] = {
132
'Cl': Cl, 'Cd': Cd, 'L_D': L_D,
133
'max_ld': L_D[max_ld_idx], 'alpha_max_ld': alpha_deg[max_ld_idx],
134
'Cl_max': Cl[max_Cl_idx], 'alpha_stall': alpha_deg[max_Cl_idx]
135
}
136
137
# Reynolds number study for NACA 2412
138
Re_numbers = [1e5, 5e5, 1e6, 5e6]
139
Re_factors = [0.85, 0.92, 1.0, 1.05]
140
Re_results = {}
141
for Re, factor in zip(Re_numbers, Re_factors):
142
Cl = compute_Cl(alpha_deg, airfoils['NACA 2412'], factor)
143
Re_results[Re] = Cl
144
145
# Aspect ratio study
146
aspect_ratios = [4, 6, 8, 10, 12]
147
AR_results = {}
148
Cl_ref = compute_Cl(alpha_deg, airfoils['NACA 2412'])
149
for AR in aspect_ratios:
150
Cd = compute_Cd(Cl_ref, airfoils['NACA 2412'], AR=AR)
151
L_D = np.where(Cd > 0, Cl_ref / Cd, 0)
152
AR_results[AR] = {'Cd': Cd, 'L_D': L_D, 'max_ld': np.max(L_D)}
153
154
# Create comprehensive visualization
155
fig = plt.figure(figsize=(14, 12))
156
157
# Plot 1: Lift curves for all airfoils
158
ax1 = fig.add_subplot(2, 3, 1)
159
colors = plt.cm.viridis(np.linspace(0, 0.8, len(airfoils)))
160
for (name, res), color in zip(results.items(), colors):
161
ax1.plot(alpha_deg, res['Cl'], linewidth=2, color=color, label=name)
162
ax1.axhline(y=0, color='k', linewidth=0.5)
163
ax1.axvline(x=0, color='k', linewidth=0.5)
164
ax1.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')
165
ax1.set_ylabel(r'Lift Coefficient $C_L$')
166
ax1.set_title('Lift Curves: NACA Airfoil Comparison')
167
ax1.legend(fontsize=8, loc='lower right')
168
ax1.grid(True, alpha=0.3)
169
ax1.set_xlim(-8, 22)
170
171
# Plot 2: Drag polars
172
ax2 = fig.add_subplot(2, 3, 2)
173
for (name, res), color in zip(results.items(), colors):
174
ax2.plot(res['Cd'], res['Cl'], linewidth=2, color=color, label=name)
175
ax2.set_xlabel(r'Drag Coefficient $C_D$')
176
ax2.set_ylabel(r'Lift Coefficient $C_L$')
177
ax2.set_title('Drag Polars')
178
ax2.legend(fontsize=8, loc='lower right')
179
ax2.grid(True, alpha=0.3)
180
181
# Plot 3: Lift-to-Drag ratio
182
ax3 = fig.add_subplot(2, 3, 3)
183
for (name, res), color in zip(results.items(), colors):
184
ax3.plot(alpha_deg, res['L_D'], linewidth=2, color=color, label=name)
185
ax3.plot(res['alpha_max_ld'], res['max_ld'], 'o', color=color, markersize=6)
186
ax3.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')
187
ax3.set_ylabel(r'Lift-to-Drag Ratio $L/D$')
188
ax3.set_title('Aerodynamic Efficiency')
189
ax3.legend(fontsize=8, loc='upper right')
190
ax3.grid(True, alpha=0.3)
191
ax3.set_xlim(-8, 22)
192
193
# Plot 4: Reynolds number effects
194
ax4 = fig.add_subplot(2, 3, 4)
195
Re_colors = plt.cm.plasma(np.linspace(0.2, 0.8, len(Re_numbers)))
196
for Re, color in zip(Re_numbers, Re_colors):
197
ax4.plot(alpha_deg, Re_results[Re], linewidth=2, color=color,
198
label=f'$Re = {Re:.0e}$')
199
ax4.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')
200
ax4.set_ylabel(r'Lift Coefficient $C_L$')
201
ax4.set_title('Reynolds Number Effects (NACA 2412)')
202
ax4.legend(fontsize=8, loc='lower right')
203
ax4.grid(True, alpha=0.3)
204
205
# Plot 5: Aspect ratio effect on L/D
206
ax5 = fig.add_subplot(2, 3, 5)
207
AR_colors = plt.cm.cool(np.linspace(0.2, 0.8, len(aspect_ratios)))
208
for AR, color in zip(aspect_ratios, AR_colors):
209
ax5.plot(alpha_deg, AR_results[AR]['L_D'], linewidth=2, color=color,
210
label=f'$AR = {AR}$')
211
ax5.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')
212
ax5.set_ylabel(r'Lift-to-Drag Ratio $L/D$')
213
ax5.set_title('Aspect Ratio Effects on Efficiency')
214
ax5.legend(fontsize=8, loc='upper right')
215
ax5.grid(True, alpha=0.3)
216
217
# Plot 6: Summary bar chart
218
ax6 = fig.add_subplot(2, 3, 6)
219
names = list(results.keys())
220
max_lds = [results[n]['max_ld'] for n in names]
221
stall_angles = [results[n]['alpha_stall'] for n in names]
222
223
x = np.arange(len(names))
224
width = 0.35
225
226
bars1 = ax6.bar(x - width/2, max_lds, width, label=r'$(L/D)_{max}$', color='steelblue', alpha=0.8)
227
ax6_twin = ax6.twinx()
228
bars2 = ax6_twin.bar(x + width/2, stall_angles, width, label=r'$\alpha_{stall}$', color='coral', alpha=0.8)
229
230
ax6.set_xlabel('Airfoil')
231
ax6.set_ylabel(r'$(L/D)_{max}$', color='steelblue')
232
ax6_twin.set_ylabel(r'Stall Angle (deg)', color='coral')
233
ax6.set_xticks(x)
234
ax6.set_xticklabels([n.replace('NACA ', '') for n in names], rotation=45)
235
ax6.set_title('Performance Summary')
236
ax6.legend(loc='upper left', fontsize=8)
237
ax6_twin.legend(loc='upper right', fontsize=8)
238
239
plt.tight_layout()
240
plt.savefig('aerodynamic_lift_plot.pdf', bbox_inches='tight', dpi=150)
241
print(r'\begin{center}')
242
print(r'\includegraphics[width=\textwidth]{aerodynamic_lift_plot.pdf}')
243
print(r'\end{center}')
244
plt.close()
245
246
# Extract key results for reporting
247
best_airfoil = max(results.items(), key=lambda x: x[1]['max_ld'])
248
best_name = best_airfoil[0]
249
best_ld = best_airfoil[1]['max_ld']
250
best_alpha = best_airfoil[1]['alpha_max_ld']
251
\end{pycode}
252
253
\section{Computational Algorithm}
254
255
\begin{algorithm}[H]
256
\SetAlgoLined
257
\KwIn{Airfoil parameters, angle of attack range $\alpha$, Reynolds number $Re$}
258
\KwOut{Lift coefficient $C_L$, drag coefficient $C_D$, aerodynamic efficiency $L/D$}
259
\tcc{Linear lift region}
260
$C_L \leftarrow C_{L_\alpha}(\alpha - \alpha_{L=0})$\;
261
\tcc{Stall modeling}
262
\If{$\alpha > \alpha_{stall}$}{
263
$C_L \leftarrow C_{L_{max}} \exp(-k(\alpha - \alpha_{stall}))$\;
264
}
265
\tcc{Drag computation}
266
$C_{D_i} \leftarrow C_L^2 / (\pi e \cdot AR)$\;
267
$C_D \leftarrow C_{D_0} + C_{D_i}$\;
268
\tcc{Efficiency}
269
$L/D \leftarrow C_L / C_D$\;
270
\Return{$C_L, C_D, L/D$}
271
\caption{Aerodynamic Coefficient Computation}
272
\end{algorithm}
273
274
\section{Results and Discussion}
275
276
\subsection{Airfoil Comparison}
277
278
\begin{pycode}
279
# Generate results table
280
print(r'\begin{table}[h]')
281
print(r'\centering')
282
print(r'\caption{Aerodynamic Performance Summary for NACA Airfoils}')
283
print(r'\begin{tabular}{lcccccc}')
284
print(r'\toprule')
285
print(r'Airfoil & $C_{L_{max}}$ & $\alpha_{stall}$ & $(L/D)_{max}$ & $\alpha_{(L/D)_{max}}$ & $C_{D_0}$ & $\alpha_{L=0}$ \\')
286
print(r' & & (deg) & & (deg) & & (deg) \\')
287
print(r'\midrule')
288
for name in airfoils.keys():
289
params = airfoils[name]
290
res = results[name]
291
print(f"{name} & {res['Cl_max']:.2f} & {res['alpha_stall']:.1f} & {res['max_ld']:.1f} & {res['alpha_max_ld']:.1f} & {params['Cd_0']:.4f} & {params['alpha_0']:.1f} \\\\")
292
print(r'\bottomrule')
293
print(r'\end{tabular}')
294
print(r'\end{table}')
295
\end{pycode}
296
297
The \py{best_name} airfoil achieves the highest lift-to-drag ratio of \py{f"{best_ld:.1f}"} at an angle of attack of \py{f"{best_alpha:.1f}"}$^\circ$.
298
299
\subsection{Effect of Camber}
300
301
\begin{remark}[Camber Effects]
302
Increasing camber shifts the lift curve upward, providing positive lift at zero geometric angle of attack. This is beneficial for takeoff and landing but increases zero-lift drag. The NACA 6412 provides the highest $C_{L_{max}}$ but at the cost of increased parasitic drag.
303
\end{remark}
304
305
\subsection{Reynolds Number Sensitivity}
306
307
Higher Reynolds numbers result in:
308
\begin{itemize}
309
\item Delayed boundary layer transition
310
\item Higher maximum lift coefficient
311
\item Increased stall angle
312
\item Reduced skin friction drag
313
\end{itemize}
314
315
\subsection{Aspect Ratio Analysis}
316
317
\begin{pycode}
318
# Aspect ratio table
319
print(r'\begin{table}[h]')
320
print(r'\centering')
321
print(r'\caption{Effect of Aspect Ratio on Maximum L/D}')
322
print(r'\begin{tabular}{cc}')
323
print(r'\toprule')
324
print(r'Aspect Ratio & $(L/D)_{max}$ \\')
325
print(r'\midrule')
326
for AR in aspect_ratios:
327
print(f"{AR} & {AR_results[AR]['max_ld']:.1f} \\\\")
328
print(r'\bottomrule')
329
print(r'\end{tabular}')
330
print(r'\end{table}')
331
\end{pycode}
332
333
\begin{theorem}[Aspect Ratio Scaling]
334
For a given airfoil profile, the maximum lift-to-drag ratio scales approximately as:
335
\begin{equation}
336
\left(\frac{L}{D}\right)_{max} \propto \sqrt{AR}
337
\end{equation}
338
This explains why high-performance sailplanes use very high aspect ratio wings ($AR > 20$).
339
\end{theorem}
340
341
\section{Design Implications}
342
343
\subsection{Flight Regime Selection}
344
\begin{itemize}
345
\item \textbf{Maximum Range}: Fly at $(L/D)_{max}$, typically $\alpha \approx 4-6^\circ$
346
\item \textbf{Maximum Endurance}: Fly at minimum power required, $\alpha$ slightly higher
347
\item \textbf{Climb}: Higher $\alpha$ for maximum excess thrust
348
\item \textbf{Cruise}: Balance between speed and efficiency
349
\end{itemize}
350
351
\subsection{Stall Considerations}
352
The stall characteristics are critical for flight safety:
353
\begin{itemize}
354
\item Symmetric airfoils (NACA 0012) have abrupt stall
355
\item Cambered airfoils provide gentler stall warning
356
\item Washout (wing twist) ensures tip stalls after root
357
\end{itemize}
358
359
\section{Limitations and Extensions}
360
361
\subsection{Model Limitations}
362
\begin{enumerate}
363
\item \textbf{Two-dimensional}: Does not account for 3D effects like tip vortices
364
\item \textbf{Incompressible}: Invalid for Mach numbers $> 0.3$
365
\item \textbf{Steady flow}: Does not capture dynamic stall or unsteady effects
366
\item \textbf{Inviscid core}: Boundary layer effects approximated empirically
367
\end{enumerate}
368
369
\subsection{Possible Extensions}
370
\begin{itemize}
371
\item Panel methods for accurate pressure distribution
372
\item XFOIL analysis for viscous boundary layer effects
373
\item CFD simulation for compressibility and 3D effects
374
\item Wind tunnel validation of computed coefficients
375
\end{itemize}
376
377
\section{Conclusion}
378
This analysis demonstrates the fundamental relationships governing aerodynamic performance. Key findings include:
379
\begin{itemize}
380
\item Cambered airfoils provide higher $C_{L_{max}}$ at the expense of increased drag
381
\item The \py{best_name} offers the best overall efficiency with $(L/D)_{max} = \py{f"{best_ld:.1f}"}$
382
\item Aspect ratio is the dominant factor in induced drag reduction
383
\item Reynolds number effects are significant below $Re = 10^6$
384
\end{itemize}
385
386
The computational methods presented provide a foundation for preliminary aircraft design and performance analysis.
387
388
\section*{Further Reading}
389
\begin{itemize}
390
\item Anderson, J. D. (2017). \textit{Fundamentals of Aerodynamics}. McGraw-Hill.
391
\item Abbott, I. H., \& Von Doenhoff, A. E. (1959). \textit{Theory of Wing Sections}. Dover.
392
\item Drela, M. (1989). XFOIL: An analysis and design system for low Reynolds number airfoils.
393
\end{itemize}
394
395
\end{document}
396
397