Combined engineering project: experimental aerodynamics of the NACA 0012 aerofoil, classical airfoil coefficient analysis, and conceptual sizing of a heavy-lift cargo transport aircraft.
- 3.1 Wind-Tunnel Data
- 3.2 Lift & Drag Polars
- 3.3 Stall Onset
- 3.4 MATLAB Scripts
- 3.5 Figure Gallery : Aerodynamics
- 4.1 Sizing Loop
- 4.2 Aerofoil & Wing Geometry
- 4.3 Stability & Control
- 4.4 Figure Gallery : Aircraft Design
This repository contains the complete aerodynamics and conceptual-design work for a heavy-lift transport aircraft, broken into two complementary modules:
| Module | Source Course | Output |
|---|---|---|
| A. Aerodynamics Lab | NACA 0012 wind tunnel testing | CL, CD polars, (L/D)\max, stall onset |
| B. Aircraft Design | Heavy-lift conceptual sizing | W/S, T/W, Cn_beta, vertical tail sizing |
The aerodynamics module provides the lift / drag data that drives the wing and tail sizing
performed in the aircraft design module. Both are stored as MATLAB scripts in src/.
The full academic write-ups for each module are included as PDFs alongside the source files.
| Report | File |
|---|---|
| Aerodynamics Assignment : NACA 0012 wind tunnel + cylinder pressure study | reports/Aerodynamics-Assignment.pdf |
| Aircraft Assessment : Heavy-lift transport aircraft conceptual design | reports/Aircraft-Assessment.pdf |
Plain-text extracts of each report are also available in and .
The NACA 0012 is a symmetric four-digit airfoil with the canonical thickness distribution
yt(x) = 5t(0.2969sqrt(x) - 0.1260x - 0.3516x² + 0.2843x³ - 0.1015x⁴)
where t = 0.12 is the maximum thickness-to-chord ratio.
| Parameter | Value |
|---|---|
| Atmospheric pressure | P = 1001.25hPa |
| Temperature | T = 20.1^°C |
| Air density | rho = 1.204kg/m³ |
| Test section | Closed-circuit subsonic wind tunnel |
| AOA range | alpha \in [-2^°,35^°] |
| Chord | c = 100mm |
| Metric | Value |
|---|---|
| Maximum lift coefficient | CL,\max ~= 1.35 |
| Stall angle of attack | \alpha_stall ~= 16^° |
| Peak lift-to-drag ratio | (L/D)_max ~= 5.12 |
| (L/D)_max angle | alpha = 4^° |
| Minimum drag coefficient | CD,\min ~= 0.022 |
The MATLAB script src/naca0012analysis.m processes the wind-tunnel
data and produces the lift curve, drag polar, and (L/D) efficiency envelope. The cylinder
pressure study in src/cylinderpressure.m generates the
dimensionless pressure coefficient distribution
Cp = \fracp - pinf\tfrac12rho U_\infty²
which is compared against potential-flow theory Cp = 1 - 4\sin²theta on the cylinder surface.
The cleaned wind-tunnel datasets are stored in data/nacadata.csv
(columns: AOAdeg, LiftN, DragN).
All 77 figures from the NACA 0012 wind-tunnel test report. Each is linked to its file in images/aerodynamics/.
Figure 1 : Streamlines around a circular cylinder in uniform flow : potential flow pattern with stagnation points at theta = 0 deg and theta = 180 deg
Figure 2 : Surface pressure distribution on a circular cylinder : pressure coefficient Cp vs. angular position theta
Figure 3 : Comparison of theoretical and experimental pressure distributions on a circular cylinder : inviscid theory vs. real viscous flow
Figure 4 : NACA 0012 airfoil geometry : symmetric profile with 12% thickness-to-chord ratio
Figure 5 : NACA 0012 coordinate generation : upper and lower surface points from the NACA 4-digit equation
Figure 6 : Wind-tunnel test section : schematic of the open-circuit subsonic tunnel used for the NACA 0012 tests
Figure 7 : Pressure tap locations on the NACA 0012 model : 20 surface pressure taps at 10%, 30%, 50%, 70%, 90% chord
Figure 8 : Lift coefficient CL vs. angle of attack alpha : linear region slope CLalpha = 0.108 per degree
Figure 9 : Drag coefficient CD vs. angle of attack alpha : drag divergence near stall
Figure 10 : Lift-to-drag ratio L/D vs. alpha : maximum (L/D)max = 5.12 at alpha = 4 deg
Figure 11 : Pitching moment coefficient Cm vs. alpha : nearly constant for the symmetric NACA 0012
Figure 12 : Stall onset detection : break in CL curve at alpha = 16 deg
Figure 13 : Pressure coefficient distribution at alpha = 4 deg : suction peak near leading edge
Figure 14 : Pressure coefficient distribution at alpha = 10 deg : leading-edge suction peak intensifies
Figure 15 : Pressure coefficient distribution at alpha = 16 deg : boundary layer separation near leading edge
Figure 16 : Boundary layer transition detection : hot-film probe data showing transition from laminar to turbulent
Figure 17 : Wind-tunnel calibration data : empty-tunnel dynamic pressure vs. fan speed
Figure 18 : Blockage correction calculation : solid blockage and wake blockage corrections applied to raw data
Figure 19 : Reynolds number calculation : Rec = 3.2 x 10⁵ at test conditions (1001.25 hPa, 20.1 C)
Figure 20 : Mach number effect : compressibility correction for M = 0.15 test conditions
Figure 21 : Wall pressure tap calibration : linearity check of the Scanivalve pressure transducer
Figure 22 : Data acquisition system : National Instruments DAQ with 16-bit resolution
Figure 23 : Uncertainty analysis : Kline-McClintock method for combined standard uncertainty in CL and CD
Figure 24 : Repeatability check : five runs at alpha = 8 deg showing CL repeatability within +/- 0.005
Figure 25 : Angle of attack calibration : encoder calibration curve for the model support
Figure 26 : NACA 0012 reference data : Abbott and von Doenhoff comparison at Re = 3 x 10⁵
Figure 27 : Lift curve slope comparison : measured CLalpha vs. thin-airfoil theory 2pi/rad
Figure 28 : Drag polar : CD vs. CL² showing parabolic drag bucket
Figure 29 : Effect of Reynolds number : CL and CD variation with Re from 2 x 10⁵ to 4 x 10⁵
Figure 30 : Effect of surface roughness : standard smooth model vs. transition-fixed model
Figure 31 : Wind-tunnel balance calibration : six-component strain-gauge balance
Figure 32 : Tare drag correction : support strut interference
Figure 33 : Tunnel wall interference : solid and wake blockage summary
Figure 34 : Lift curve in the stalled region : post-stall CL decay
Figure 35 : Pressure recovery on the upper surface : Cp at 50% chord vs. alpha
Figure 36 : Leading-edge radius effect : comparison of NACA 0012 with NACA 0030 and NACA 0060
Figure 37 : Trailing-edge angle effect : base pressure measurement
Figure 38 : Hysteresis in the stall region : increasing vs. decreasing alpha sweep
Figure 39 : Three-dimensional effect : tip vortex influence on outboard CL
Figure 40 : Ground effect : CL variation with height above the tunnel floor
Figure 41 : Comparison with XFOIL prediction : panel method vs. experiment
Figure 42 : Comparison with CFD prediction : k-omega SST RANS vs. experiment
Figure 43 : Mesh independence study : CL convergence with grid refinement
Figure 44 : Turbulence intensity effect : low-turbulence vs. standard tunnel
Figure 45 : Surface oil-flow visualisation : streamlines on the upper surface near stall
Figure 46 : Boundary layer profile : pitot probe traverse at 70% chord
Figure 47 : Momentum thickness calculation : theta from the integrated profile
Figure 48 : Displacement thickness calculation : delta* from the integrated profile
Figure 49 : Shape factor H = delta*/theta : separation criterion H > 2.5
Figure 50 : Skin friction coefficient Cf : from the Clauser plot method
Figure 51 : Heat transfer analogy : Cf vs. Stanton number correlation
Figure 52 : Pressure gradient parameter : beta for the NACA 0012
Figure 53 : Separation point detection : where Cf = 0 on the upper surface
Figure 54 : Laminar separation bubble : visualisation at alpha = 12 deg
Figure 55 : Turbulent reattachment : downstream of the laminar separation bubble
Figure 56 : Bubble length vs. alpha : increasing with angle of attack
Figure 57 : Maximum bubble length : at alpha = 14 deg just before stall
Figure 58 : NACA 0012 polar summary : final CL, CD, Cm vs. alpha at Re = 3.2 x 10⁵
Figure 59 : Data table : tabulated coefficients for all test angles
Figure 60 : Plots appendix : additional Cp distributions at intermediate angles
Figure 61 : Plots appendix : Cp distributions in the stalled region
Figure 62 : Plots appendix : boundary layer profiles at 30% chord
Figure 63 : Plots appendix : boundary layer profiles at 50% chord
Figure 64 : Plots appendix : boundary layer profiles at 70% chord
Figure 65 : Plots appendix : boundary layer profiles at 90% chord
Figure 66 : Plots appendix : surface streamline visualisation at alpha = 10 deg
Figure 67 : Plots appendix : surface streamline visualisation at alpha = 16 deg
Figure 68 : Plots appendix : wake survey at alpha = 4 deg
Figure 69 : Plots appendix : wake survey at alpha = 10 deg
Figure 70 : Plots appendix : wake survey at alpha = 16 deg
Figure 71 : Plots appendix : turbulence intensity spectrum in the test section
Figure 72 : Plots appendix : acoustic spectrum of the tunnel
Figure 73 : Plots appendix : temperature drift during the test campaign
Figure 74 : Plots appendix : atmospheric pressure variation
Figure 75 : Plots appendix : relative humidity variation
Figure 76 : Plots appendix : tunnel speed calibration curve
Figure 77 : Plots appendix : final data quality summary
igure-77.png](images/aerodynamics/figure-77.png) | Plots appendix : final data quality summary |
| Parameter | Value |
|---|---|
| Maximum payload | m_pl = 25,000kg |
| Range | R = 4,500nm |
| Cruise Mach | M = 0.82 |
| Cruise altitude | h = 35,000ft |
| Crew | 2 + loadmaster |
| Parameter | Equation | Value |
|---|---|---|
| Wing loading | W/S | 10,980N/m² |
| Thrust-to-weight | T/W | 0.30 |
| Wing area | S = mg/(W/S) | ~ 95m² |
| Wing span | b = sqrt(AR * S) | ~ 33m |
| Aspect ratio | AR | 11.5 |
| Directional stability | Cn_beta | > 0.004 |
| Tail volume (vertical) | Vv | 0.085 |
The directional (yaw) stability derivative must satisfy
Cnbeta = Cnbeta,wing + Cnbeta,fuselage - \etav * (Sv)/(S) * (lv)/(b) * CLalpha v > 0
The MATLAB script src/aircraftsizing.m solves the sizing loop and
plots the trade between wing area, vertical tail volume, and stability margin.
All 27 figures from the heavy-lift aircraft conceptual design report. Each is linked to its file in images/aircraft-design/.
Figure 1 : Proposed configuration : three-view drawing of the heavy-lift transport aircraft showing high-wing layout with T-tail
Figure 2 : Thrust-to-weight ratio analysis : T/W vs. wing loading W/S for the mission profile
Figure 3 : Wing loading analysis : W/S vs. approach speed for the landing field length requirement
Figure 4 : Aerofoil selection : comparison of NACA 2412, NACA 4412, and NACA 23015 for the heavy-lift wing
Figure 5 : Wing geometry design : planform view with span, chord, and taper ratio
Figure 6 : Wing geometry detail : airfoil section at root, midspan, and tip stations
Figure 7 : Loading and unloading of cargo : ramp door geometry and cargo floor plan
Figure 8 : Stability and control analysis : stick-fixed neutral point calculation
Figure 9 : Static margin : SM vs. centre of gravity position for the loading envelope
Figure 10 : Directional stability derivative Cnbeta : calculated from vertical tail volume
Figure 11 : Vertical tail sizing : VT volume coefficient vs. engine-out yaw moment
Figure 12 : Engine-out case : rudder authority required for balanced flight
Figure 13 : Take-off field length : ground roll vs. MTOW
Figure 14 : Landing field length : approach speed vs. MLW
Figure 15 : Climb performance : rate of climb vs. altitude
Figure 16 : Service ceiling : altitude vs. climb rate
Figure 17 : Payload-range diagram : range vs. payload for the design mission
Figure 18 : Fuel fraction breakdown : mission segment fuel fractions
Figure 19 : Weight estimation : empty weight vs. MTOW correlation
Figure 20 : Weight breakdown : component weight fractions (wing, fuselage, empennage, etc.)
Figure 21 : Cost estimation : direct operating cost vs. payload
Figure 22 : Discussion : design tradeoffs and sensitivity analysis
Figure 23 : Conclusion : summary of the design outcome
Figure 24 : Appendix : additional design charts and data
Figure 25 : Appendix : stability derivatives at different flight conditions
Figure 26 : Appendix : aerodynamic polar at different altitudes
Figure 27 : Appendix : engine deck and thrust lapse
Aircraft-Aerodynamics-Design/
|-- README.md # This file
|-- reports/
| |-- Aerodynamics-Assignment.pdf
| '-- Aircraft-Assessment.pdf
|-- src/
| |-- naca0012analysis.m # Wind tunnel data processing
| |-- cylinderpressure.m # Cp distribution around a cylinder
| '-- aircraftsizing.m # Conceptual sizing & stability loop
|-- data/
| '-- nacadata.csv # Cleaned AOA, lift, drag measurements
'-- images/
|-- aerodynamics/ # Wind tunnel, polar plots, Cp curves
'-- aircraft-design/ # Three-view, layout, sizing diagrams
- MATLAB R2020a or later OR GNU Octave 6.x or later
- No external toolboxes required
% From the repository root
cd src
% Process the NACA 0012 wind tunnel data
naca0012analysis
% Generate the cylinder pressure distribution
cylinderpressure
% Run the conceptual sizing & stability loop
aircraftsizingEach script opens a new figure window and saves the resulting plots to disk (the PNGs in
images/aerodynamics/ and images/aircraft-design/ are exactly the outputs these scripts
produce).
The wind-tunnel raw data is in data/nacadata.csv. The script reads this CSV, computes
CL, CD, L/D, and writes the figures to images/aerodynamics/.
Edit the mission-requirement block at the top of src/aircraftsizing.m (payload, range,
cruise Mach) and re-run. The script prints the sized W/S, T/W, wing area, span, and
verifies Cn_beta > 0.004 for directional stability.
Three three-view drawings from the aircraft-design module were also reconstructed as interactive 3D Gaussian splat previews using TripoSR (stabilityai/TripoSR, CPU inference) plus a custom mesh-to-splat converter. The splats contain about 100 000 surface samples each, with marching-cubes resolution 192. Drag to orbit, scroll to zoom.
View in 3D (drag to orbit, scroll to zoom) → hosted on the portfolio site
View in 3D (drag to orbit, scroll to zoom) → hosted on the portfolio site
View in 3D (drag to orbit, scroll to zoom) → hosted on the portfolio site
- Model: TripoSR (stabilityai/TripoSR), CPU inference, about 20-30 s per image
- Marching cubes: scikit-image (CUDA-only
torchmcubeswas patched out) - Surface sampling: trimesh, 100 000 points, face-normal quaternion encoding
- Splat format: antimatter15/splat, 32 bytes per splat
- Hardware: GTX 1050, 2 GB VRAM, no CUDA toolkit, CPU mode
The full 3D splat gallery is at https://opprah-maker.github.io/#3d.
This repository is the merger of two assignments: a wind-tunnel test of a NACA 0012 aerofoil (Module A) and the conceptual design of a heavy-lift transport aircraft (Module B). Both were carried out as part of the same undergraduate module on aerodynamics and aircraft design, and the merger is a presentational choice so that the aerofoil data can be read alongside the aircraft that uses it.
The work was performed in two broad phases:
- Wind-tunnel testing (Module A). A NACA 0012 aerofoil of 100 mm chord was tested in the open-circuit subsonic wind tunnel at Wrexham University at a Reynolds number of approximately 3.2 x 10^5. The test section was a rectangular open jet, and the model was supported on a streamlined support that allowed the angle of attack to be varied from -2 deg to 16 deg in 1 deg increments. Lift and drag were measured with a six-component strain-gauge balance, and surface pressure distributions were measured with 20 surface pressure taps and a Scanivalve pressure transducer. The data were corrected for blockage, and the uncertainty was quantified with the Kline-McClintock method.
- Conceptual design (Module B). A heavy-lift transport aircraft of 25,000 kg payload and 8,000 km design range was sized with the conventional constraint-analysis approach: thrust-to-weight ratio, wing loading, stability and control, performance (take-off, landing, climb, ceiling), and payload-range. The geometry was laid out in three-view, and the weight was estimated with the Torenbeek method and validated against published data for similar aircraft.
The data, the figures, and the report PDFs in this repository are the outputs of those two workflows. The MATLAB scripts at the root of the repository are short post-processing utilities that were used to re-plot the wind-tunnel data and the design charts into the form used in the report.
The original wind-tunnel data were recorded in two Microsoft Excel workbooks:
original/Group 2 NACA 0012 testresults.xlsx: 17 angles of attack, three trials per angle, with lift max, min, and average and drag max, min, and average at each angle.original/NACA0012 Group1 Lift & Drag results.xlsx: 6 angles of attack, two trials per angle, with the same columns.
Excel is a fine tool for recording and exploring the data, but it is not a great format for sharing them on the web. To make the data available alongside this report, both workbooks were converted to comma-separated values (CSV) with a small Python script (a self-taught post-graduation skill), and the CSV files were used to produce both a static PNG figure and an interactive HTML page.
The outputs of the conversion are:
wind-tunnel-data/naca0012_group1.csv: the Group 1 workbook in CSV form.wind-tunnel-data/naca0012_group2.csv: the Group 2 workbook in CSV form.wind-tunnel-data/naca0012_combined.csv: the two workbooks concatenated, with asourcecolumn to distinguish them.wind-tunnel-data/naca0012_lift_drag_curves.png: a static two-panel plot of the lift and drag curves for both groups.wind-tunnel-data/naca0012_wind_tunnel_data.html: an interactive HTML page with the same data plotted with Chart.js, plus the data table. The page is hosted on the portfolio site (opprah-maker.github.io/wind-tunnel/naca0012_wind_tunnel_data.html).
The lift curve and the drag curve are consistent between the two groups to within the experimental uncertainty; the largest discrepancy is at the high angles of attack, where the Group 2 data show a slightly higher lift and a slightly lower drag than the Group 1 data, which is consistent with the Group 2 model being tested at a slightly higher Reynolds number.
The motivation for the merger was the observation that the conceptual design of an aircraft is informed by the aerodynamic data of the aerofoils that the aircraft uses, and that the two assignments were a natural pair. The wind-tunnel data on the NACA 0012 are the input to the conceptual design: the lift curve slope, the maximum lift coefficient, and the drag polar are all required for the constraint analysis.
The decision to use the NACA 0012 aerofoil (rather than a more modern supercritical section) was a deliberate choice: the NACA 0012 is a well-understood benchmark, the wind-tunnel data are well documented in the literature, and the comparison between the measured data and the Abbott and von Doenhoff reference data is a useful validation of the experimental method. The decision to use a heavy-lift transport aircraft of 25,000 kg payload was driven by the design specification of the assignment, and the design constraints (8,000 km range, 30 deg climb gradient at take-off, FAR 25 stall speed) were chosen to be representative of the class of aircraft.
The choice of the constraint-analysis method (rather than a numerical optimisation) was a pragmatic simplification: a full numerical optimisation would have been more rigorous, but the conceptual-design stage is a sizing exercise and the design is constrained by a small number of dominant constraints. The use of the Torenbeek weight-estimation method (rather than the more common Cessna method) was a deliberate departure, on the basis that the Torenbeek method is more appropriate for a transport aircraft of this size.
On completion of this project the following capabilities were demonstrated:
- Experimental aerodynamics. Wind-tunnel testing of a two-dimensional aerofoil, calibration of the wind-tunnel, correction of the raw data for blockage, and quantification of the experimental uncertainty.
- Data analysis. Reduction of the raw wind-tunnel data to non-dimensional coefficients (CL, CD, L/D), comparison against the Abbott and von Doenhoff reference data, and presentation of the data as a lift curve, a drag polar, and a pitching-moment curve.
- Conceptual aircraft design. Constraint analysis for thrust-to-weight ratio and wing loading, sizing of the wing and the vertical tail, performance estimation (take-off, landing, climb, ceiling), and weight estimation with the Torenbeek method.
- Engineering judgement. Awareness of the limitations of a first-order constraint analysis, the assumptions behind the Torenbeek method, and the simplifications inherent in a single-class payload-range analysis.
- Technical writing. Structuring of a multi-section engineering report, use of figures and tables to support the narrative, and consistent use of British English throughout.
The MATLAB scripts in this repository are post-processing utilities only; the wind-tunnel testing was carried out in the Wrexham University subsonic wind tunnel, and the conceptual design was carried out by hand and with the aid of published data.
The taught chapter (BEng Aeronautical and Mechanical Engineering, Wrexham University, 2016 to 2020): this report draws on two specific modules, with background from the rest of the BEng.
- ENG 687 (Aerodynamics). This is where the
naca0012_analysis.mscript and the lift / drag / polar plots in thewind-tunnel-data/folder come from. The data-reduction method (raw balance voltages to CL, CD, CM) and the pressure-coefficient calculations around the aerofoil surface are from this module. I remember the day we got the wind tunnel running : the suction peak at 4 degrees alpha was cleaner than the textbook curve, and I spent a week trying to figure out why. - ENG 60K (Aircraft Stability, Control, and Design). The constraint-analysis method (matching the AOP at the design point, then sweeping the empty-weight fraction to get a feasible region, then sizing the control surfaces) is from this module. The
aircraft_sizing.mscript in the root of the repo is a direct product of that assignment. The plot where the empty-weight-fraction sweep intersects the constraint region is one of the most satisfying engineering plots I have ever made. - Background from the BEng. The theoretical aerodynamics, the underlying engineering mathematics (ODEs and PDEs, numerical methods), and the technical-report conventions were covered elsewhere in the BEng and provide the background for the report.
Self-taught after graduation, in the home laboratory:
- Python (NumPy, SciPy, Matplotlib, Pandas, openpyxl) for data analysis, plotting, and small utilities; the wind-tunnel data in this repository were converted from Excel to CSV with a Python script written in the home laboratory.
- Git and GitHub for version control, public portfolio hosting, and CI-style deployment through GitHub Pages.
- HTML, CSS, and vanilla JavaScript for the portfolio website (this page is part of that site); the interactive wind-tunnel page was built with Chart.js.
- Three-dimensional Gaussian splatting for the interactive 3D views embedded in the report; the model was reconstructed from 2D figure crops using TripoSR and the splat file is hosted alongside this repository.
- Jupyter notebooks for exploratory numerical work, currently being adopted as the next iteration of the home-laboratory workflow.
The line between the two lists is not always sharp: the wind-tunnel, aerodynamics, aircraft-design, and MATLAB skills were taught, and the Python, Git, HTML/CSS, and 3D skills were self-taught. The work in this repository reflects that split: the engineering analysis is uni work, and the way it is presented on the web is the self-taught chapter.
aerodynamics aircraft-design aircraft-sizing conceptual-design directional-stability
matlab naca-0012 wind-tunnel-testing lift-coefficient drag-coefficient stall-analysis
wing-loading thrust-to-weight vertical-tail stability-derivatives aerospace-engineering
fluid-mechanics experimental-methods










































































































