Wing shape optimization is crucial for creating efficient aircraft, yet contemporary approaches utilizing Computational Fluid Dynamics (CFD) simulations with the adjoint method suffer from poor performance and incompatibility with modern automatic differentiation techniques. This project aims to address these shortcomings by developing a novel, computationally efficient wing shape optimizer.
Neural networks are leveraged to predict the lift and drag polars of a two-dimensional airfoil based on its parameterized shape.
Lifting-line theory is used to generalize the airfoil polars to a finite wing. This is implemented by representing the wing circulation distribution as a Fourier series, simplifying the fundamental equation of lifting-line theory and significantly improving solver performance.
For structural optimization, we focus on optimizing the wing spars, which we represent as two I-beams. The deflection and stresses along the wing are approximated using Euler-Bernoulli beam theory. Numerical integration is utilized to efficiently find an approximate solution.
The optimizer is implemented using OpenMDAO with the SLSQP optimization algorithm.
This file is the main entry point for usage of the optimizer. It provides functions to alter default values and bounds, set up surrogate models, define the optimization objectives, and run the optimizer.
Holds the Equinox class defining the neural network for airfoil polars. Note that the lift and drag networks are seperate but have the same structure.
Contains functions to interact with the neural networks and helper functions for atmospheric conditions.
A Jupyter Notebook showing an example of how the optimizer may be used.
Holds the files defining the optimization problems.
The planform problem focuses on optimizing the wingspan and chord length of the wing. However, there is also some basic spar optimization to ensure that the wing will be structurally realistic.
Focuses on optimizing the airfoil shape to match the
Optimizes the spar dimensions and positions to minimize material usage while making sure the stresses are within safe limits.
Contains modules calculating different variables used in the optimizer.
Calculates airfoil lift and drag polars given a parameterized airfoil.
Uses Euler-Bernoulli beam theory to analyze the normal and shear stresses on the wing based on its geometry and the lift distribution.
Solves the Fourier coefficients representing the circulation distribution of the wing using a gradient-based nonlinear solver.
A simple utility component converting
Uses the calculated Fourier coefficients and wing geometry to calculate the lift and drag force.
A simple utility component calculating the Reynolds number.
Functions to perform lifting-line calculations
Takes the Fourier coefficients representing the circulation distribution and uses integration to find the total lift and drag force on the wing.
Solves the system of nonlinear equations of the Fourier Series reformulation of lifting-line theory.
Contains functions to calculate circulation and
Functions to perform Euler-Bernoulli beam calculations
Calculates the area, 1st moment of area
Calculates the beam's shear, moment, slope, and deflection distribution using numerical cumulative integration.
Calculates the area, 1st moment of area
Uses shear and moment distirbution to calculate the maximum shear and normal stress.
Contains Jupyter notebooks not directly used in the codebase, but rather for analysis and data generation.
A "sandbox" to graph the lift curve of an airfoil based on shape parameters. Used during development of the airfoil surrogate models.
Scrapes airfoil coordinates and polars from online databases and fits the coordinates to 6 shape parameters.
Trains the lift and drag surrogate models. Note that the notebook is meant to be run on Kaggle, meaning that reproducing on a local machine will require changes to directory names.
Evaluates the optimizer at several lift goals and flight conditions. Similar to above, this notebook is meant to be run on Kaggle.
Performs a grid search on possible hyperparameters for the lifting-line solver. Similar to above, this notebook is meant to be run on Kaggle.
Contains tests to evaluate the effectiveness of the optimizer system.
Used to find the design space for the airfoils. Evaluates which airfoil shapes obey the rule of thin-airfoil theory stating
Ranks the results of the grid search.
Graphs the results of the optimizer evaluation. Note that this does not actually run the optimizer; that is done by notebooks/optimizer-evaluation.ipynb
.