Aeroelastic cVAE Research Release
Engineering Design and Computing Laboratory, ETH Zurich
Maintained by Lorenzo Miele, and Jona Pfenniger.
Jona and Lorenzo are the primary contributors to this release.
This repository is a reproducible research release for learning and generating aeroelastic glider-wing designs with conditional variational autoencoders.
Flexible-wing design is a coupled problem because planform, sectional airfoils, structural stiffness, aerodynamic loading, mass, stress, and deformation influence one another.
The workflow evaluates parameterized wings with coupled vortex-lattice aerodynamics and Euler-Bernoulli beam mechanics, then learns the resulting design space with airfoil, wing, and conditional wing VAEs.
The accompanying article is currently under review and will be made available upon acceptance.
From parameterized wing geometry and coupled simulation to learned latent representations and conditional wing generation.
Each wing is represented by planform, twist, spar sweep, and sectional airfoil parameters.
The global parameter blocks are
Here,
At five spanwise stations, airfoil geometry is represented by upper and lower CST coefficients
The complete generated wing vector is
The coupled solver computes the deformed wing response rather than treating aerodynamic and structural models independently.
The paired figures below connect the two sides of the problem.
The left panel shows the low-dimensional description supplied to the generator.
It locates the planform control points, spar line, twist distribution, and spanwise airfoil stations that define an undeformed candidate wing.
The right panel shows the physics evaluated for that candidate.
Aerodynamic loading from the vortex-lattice model is transferred to the beam model, which captures deflection and the resulting change in the aeroelastic state.
Left: the parameterized wing description learned by the generative model. Right: the coupled vortex-lattice and beam response used to label each sampled design.
These representations let the learned models relate a compact design vector to aerodynamic efficiency, pitching behavior, structural mass, stress, and deformation without reducing the wing to an isolated rigid aerodynamic shape.
The airfoil VAE learns a compact latent representation from airfoil geometry and aerodynamic information.
A Gaussian mixture model organizes the latent space into soft geometric airfoil families.
The conditional wing VAE combines these sectional representations with global wing coefficients and requested aero-structural conditions.
The architecture overview below shows how the airfoil representation and wing-level conditioning are connected in the generative workflow.
Unconditional VAE and conditional VAE architectures.
The latent-space view below illustrates the geometric grouping learned for the airfoils before they are used to describe wing sections.
Airfoil latent representation and geometric family structure.
The following conditioning visualization shows how requested aero-structural properties organize the wing-generation latent space.
The learned conditional latent space changes smoothly as the requested aero-structural response changes.
The study evaluates 537,824 aero-structurally described wing configurations.
The cVAE conditions generation on aerodynamic efficiency
The target-error result below quantifies how closely generated wings meet these requested conditions.
Conditional VAE target-matching error.
The comparative evaluation below places the cVAE results alongside the study baselines.
Comparative evaluation of the conditional VAE.
Python 3.11.2 or newer is required.
Install the core runtime with the exact dependency versions recorded in uv.lock.
uv sync --lockedInstall the notebook workflow, including JupyterLab and the IDEALLab dataset client.
uv sync --locked --extra notebookInstall development tooling for formatting, type checking, and tests.
uv sync --locked --extra dev --extra notebookDirect runtime dependencies are declared in pyproject.toml.
The principal scientific dependencies are AeroSandbox, NeuralFoil, sectionproperties, PyTorch, Lightning, Hydra, NumPy, SciPy, Pandas, and scikit-learn.
The airfoil geometry source is the IDEALLab/airfoil_v0 dataset, released through EngiBench.
Run notebooks/airfoils_preprocessing.ipynb to download and preprocess the airfoils.
The notebook converts geometry into Kulfan/CST parameters and evaluates aerodynamic quantities with NeuralFoil, at an angle of attack of 5 degrees and Reynolds number of 1,000,000.
It writes the generator input to data/processed/airfoil_with_polars_without_outliers.csv.
The published wing-training CSV and matching configuration are available from the aeroelastic-wings Hugging Face dataset.
This is the recommended route for cVAE training because the complete aeroelastic dataset has already been generated.
uv run python scripts/download_wing_dataset.pyThe script installs combined_wings_data_clipped.csv and config.yaml in data/processed/wings/, which is the location expected by the cVAE configuration.
Two compact reference checkpoints are included in this release.
models/airfoil_vae/airfoil_vae_full_data_v0.1.pt is a native, directly loadable airfoil VAE with a two-dimensional latent space.
It is 392 KB and reached validation loss 1.1348 and test loss 1.2159 in the selected baseline run.
The load example and scope of use are documented in its MODEL_CARD.md.
models/cvae/wing_cvae_full_data_v0.1.ckpt is the 1.22 MB full-data cVAE checkpoint.
It requires the published wing CSV and configuration described above.
Its metrics, requirements, and limitations are documented in its MODEL_CARD.md.
uv run python scripts/download_wing_dataset.py
uv run jupyter labOpen notebooks/cVAE/cVAE_training.ipynb after launching JupyterLab from the repository root.
The notebook downloads the dataset only when it is missing and then starts cVAE training with configs/wing_cVAE_configs/config.yaml.
The full coupled solver is included for experiments with a different operating point, structural assumptions, or parameter ranges.
uv run python src/generative_inverse_wing_design/DataGenerator/datarunner.py \
datarunner_settings.num_workers=8The sampling ranges, structural assumptions, operating point, and output path are specified in configs/dataset_config.yaml.
Hydra accepts reproducible command-line overrides such as operating_point.velocity=45.0 and datarunner_settings.num_workers=4 without modifying the baseline configuration.
| Path | Purpose |
|---|---|
scripts/download_wing_dataset.py |
Downloads the published wing-training CSV and configuration from Hugging Face. |
src/generative_inverse_wing_design/DataGenerator/ |
Coupled aeroelastic simulation, structural model, sampling, and the data-generation entry point. |
src/generative_inverse_wing_design/models/VAE/ |
Airfoil VAE, wing VAE, conditional wing VAE, and data modules. |
configs/ |
Hydra configurations for data generation and model workflows. |
notebooks/ |
Airfoil preprocessing, cVAE training, and model-analysis workflows. |
data/ |
Local data location populated by download, preprocessing, and generation workflows. |
reference/ |
Curated figures displayed in this README. |
models/ |
Compact reference checkpoints and their model cards. |
The code is released under the MIT License.
If you use this software, please cite the software release.
The associated article, Inverse Aeroelastic Design of Glider Wings, will be linked here upon acceptance.
This is release 1.0.0 of the aeroelastic cVAE research code.
The source, configurations, notebooks, and data-download workflow are included for reproducible research use.
The full wing-training dataset is distributed through the documented Hugging Face dataset route.
Compact reference airfoil-VAE and cVAE checkpoints are included under models/.







