Airfoil profile generation
The shore.profiles module produces 2D airfoil section coordinates analytically, with no external dependencies beyond NumPy. This page documents the polynomial families, the Selig ordering convention, and the cosine-sampling rule. For the consumer-facing API, see shore profile.
Selig ordering
All sections are returned as (N, 2) arrays ordered around the closed curve starting at the upper trailing edge, walking forward over the suction (upper) surface to the leading edge, then back over the pressure (lower) surface to the lower trailing edge:
out[0] = upper TE (x ≈ 1, y ≥ 0)
out[N//2] = leading edge (x = 0, y = 0)
out[-1] = lower TE (x ≈ 1, y ≤ 0)This matches the format used by the UIUC airfoil database and most CFD pre-processors, so any UIUC .dat drops into shore body extrude directly.
For a sharp TE (closed_te=True, default), out[0] == out[-1] exactly; the polynomial residual is forced to zero so the curve closes. For a blunt TE (closed_te=False), the two endpoints are separated by the natural ~0.1% chord polynomial residual.
Cosine sampling
Points are placed at chord positions x_i derived from a uniform angular sampling of a half-cosine:
This clusters samples at the leading edge (x = 0) and trailing edge (x = 1) — the natural NACA parameterisation, matched to the rapid curvature changes there. The argument n_pts is the chord-sample count per side; the closed Selig curve has 2 * n_pts - 1 total points (the LE node is shared between upper and lower).
NACA 4-digit family
Designation MPTT:
M= max camber as % chord (first digit)P= camber position in tenths of chord (second digit)TT= max thickness as % chord (last two digits)
Example: 2412 = 2% camber at 40% chord, 12% thickness.
Thickness distribution
The half-thickness is the standard NACA 4-digit polynomial:
with coefficients
and the last coefficient picked to control the TE closure:
| Form | TE behaviour | |
|---|---|---|
| Open TE (original) | ||
| Closed TE |
shore.profiles.naca uses the closed-TE coefficient by default; pass closed_te=False to keep the original open-TE behaviour (useful when you want to detect the resulting blunt TE downstream in the C-grid topology).
Camber line
For M = P = 0 the airfoil is symmetric and the camber line vanishes. Otherwise:
with
Surface coordinates
Upper and lower surfaces are offset perpendicular to the camber line:
where
NACA 5-digit family
Designation LPSTT:
L= design. Always 2in the standard family (giving). P= mean-line shape designation. S= camber type.0= standard,1= reflexed.TT= max thickness as % chord.
Example: 23012 = standard mean line 230 with 12% thickness; 23112 is the reflexed counterpart.
Thickness distribution
The 5-digit family uses the same thickness polynomial as the 4-digit family — only the camber line changes.
Standard mean line (S = 0)
From NACA TR-537 (Jacobs & Pinkerton, 1935):
The coefficients
| Q | designation | ||
|---|---|---|---|
| 1 | 210 | 0.0580 | 361.40 |
| 2 | 220 | 0.1260 | 51.640 |
| 3 | 230 | 0.2025 | 15.957 |
| 4 | 240 | 0.2900 | 6.643 |
| 5 | 250 | 0.3910 | 3.230 |
Reflexed mean line (S = 1)
From NACA TR-610. The camber line gains a third segment so the aft loading is opposite to the fore loading — useful for tailless configurations. Coefficients
| Q | designation | |||
|---|---|---|---|---|
| 2 | 221 | 0.1300 | 51.990 | 0.000764 |
| 3 | 231 | 0.2170 | 15.793 | 0.006770 |
| 4 | 241 | 0.3180 | 6.520 | 0.030300 |
| 5 | 251 | 0.4410 | 3.191 | 0.135500 |
The reflexed camber polynomial is
The surface-offset rule (upper / lower from
Out of scope
- Modified 4-digit (e.g.
0012-64) — sharper LE and a shifted thickness peak; needs additional polynomial coefficients per family. - NACA 6-series (e.g.
63-012) — laminar-flow profiles whose thickness distribution comes from solving Theodorsen's conformal-mapping integral. Not closed-form; needs numerical integration.
These can be added later; for the typical airfoil-CFD workflow (symmetric and cambered 4-digit, the canonical 23xxx family) the current coverage is enough.
See also
shore profile— CLI command to generate.datfiles.shore body extrude— extrude a Selig section into a 3D wing STL.- C-grid topology — the meshing target for extruded wing STLs.