Path: blob/main/latex-templates/templates/aerospace/aerodynamic_lift.tex
51 views
unlisted
\documentclass[a4paper, 11pt]{article}1\usepackage[utf8]{inputenc}2\usepackage[T1]{fontenc}3\usepackage{amsmath, amssymb}4\usepackage{graphicx}5\usepackage{siunitx}6\usepackage{booktabs}7\usepackage{algorithm2e}8\usepackage{subcaption}9\usepackage[makestderr]{pythontex}1011% Theorem environments for technical report style12\newtheorem{definition}{Definition}13\newtheorem{theorem}{Theorem}14\newtheorem{remark}{Remark}1516\title{Aerodynamic Lift Analysis: From Thin Airfoil Theory to Computational Modeling\\17\large Multi-Airfoil Comparison with Reynolds Number Effects}18\author{Aerospace Engineering Division\\Computational Science Templates}19\date{\today}2021\begin{document}22\maketitle2324\begin{abstract}25This 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.26\end{abstract}2728\section{Introduction}29Aerodynamic 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.3031\begin{definition}[Lift Coefficient]32The lift coefficient is a dimensionless quantity relating lift force to dynamic pressure and reference area:33\begin{equation}34C_L = \frac{L}{\frac{1}{2}\rho V^2 S}35\end{equation}36where $L$ is lift force, $\rho$ is air density, $V$ is freestream velocity, and $S$ is the reference wing area.37\end{definition}3839\section{Mathematical Framework}4041\subsection{Thin Airfoil Theory}42For incompressible, inviscid flow over a thin airfoil, the lift coefficient varies linearly with angle of attack:43\begin{equation}44C_L = C_{L_\alpha}(\alpha - \alpha_{L=0})45\end{equation}46where $C_{L_\alpha} = 2\pi$ rad$^{-1}$ is the lift curve slope and $\alpha_{L=0}$ is the zero-lift angle of attack.4748\begin{theorem}[Kutta-Joukowski]49The lift per unit span on a two-dimensional airfoil is given by:50\begin{equation}51L' = \rho V \Gamma52\end{equation}53where $\Gamma$ is the circulation around the airfoil.54\end{theorem}5556\subsection{Drag Polar}57The total drag coefficient consists of parasitic and induced components:58\begin{equation}59C_D = C_{D_0} + \frac{C_L^2}{\pi e AR}60\end{equation}61where $C_{D_0}$ is zero-lift drag, $e$ is the Oswald efficiency factor, and $AR$ is the aspect ratio.6263\subsection{Reynolds Number Effects}64The Reynolds number characterizes the flow regime:65\begin{equation}66Re = \frac{\rho V c}{\mu} = \frac{V c}{\nu}67\end{equation}68Higher Reynolds numbers promote earlier boundary layer transition, affecting both lift curve slope and maximum lift coefficient.6970\section{Computational Analysis}7172\begin{pycode}73import numpy as np74import matplotlib.pyplot as plt75from scipy.interpolate import interp1d76plt.rc('text', usetex=True)77plt.rc('font', family='serif')7879np.random.seed(42)8081# Define multiple NACA airfoils with different characteristics82airfoils = {83'NACA 0012': {'camber': 0.0, 'thickness': 0.12, 'Cl_alpha': 5.73, 'alpha_0': 0.0, 'Cd_0': 0.006, 'Cl_max': 1.5},84'NACA 2412': {'camber': 0.02, 'thickness': 0.12, 'Cl_alpha': 5.90, 'alpha_0': -2.0, 'Cd_0': 0.007, 'Cl_max': 1.6},85'NACA 4412': {'camber': 0.04, 'thickness': 0.12, 'Cl_alpha': 6.05, 'alpha_0': -4.0, 'Cd_0': 0.008, 'Cl_max': 1.7},86'NACA 6412': {'camber': 0.06, 'thickness': 0.12, 'Cl_alpha': 6.15, 'alpha_0': -5.5, 'Cd_0': 0.010, 'Cl_max': 1.75}87}8889# Angle of attack range90alpha_deg = np.linspace(-8, 22, 150)9192# Function to compute lift coefficient with stall93def compute_Cl(alpha_deg, params, Re_factor=1.0):94alpha_rad = np.deg2rad(alpha_deg)95alpha_0_rad = np.deg2rad(params['alpha_0'])9697# Linear region98Cl_linear = params['Cl_alpha'] * (alpha_rad - alpha_0_rad)99100# Stall modeling with smooth transition101stall_alpha = 14.0 * Re_factor # Stall angle increases with Re102Cl_max = params['Cl_max'] * Re_factor103104# Smooth stall using tanh transition105stall_sharpness = 0.5106alpha_diff = alpha_deg - stall_alpha107stall_factor = 0.5 * (1 - np.tanh(stall_sharpness * alpha_diff))108post_stall = Cl_max * np.exp(-0.08 * np.maximum(0, alpha_diff))109110Cl = stall_factor * np.minimum(Cl_linear, Cl_max) + (1 - stall_factor) * post_stall111return Cl112113# Function to compute drag coefficient114def compute_Cd(Cl, params, AR=8, e=0.85):115Cd_0 = params['Cd_0']116Cd_induced = Cl**2 / (np.pi * e * AR)117return Cd_0 + Cd_induced118119# Compute for all airfoils120results = {}121for name, params in airfoils.items():122Cl = compute_Cl(alpha_deg, params)123Cd = compute_Cd(Cl, params)124L_D = np.where(Cd > 0, Cl / Cd, 0)125126# Find key points127max_ld_idx = np.argmax(L_D)128max_Cl_idx = np.argmax(Cl)129130results[name] = {131'Cl': Cl, 'Cd': Cd, 'L_D': L_D,132'max_ld': L_D[max_ld_idx], 'alpha_max_ld': alpha_deg[max_ld_idx],133'Cl_max': Cl[max_Cl_idx], 'alpha_stall': alpha_deg[max_Cl_idx]134}135136# Reynolds number study for NACA 2412137Re_numbers = [1e5, 5e5, 1e6, 5e6]138Re_factors = [0.85, 0.92, 1.0, 1.05]139Re_results = {}140for Re, factor in zip(Re_numbers, Re_factors):141Cl = compute_Cl(alpha_deg, airfoils['NACA 2412'], factor)142Re_results[Re] = Cl143144# Aspect ratio study145aspect_ratios = [4, 6, 8, 10, 12]146AR_results = {}147Cl_ref = compute_Cl(alpha_deg, airfoils['NACA 2412'])148for AR in aspect_ratios:149Cd = compute_Cd(Cl_ref, airfoils['NACA 2412'], AR=AR)150L_D = np.where(Cd > 0, Cl_ref / Cd, 0)151AR_results[AR] = {'Cd': Cd, 'L_D': L_D, 'max_ld': np.max(L_D)}152153# Create comprehensive visualization154fig = plt.figure(figsize=(14, 12))155156# Plot 1: Lift curves for all airfoils157ax1 = fig.add_subplot(2, 3, 1)158colors = plt.cm.viridis(np.linspace(0, 0.8, len(airfoils)))159for (name, res), color in zip(results.items(), colors):160ax1.plot(alpha_deg, res['Cl'], linewidth=2, color=color, label=name)161ax1.axhline(y=0, color='k', linewidth=0.5)162ax1.axvline(x=0, color='k', linewidth=0.5)163ax1.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')164ax1.set_ylabel(r'Lift Coefficient $C_L$')165ax1.set_title('Lift Curves: NACA Airfoil Comparison')166ax1.legend(fontsize=8, loc='lower right')167ax1.grid(True, alpha=0.3)168ax1.set_xlim(-8, 22)169170# Plot 2: Drag polars171ax2 = fig.add_subplot(2, 3, 2)172for (name, res), color in zip(results.items(), colors):173ax2.plot(res['Cd'], res['Cl'], linewidth=2, color=color, label=name)174ax2.set_xlabel(r'Drag Coefficient $C_D$')175ax2.set_ylabel(r'Lift Coefficient $C_L$')176ax2.set_title('Drag Polars')177ax2.legend(fontsize=8, loc='lower right')178ax2.grid(True, alpha=0.3)179180# Plot 3: Lift-to-Drag ratio181ax3 = fig.add_subplot(2, 3, 3)182for (name, res), color in zip(results.items(), colors):183ax3.plot(alpha_deg, res['L_D'], linewidth=2, color=color, label=name)184ax3.plot(res['alpha_max_ld'], res['max_ld'], 'o', color=color, markersize=6)185ax3.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')186ax3.set_ylabel(r'Lift-to-Drag Ratio $L/D$')187ax3.set_title('Aerodynamic Efficiency')188ax3.legend(fontsize=8, loc='upper right')189ax3.grid(True, alpha=0.3)190ax3.set_xlim(-8, 22)191192# Plot 4: Reynolds number effects193ax4 = fig.add_subplot(2, 3, 4)194Re_colors = plt.cm.plasma(np.linspace(0.2, 0.8, len(Re_numbers)))195for Re, color in zip(Re_numbers, Re_colors):196ax4.plot(alpha_deg, Re_results[Re], linewidth=2, color=color,197label=f'$Re = {Re:.0e}$')198ax4.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')199ax4.set_ylabel(r'Lift Coefficient $C_L$')200ax4.set_title('Reynolds Number Effects (NACA 2412)')201ax4.legend(fontsize=8, loc='lower right')202ax4.grid(True, alpha=0.3)203204# Plot 5: Aspect ratio effect on L/D205ax5 = fig.add_subplot(2, 3, 5)206AR_colors = plt.cm.cool(np.linspace(0.2, 0.8, len(aspect_ratios)))207for AR, color in zip(aspect_ratios, AR_colors):208ax5.plot(alpha_deg, AR_results[AR]['L_D'], linewidth=2, color=color,209label=f'$AR = {AR}$')210ax5.set_xlabel(r'Angle of Attack $\alpha$ (degrees)')211ax5.set_ylabel(r'Lift-to-Drag Ratio $L/D$')212ax5.set_title('Aspect Ratio Effects on Efficiency')213ax5.legend(fontsize=8, loc='upper right')214ax5.grid(True, alpha=0.3)215216# Plot 6: Summary bar chart217ax6 = fig.add_subplot(2, 3, 6)218names = list(results.keys())219max_lds = [results[n]['max_ld'] for n in names]220stall_angles = [results[n]['alpha_stall'] for n in names]221222x = np.arange(len(names))223width = 0.35224225bars1 = ax6.bar(x - width/2, max_lds, width, label=r'$(L/D)_{max}$', color='steelblue', alpha=0.8)226ax6_twin = ax6.twinx()227bars2 = ax6_twin.bar(x + width/2, stall_angles, width, label=r'$\alpha_{stall}$', color='coral', alpha=0.8)228229ax6.set_xlabel('Airfoil')230ax6.set_ylabel(r'$(L/D)_{max}$', color='steelblue')231ax6_twin.set_ylabel(r'Stall Angle (deg)', color='coral')232ax6.set_xticks(x)233ax6.set_xticklabels([n.replace('NACA ', '') for n in names], rotation=45)234ax6.set_title('Performance Summary')235ax6.legend(loc='upper left', fontsize=8)236ax6_twin.legend(loc='upper right', fontsize=8)237238plt.tight_layout()239plt.savefig('aerodynamic_lift_plot.pdf', bbox_inches='tight', dpi=150)240print(r'\begin{center}')241print(r'\includegraphics[width=\textwidth]{aerodynamic_lift_plot.pdf}')242print(r'\end{center}')243plt.close()244245# Extract key results for reporting246best_airfoil = max(results.items(), key=lambda x: x[1]['max_ld'])247best_name = best_airfoil[0]248best_ld = best_airfoil[1]['max_ld']249best_alpha = best_airfoil[1]['alpha_max_ld']250\end{pycode}251252\section{Computational Algorithm}253254\begin{algorithm}[H]255\SetAlgoLined256\KwIn{Airfoil parameters, angle of attack range $\alpha$, Reynolds number $Re$}257\KwOut{Lift coefficient $C_L$, drag coefficient $C_D$, aerodynamic efficiency $L/D$}258\tcc{Linear lift region}259$C_L \leftarrow C_{L_\alpha}(\alpha - \alpha_{L=0})$\;260\tcc{Stall modeling}261\If{$\alpha > \alpha_{stall}$}{262$C_L \leftarrow C_{L_{max}} \exp(-k(\alpha - \alpha_{stall}))$\;263}264\tcc{Drag computation}265$C_{D_i} \leftarrow C_L^2 / (\pi e \cdot AR)$\;266$C_D \leftarrow C_{D_0} + C_{D_i}$\;267\tcc{Efficiency}268$L/D \leftarrow C_L / C_D$\;269\Return{$C_L, C_D, L/D$}270\caption{Aerodynamic Coefficient Computation}271\end{algorithm}272273\section{Results and Discussion}274275\subsection{Airfoil Comparison}276277\begin{pycode}278# Generate results table279print(r'\begin{table}[h]')280print(r'\centering')281print(r'\caption{Aerodynamic Performance Summary for NACA Airfoils}')282print(r'\begin{tabular}{lcccccc}')283print(r'\toprule')284print(r'Airfoil & $C_{L_{max}}$ & $\alpha_{stall}$ & $(L/D)_{max}$ & $\alpha_{(L/D)_{max}}$ & $C_{D_0}$ & $\alpha_{L=0}$ \\')285print(r' & & (deg) & & (deg) & & (deg) \\')286print(r'\midrule')287for name in airfoils.keys():288params = airfoils[name]289res = results[name]290print(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} \\\\")291print(r'\bottomrule')292print(r'\end{tabular}')293print(r'\end{table}')294\end{pycode}295296The \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$.297298\subsection{Effect of Camber}299300\begin{remark}[Camber Effects]301Increasing 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.302\end{remark}303304\subsection{Reynolds Number Sensitivity}305306Higher Reynolds numbers result in:307\begin{itemize}308\item Delayed boundary layer transition309\item Higher maximum lift coefficient310\item Increased stall angle311\item Reduced skin friction drag312\end{itemize}313314\subsection{Aspect Ratio Analysis}315316\begin{pycode}317# Aspect ratio table318print(r'\begin{table}[h]')319print(r'\centering')320print(r'\caption{Effect of Aspect Ratio on Maximum L/D}')321print(r'\begin{tabular}{cc}')322print(r'\toprule')323print(r'Aspect Ratio & $(L/D)_{max}$ \\')324print(r'\midrule')325for AR in aspect_ratios:326print(f"{AR} & {AR_results[AR]['max_ld']:.1f} \\\\")327print(r'\bottomrule')328print(r'\end{tabular}')329print(r'\end{table}')330\end{pycode}331332\begin{theorem}[Aspect Ratio Scaling]333For a given airfoil profile, the maximum lift-to-drag ratio scales approximately as:334\begin{equation}335\left(\frac{L}{D}\right)_{max} \propto \sqrt{AR}336\end{equation}337This explains why high-performance sailplanes use very high aspect ratio wings ($AR > 20$).338\end{theorem}339340\section{Design Implications}341342\subsection{Flight Regime Selection}343\begin{itemize}344\item \textbf{Maximum Range}: Fly at $(L/D)_{max}$, typically $\alpha \approx 4-6^\circ$345\item \textbf{Maximum Endurance}: Fly at minimum power required, $\alpha$ slightly higher346\item \textbf{Climb}: Higher $\alpha$ for maximum excess thrust347\item \textbf{Cruise}: Balance between speed and efficiency348\end{itemize}349350\subsection{Stall Considerations}351The stall characteristics are critical for flight safety:352\begin{itemize}353\item Symmetric airfoils (NACA 0012) have abrupt stall354\item Cambered airfoils provide gentler stall warning355\item Washout (wing twist) ensures tip stalls after root356\end{itemize}357358\section{Limitations and Extensions}359360\subsection{Model Limitations}361\begin{enumerate}362\item \textbf{Two-dimensional}: Does not account for 3D effects like tip vortices363\item \textbf{Incompressible}: Invalid for Mach numbers $> 0.3$364\item \textbf{Steady flow}: Does not capture dynamic stall or unsteady effects365\item \textbf{Inviscid core}: Boundary layer effects approximated empirically366\end{enumerate}367368\subsection{Possible Extensions}369\begin{itemize}370\item Panel methods for accurate pressure distribution371\item XFOIL analysis for viscous boundary layer effects372\item CFD simulation for compressibility and 3D effects373\item Wind tunnel validation of computed coefficients374\end{itemize}375376\section{Conclusion}377This analysis demonstrates the fundamental relationships governing aerodynamic performance. Key findings include:378\begin{itemize}379\item Cambered airfoils provide higher $C_{L_{max}}$ at the expense of increased drag380\item The \py{best_name} offers the best overall efficiency with $(L/D)_{max} = \py{f"{best_ld:.1f}"}$381\item Aspect ratio is the dominant factor in induced drag reduction382\item Reynolds number effects are significant below $Re = 10^6$383\end{itemize}384385The computational methods presented provide a foundation for preliminary aircraft design and performance analysis.386387\section*{Further Reading}388\begin{itemize}389\item Anderson, J. D. (2017). \textit{Fundamentals of Aerodynamics}. McGraw-Hill.390\item Abbott, I. H., \& Von Doenhoff, A. E. (1959). \textit{Theory of Wing Sections}. Dover.391\item Drela, M. (1989). XFOIL: An analysis and design system for low Reynolds number airfoils.392\end{itemize}393394\end{document}395396397