CoolFace
Datasetpublic

ecopus/transport-wings-500

Transport Wings 500 A dataset of procedurally generated, aircraft-style wings built from fixed airfoil cross-sections with associated polars. Each row includes planform geometry (spanwise stations, chord, twist), airfoil perimeter coordinates, derived metrics (S, AR, MAC, Clmax, Cdmin, (L/D)max, Cla, α0L), and a 3D preview image (render_png). This dataset is intended for training agents to design wings conditioned on objective (min Cd / max Cl / max Cl/Cd) and chosen airfoil.… See the full description on the dataset page: https://huggingface.co/datasets/ecopus/transport-wings-500.

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes54downloads
Dataset Card

Transport Wings 500

A dataset of procedurally generated, aircraft-style wings built from fixed airfoil cross-sections with associated polars. Each row includes planform geometry (spanwise stations, chord, twist), airfoil perimeter coordinates, derived metrics (S, AR, MAC, Clmax, Cdmin, (L/D)max, Cla, α0L), and a 3D preview image (render_png).

This dataset is intended for training agents to design wings conditioned on objective (min Cd / max Cl / max Cl/Cd) and chosen airfoil.

How the 500 Wing Samples Are Generated

This document explains how the Python pipeline creates the 500 aircraft-style wings in this dataset—what varies, what’s fixed, and the exact math behind the values stored.


1) Inputs & Reproducibility

  • —Airfoil geometry: Each airfoil file contains two columns \\(x, y\\) forming a closed perimeter ordered TE → upper → LE → lower → TE.
  • —On load, \\(x\\) is normalized to \\([0,1]\\); the perimeter is rotated so the first point is closest to the trailing edge \\(1,0\\) and the upper surface comes first.
  • —Polars (optional): QBlade/XFOIL exports with \\(\alpha, Cl, Cd, C_m\\).
  • —Files are matched to airfoils by flexible filename heuristics.
  • —Polars are parsed (3–4 numeric columns), deduplicated in \\(\alpha\\), and sorted by \\(\alpha\\).
  • —Random seed: We use np.random.default_rng(42) so all 500 wings are reproducible bit-for-bit.

2) Per-Wing Planform Sampling (What Varies)

We generate 500 wings. Airfoils are cycled round-robin (≈50 wings per foil). For each wing we sample:

  • —Half-span \\(s\\) (inches): \\(s \sim \mathcal{U}[60,\;120]\\).
  • —Root chord \\(c{root}\\) (inches): \\(c{\text{root}} \sim \mathcal{U}[18,\;36]\\).
  • —Taper ratio \\(\lambda\\): \\(\lambda \sim \mathcal{U}[0.25,\;0.50]\\), so \\(c{\text{tip}}=\lambda\,c{\text{root}}\\).
  • —Twist endpoints (washout) (degrees): \\(i{\text{root}} \sim \mathcal{U}[0,\;2]\\), \\(i{\text{tip}} \sim \mathcal{U}[-6,\;-2]\\).
  • —The final twist distribution is linear from root to tip; then we pin the very first station to \\(0^{\circ}\\) so the wing “hinges” at the root plane (legacy convention).

We use 20 stations (indices or 'slices') along the half-span:

$$ \text{Dis}[j] = y_j = \frac{j-1}{19}\; s,\quad j=1..20. $$


3) Chord Distribution: Schrenk’s Approximation

We blend a trapezoid with an ellipse to approximate an elliptical lift distribution:

  • —Linear (trapezoid) chord:

$$ c{\text{trap}}(y) = c{\text{root}} + (c{\text{tip}} - c{\text{root}})\,\frac{y}{s}. $$

  • —Elliptic surrogate:

$$ c{\text{ell}}(y) = c{\text{root}}\sqrt{1 - \left(\frac{y}{s}\right)^2}. $$

  • —Schrenk chord at each station:

$$ c(y) = \tfrac{1}{2}\left[c{\text{trap}}(y) + c{\text{ell}}(y)\right]. $$

A small clamp prevents pathological tips for extreme tapers:

$$ c(y) \leftarrow \max\!\big(c(y),\;0.25\cdot\min\nolimitsy c{\text{trap}}(y)\big). $$

This yields the Cho vector (inches) over the 20 stations.


4) Twist (Washout) Distribution

With sampled endpoints \\(i{\text{root}}\\) and \\(i{\text{tip}}\\), define a linear twist:

$$ \text{Twi}[j] = i{\text{root}} + \big(i{\text{tip}} - i{\text{root}}\big)\frac{yj}{s},\quad j=1..20. $$

Then set \\(\text{Twi}[1]=0^{\circ}\\) (root plane hinge).


5) Lofting the 3D Wing for Previews

Given the normalized perimeter \\(\bar{x},\bar{y}\\) (TE→upper→LE→lower→TE), we scale and twist each section about the quarter-chord \\(x_{\text{pivot}}=0.25\\):

  1. 1.Shift section to pivot origin: \\(x_c = \bar{x} - 0.25\\).
  2. 2.Scale to local chord \\(cj\\) (inches): \\(Xs = xc\,cj,\; Ys = \bar{y}\,cj\\).
  3. 3.Rotate by \\(\theta_j=\text{Twi}[j]\cdot\pi/180\\):

$$ \begin{bmatrix} Y \\ Z \end{bmatrix} = \begin{bmatrix} \cos\thetaj & -\sin\thetaj \\ \sin\thetaj & \cos\thetaj \end{bmatrix} \begin{bmatrix} Xs \\ Ys \end{bmatrix}. $$

  1. 1.Spanwise coordinate for the whole perimeter at station \\(j\\): \\(S=y_j\\) (inches).

The arrays \\(S, Y, Z\\) generate a fast wireframe 3D PNG used as the dataset’s render_png field.


6) Planform Integrals & Derived Metrics

Treat Dis/Cho as samples over the half-span \\([0,s]\\) in inches. We integrate with the trapezoidal rule, then convert to SI for storage.

  • —Wing area (full wing):

$$ S{\tfrac{1}{2}} = \int0^s c(y)\,dy \;\approx\; \operatorname{trapz}(\text{Dis},\text{Cho})\quad [\text{in}^2], \qquad S{\text{full}} = 2\,S{\tfrac{1}{2}}. $$

Convert: \\(S{\text{full (m}^2)} = S{\text{full}}\cdot(0.0254)^2\\).

  • —Mean Aerodynamic Chord (full wing):

$$ \text{MAC} = \frac{2}{S{\text{full}}} \int{-s}^{s} c(y)^2\,dy = \frac{4}{S{\text{full}}} \int0^s c(y)^2\,dy. $$

We integrate on the half-span (inches), then convert MAC to meters.

  • —Aspect Ratio (full span \\(b=2s\cdot 0.0254\\) meters):

$$ \text{AR} = \frac{b^2}{S_{\text{full (m}^2)}}. $$

  • —Polar-derived metrics (if a polar is found):
  • —\\(C{l,\max}=\max Cl\\) at \\(\alpha{C{l,\max}}\\).
  • —\\(C{d,\min}=\min Cd\\) at \\(\alpha{C{d,\min}}\\).
  • —\\((L/D){\max} = \max(Cl/Cd)\\) at \\(\alpha{(L/D)_{\max}}\\).
  • —Small-angle lift slope and zero-lift angle (linear fit on \\(\alpha\in[-5^{\circ},5^{\circ}]\\)):

$$ Cl \approx m\,\alpha\text{deg} + b \;\Rightarrow\; C{l\alpha}\;[\text{per rad}] = m\cdot \frac{180}{\pi}, \quad \alpha_{0L}\;[^{\circ}] = -\frac{b}{m}. $$

  • —Also stored as objective-style scores:
  • —score_min_cd = min(C_d)
  • —score_max_cl = max(C_l)
  • —score_max_ld = max(C_l/C_d)

If a polar is not found, these fields are NaN; geometry is still fully populated.


7) Station Count & Units

  • —Stations: always 20 over the half-span (keeps compatibility with legacy builders).
  • —Units: dataset stores SI (dis_m, chord_m, span_m, area_m2, mac_m). Inches are used internally during generation for readability and then converted.

8) Image Preview Column

Each wing includes a 3D wireframe PNG (render_png) created from the lofted \\(S,Y,Z\\) arrays:

  • —Section loops at every station,
  • —~14 spanwise polylines to suggest the surface,
  • —Isometric view (elev \\(20^{\circ}\\), azim \\(35^{\circ}\\)),
  • —Title string with span, root/tip chords, and taper.

This renders directly in the Hugging Face Dataset viewer.


9) Why These Look Like Transport Wings

  • —Aspect ratio typically in the 7–11 range (after area settles) due to sampled spans/cords.
  • —Taper \\(0.25\to 0.50\\) and washout \\(-6^{\circ}\to -2^{\circ}\\) are characteristic of transport wings aimed at cruise efficiency and benign stall.
  • —Quarter-chord pivot is the standard torsion axis.
  • —Schrenk chord smooths the planform compared to pure linear taper, approximating more elliptical loading.

10) Worked Example (Representative Draw)

Let \\(s=100\\) in, \\(c{\text{root}}=30\\) in, \\(\lambda=0.35 \Rightarrow c{\text{tip}}=10.5\\) in, stations=20. Twist endpoints: \\(i{\text{root}}=1.0^{\circ}\\), \\(i{\text{tip}}=-4.0^{\circ}\\), then \\(\text{Twi}[1]=0^{\circ}\\).

Mid-span chord \\(y=50\\) in:

$$ c{\text{trap}}(50) = 30 + (10.5-30)\cdot 0.5 = 20.25\text{ in},\quad c{\text{ell}}(50) = 30\sqrt{1-0.5^2} \approx 25.98\text{ in}, $$

$$ c(50) \approx \tfrac{1}{2}(20.25+25.98) \approx 23.11\text{ in}. $$

If \\(S{\text{full}} \approx 5000\;\text{in}^2 \Rightarrow S{\text{full}} \approx 3.226\;\text{m}^2\\) and full span \\(b=200\\) in \\(=5.08\\) m, then:

$$ \text{AR} = \frac{b^2}{S} \approx \frac{(5.08)^2}{3.226} \approx 8.0. $$

MAC comes from the \\(c(y)^2\\) integral and is often in the \\(0.3\text{–}0.5\\) m range here.


11) What Makes Each of the 500 Unique?

  • —Airfoil choice (≈50 samples per foil) → geometry & polar behavior differ.
  • —Planform: each wing draws a new \\((s,\;c_{\text{root}},\;\lambda)\\) → different area, AR, MAC.
  • —Twist: each wing draws \\(i{\text{root}}, i{\text{tip}}\\) → different load tendency.
  • —Performance summaries: objective-style scores \\((\min Cd,\; \max Cl,\; \max Cl/Cd)\\) and the \\(\alpha\\) at which they occur differ per wing.

Notes for Objective-Conditioned Training

To bias toward a given objective at training time:

  • —Condition on objective ∈ {min Cd, max Cl, max Cl/Cd} and airfoil (name or perimeter).
  • —Use the scalar scores as targets (e.g., regress score_min_cd) or form ranking pairs within the same airfoil.
  • —Optionally post-select the top-k wings per airfoil by the chosen objective as exemplar targets.