NACA456(1)
π¦ NACA456(1) β the BRL-CAD girlie's guide π¦
okay so welcome to naca456(1), the BRL-CAD manual page, and honestly? she's a whole personality. grab a snack, we're building wings π
β¨ NAME β¨
naca456 β generate BRL-CAD wing geometry from NACA 4-, 5-, and 6-series airfoils π©οΈ
β¨ SYNOPSIS β¨
naca456 [-m bot|brep] [-a code] [-A code] [-s length] [-r length]
[-t length] [-w degrees] [-d degrees] [-T degrees]
[-S count] [-c count] [-f] [-o file.g] [-n name] [options]
naca456 --demo-file file.g
naca456 --airfoil code --section-file file.tsv
like, three whole moods. pick one π«Ά
β¨ DESCRIPTION β¨
so naca456 makes a semi-span wing model inside a BRL-CAD .g database, using NACA airfoil section definitions. your output can be either a closed Bag of Triangles (BoT) mesh or a boundary representation (BREP) β both slay, just different vibes. and in both modes, the generated object gets written as a solid plus a region comb, using whatever base name you asked for. periodt.
the section math she actually implements is: classic 4-digit NACA airfoils, 5-digit mean-line sections, 5-digit reflex mean-line sections, and the NACA 6/6A families covered by the public-domain NACA456 reference implementation from Public Domain Aeronautical Software:
https://www.pdas.com/naca456download.html
Note π the generated models are intended for procedural geometry, rendering, inspection, and BRL-CAD workflow testing. They are not validated for aircraft engineering design, flight hardware development, aerodynamic or structural performance prediction, certification, or any other safety-critical flight use. like. do not put this on a plane, bestie π
β¨ SUPPORTED AIRFOILS β¨
the --airfoil and --tip-airfoil options accept these NACA designations:
- Four-digit sections such as
0012,2412, and4415. π - Five-digit sections such as
23012. - Five-digit reflex sections such as
23112. - Six-series sections in the
63,64,65,66, and67families, such as63-215,63215, and65-210. - Six-A-series sections in the
63A,64A, and65Afamilies, such as64A210.
the parser is super chill β she ignores whitespace and hyphens and accepts an optional NACA prefix. for example, NACA 63-215, 63-215, and 63215 are all equivalent. same girl, different outfit π
for 5-digit sections, here's the decode, iykyk:
- the first digit sets design lift coefficient
- the second digit sets the camber-position family
- the third digit selects normal (
0) or reflex (1) mean-line behavior - the last two digits set thickness percent
the supported camber-position families are exactly the ones tabulated by the NACA456 reference equations: 5, 10, 15, 20, and 25 percent chord for normal 5-digit sections, and 10, 15, 20, and 25 percent chord for reflex sections. no fakes, no extras πΈ
for 6-series sections:
- the first two characters select the profile family
- the next digit is design lift coefficient in tenths
- the final two digits are thickness percent
the --six-a option controls the loading parameter a for ordinary 6-series mean lines. and 6A sections use the modified 6-series mean line behavior from NACA456, where a is fixed at 0.8 π
β¨ OPTIONS β¨
okay this is the long part, but every single one matters, so buckle up π’
-h,-?,--helpβ print option help and exit. the classic cry for help, but make it useful.-ofile.g,--outputfile.g β write a single generated wing to file.g. the default isnaca456-wing.g.-nname,--namename β use name as the base object name. the solid is written asname.botorname.brep, and the region is written asname.r. the default isnaca456_wing. cute, consistent, iconic π-acode,--airfoilcode β set the root airfoil. the default is2412.-Acode,--tip-airfoilcode β set the tip airfoil. if you omit it, the root airfoil is used at the tip too (matching fit, lowkey adorable). when you do supply different root and tip airfoils,naca456samples both sections with the same chordwise parameterization and linearly interpolates their section coordinates along the span. this supports interpolation across different supported NACA families when the generated section topology remains compatible. β¨-mbot|brep,--modebot|brep β select output geometry. the default isbot.--brep-surfaceruled|smooth β select the BREP side-surface construction mode.ruledis the default and creates local bilinear ruled NURBS patches for each span/chord cell.smoothcreates bicubic Hermite NURBS patches for each span/chord cell, using shared cubic edge curves and the same explicit trim topology andIsValid()/IsSolid()checks. both get the same safety inspection, bestie π§--tip-stylerounded|flat β select the wing-tip closure style.roundedis the default and creates an elliptical planform-style closure beyond the nominal tip section.flatuses the historical planar cap at the final section. withrounded, the requested tip airfoil and tip chord describe the shoulder section where the rounded closure begins;--semi-spanand--full-spanstill measure to the outermost rounded closure. withflat, the requested tip section is placed directly at the semi-span station. the way this is documentedβ¦ meticulous π--tip-specificationfile.json β read an advanced versioned JSON tip specification. this option is mutually exclusive with--tip-style(pick one, they can't both be main character). Version 1 supportsrounded,flat,raked,hoerner,winglet, andblended_wingletstyles. π-slength,--semi-spanlength β set the root-to-tip semi-span length of the generated half-wing. the default is1000.--full-spanlength β set the full aircraft span. the generated semi-span wing uses half this value. this option is mutually exclusive with--semi-span. βοΈ-rlength,--root-chordlength β set the root chord length. the default is250.-tlength,--tip-chordlength β set the tip chord length. the default is125.-wdegrees,--sweep-angledegrees β set the leading-edge sweep angle in degrees. positive values sweep the tip back in the model X direction. internally this is resolved to a tip leading-edge X offset usingtan(angle) * semi-span. the default is0. math ate π--sweep-offsetlength β set the tip leading-edge X offset directly. this option is useful when exact model-space placement is more important than an angular planform description. it's mutually exclusive with--sweep-angle.-ddegrees,--dihedraldegrees β set the tip dihedral angle in degrees. the default is0.-Tdegrees,--tip-twistdegrees β set the tip twist angle in degrees. twist is linearly interpolated from zero at the root to this value at the tip. the rotation pivot is the local quarter-chord point. π-ua,--six-aa β set the ordinary 6-series mean-line loading parameter. the value must be in the interval[0, 1]. the default is1.0. this option does not alter the fixed modified mean line used by 6A sections β that one's locked, no notes π-Scount,--stationscount β set the number of spanwise stations. the minimum is2and the default is9.-ccount,--samplescount β set the number of chordwise samples per upper or lower surface. the minimum is5and the default is65.-xoffset,--x-offsetoffset β set a model-space X translation.-yoffset,--y-offsetoffset β set a model-space Y translation.-zoffset,--z-offsetoffset β set a model-space Z translation. (yes, it's just the trio. nudge nudge, move move π«Ά)-p,--sharp-teβ use the sharp trailing-edge coefficient for 4- and 5-digit thickness forms. the NACA 6-series conformal-mapping thickness forms retain their mapped trailing-edge behavior β those ones aren't changing, no cap πͺ-f,--forceβ overwrite an existing output file. use responsibly, bestie π-j,--appendβ append objects to an existing output database. object name collisions are rejected, so no accidental overwrites, we love boundaries π§--demo-filefile.g β write a36-wing sampler database to file.g and exit. the first24examples are BoT wings and the final12examples are BREP wings. the sampler covers 4-digit, 5-digit, 5-digit reflex, 6-series, 6A-series, sharp trailing-edge, sweep, taper, dihedral, twist, mixed root/tip section cases, and the supported tip styles. the BREP sampler rows honor--brep-surface. if--tip-styleor--tip-specificationis supplied, all sampler rows use that explicit tip choice; otherwise the built-in rows use varied tip specifications. the demo database also contains a top-level all combination that unions all generated wing regions. like a lookbook but for wings πβ¨--section-filefile.tsv β write normalized root airfoil section coordinates to file.tsv and exit. this mode is intended for regression testing and reference comparison against the PDAS NACA456 combined-thickness-and-camber tables. the output columns are airfoil designation, upper X, upper Y, lower X, and lower Y. use--forceto replace an existing section file. π
(and yes, there's more of this page β like, the whole rest of it. stay tuned π)
π TIP SPECIFICATION JSON π
okay bestie, this is where the tip gets its own little JSON glow-up. The --tip-specification file uses a strict JSON object schema. Unknown keys are errors, version is required, and version 1 is the only version currently accepted. Length values are model-space values in the same units as the other command-line dimensions.
π¨ Strict-schema vibe check: unknown keys are errors, bestie.versionis required, and version1is the only version currently accepted. Length values are model-space values in the same units as the other command-line dimensions.
The rounded schema exposes the default rounded closure parameters:
{
"version": 1,
"style": "rounded",
"closure_length": 95.0,
"terminal_scale": 0.10,
"center_chord_fraction": 0.5,
"segments": 7
}
The closure_length field is optional; when omitted, naca456 derives a conservative value from the tip chord and semi-span. terminal_scale is the final cap scale relative to the nominal tip section, center_chord_fraction sets the normalized chord location about which the section shrinks, and segments controls closure refinement.
The raked schema adds a spanwise extension inside the requested semi-span:
{
"version": 1,
"style": "raked",
"extension": 120.0,
"rake_offset": 80.0,
"terminal_chord": 70.0,
"terminal_airfoil": "0008",
"twist_delta": -1.5,
"segments": 5,
"cap_style": "flat"
}
For raked, the nominal tip section is placed at the start of the extension and the terminal section is placed at the semi-span. rake_offset is the additional leading-edge X offset accumulated across the extension. terminal_chord, terminal_airfoil, and twist_delta define the outer section. The initial raked implementation supports cap_style value flat.
The hoerner schema creates a clipped, drooped rounded closure:
{
"version": 1,
"style": "hoerner",
"closure_length": 100.0,
"tip_cut_angle": 25.0,
"droop": 12.0,
"terminal_scale": 0.12,
"segments": 8
}
closure_length, terminal_scale, and segments control the same closure refinement concepts used by rounded. tip_cut_angle shears the shrinking sections in planform to approximate the Hoerner cut, and droop lowers the outer closure in model Z.
The winglet schema creates an upright tip extension from the nominal tip section:
{
"version": 1,
"style": "winglet",
"height": 220.0,
"cant_angle": 70.0,
"toe_angle": 2.0,
"sweep_offset": 30.0,
"chord": 75.0,
"taper": 0.55,
"airfoil": "0010",
"twist_delta": -1.5,
"segments": 8,
"cap_style": "flat",
"side": "up"
}
height is the winglet rise, cant_angle controls how strongly the winglet rotates upward from the wing plane, toe_angle yaws the section, and sweep_offset shifts the outer winglet leading edge in X. chord, taper, optional airfoil, and optional twist_delta define the outer winglet section. side is up or down. The current winglet cap support is cap_style value flat.
The blended_winglet schema adds a root blend ahead of the upright winglet:
{
"version": 1,
"style": "blended_winglet",
"height": 220.0,
"cant_angle": 68.0,
"toe_angle": 2.0,
"sweep_offset": 35.0,
"root_blend_length": 140.0,
"chord": 80.0,
"taper": 0.55,
"airfoil": "0010",
"twist_delta": -2.0,
"segments": 8,
"transition_segments": 5,
"curvature_profile": "cosine",
"cap_style": "flat",
"side": "up"
}
root_blend_length reserves inboard span for the transition from the main wing to the winglet. transition_segments refines that transition, and curvature_profile is cosine or linear.
β¨ ALGORITHM β¨
For each requested airfoil, naca456 creates cosine-spaced chordwise sample locations. This concentrates points near the leading edge, where the curvature is highest. It computes mean-line ordinate and slope, computes half-thickness, and offsets the section normal to form upper and lower surface points.
Four-digit thickness uses the conventional polynomial form, with either the standard finite trailing-edge coefficient or the sharp trailing-edge coefficient selected by --sharp-te. Four-digit camber uses the usual two-piece parabolic mean line.
Five-digit normal and reflex mean lines use the tabulated r, k1, and k2/k1 relationships from the NACA456 implementation. Five-digit thickness uses the same polynomial thickness form as the four-digit family.
Six-series and 6A-series thickness is generated from the epsilon/psi conformal mapping data embedded from NACA456. The implementation evaluates the tabulated epsilon and psi functions, scales them for the requested thickness ratio, maps the circle to airfoil coordinates, and interpolates the resulting half-thickness curve at the requested chordwise samples. Ordinary 6-series mean lines use the NACA456 MeanLine6 equations. 6A-series mean lines use the NACA456 modified six-series mean line.
The planform transform is then applied station by station. Chord length, leading-edge sweep offset, dihedral, and twist are linearly interpolated from root to the nominal tip section. Twist is applied around the local quarter chord. The model-space translation options are applied after the local section transform.
The default --tip-style rounded adds an elliptical closure beyond the nominal tip section. The closure progressively scales the tip airfoil outline around mid-chord, giving the planform a rounded wing-tip outline while preserving closed, explicit BoT/BREP topology. Both output modes add refined closure stations and close with a small terminal cap, avoiding the broad planar fan used by a simple pole closure. BREP represents the rounded closure with the same NURBS side-surface mode selected by --brep-surface; BoT writes per-face-vertex normals for smoother display while preserving the refined mesh geometry. The fallback --tip-style flat places the final section at the semi-span location and closes it with a planar triangulated cap.
In BoT mode, adjacent station outlines are triangulated into a closed mesh. The root cap and flat tip caps are triangulated as constrained polygons rather than centroid fans, avoiding poor triangles on concave or sharply cusped airfoil outlines. Rounded tips use the same side triangulation and close to a small terminal cap. The generated mesh is checked for finite coordinates, valid indices, manifoldness, orientation, closure, self-intersection, and triangle quality before it is written as a solid BoT. BoT output includes surface normals for smoother rounded-tip display; root and terminal cap normals are kept flat.
In BREP mode, every outline vertex is represented explicitly. Chordwise outline edges and spanwise edges are shared by adjacent faces. The side skin is represented as local bilinear ruled NURBS patches between neighboring spanwise stations and chordwise outline edges. Local patches avoid the span-curve overshoot that can occur when a single interpolated strip crosses a sharp wing-tip transition.
Root caps and flat tip caps are represented by triangulated planar faces; rounded tips use additional NURBS side/closure bands down to a small terminal triangulated cap. The BREP is standardized, compacted, and checked with OpenNURBS IsValid() and IsSolid(), plus additional libbrep quality checks for duplicate vertices, zero-length edges and trims, edge trim pairing, face aspect ratio, and conservative self-intersection risk, before it is written.
With --brep-surface smooth, the side skin uses bicubic Hermite NURBS patches for each station-to-station, chord-to-chord cell. Tangents are estimated from neighboring spanwise and chordwise samples, then limited against each local edge direction and length to avoid overshoot at sharp tip transitions. The patch boundary curves are shared as explicit BREP edges. This produces smoother local side-surface geometry while preserving explicit loop and trim topology.
When either the root or tip section has a collapsed trailing edge, the lower trailing-edge duplicate is omitted for all interpolated stations. This keeps the spanwise topology stable and avoids zero-length BREP edges in mixed root/tip cases.
π METADATA π
Each generated solid and region receives naca456:: attributes recording the inputs used to create it. These include generator name, metadata version, algorithm source, geometry mode, BREP surface mode, root and tip airfoil designations, tip style, semi-span, full span, root and tip chord, sweep offset, sweep angle, dihedral, tip twist, 6-series loading parameter, station/sample counts, trailing-edge mode, and model-space offsets. When a JSON tip specification is used, the compact JSON payload is recorded; when it comes from --tip-specification, the filename is recorded as well.
For example:
mged wing.g "attr get wing_2412.r naca456::root_airfoil"
mged wing.g "attr get wing_2412.r naca456::geometry_mode"
mged wing.g "attr get wing_2412.r naca456::brep_surface"
mged wing.g "attr get wing_2412.r naca456::tip_style"
The attributes are intended to make generated models auditable. They are not a parametric regeneration contract; future versions may add metadata fields or change BREP construction details.
π§ LIMITATIONS π§
okay bestie, real talk time β here's what naca456 is not gonna do for you, no cap. It's a geometric airfoil and wing-shape generator. It does not perform aerodynamic analysis, structural analysis, aeroelastic analysis, certification checks, or optimization. That's just not the vibe. π
The generated model is a semi-span wing only. The tool does not currently generate wing-body blends, mirrored full-span assemblies, control surfaces, flaps, slats, spars, ribs, skins with physical thickness, fuel volumes, fasteners, or manufacturing features. So if you were hoping for a whole plane... girl, no. π
The simple --tip-style option intentionally exposes only the default rounded closure and flat fallback. More parameterized tips are available through --tip-specification. The Hoerner and winglet styles are geometric approximations intended for procedural model generation; they are not a substitute for aerodynamic design, load analysis, or manufacturer-specific tip-device geometry. Like, they're cute for models, not for certifying anything. β¨
The BREP output is checked with OpenNURBS IsValid() and IsSolid(), but it is not a general CAD healing pipeline. Downstream Boolean operations may still be sensitive to extreme parameter combinations, very thin sections, aggressive twist, or highly tapered planforms. So keep an eye on it, okay? π
The airfoil definitions are mathematical NACA sections produced from the referenced NACA456 equations and tables. They are not guaranteed to match any particular manufactured, wind-tunnel, or proprietary derivative airfoil. Periodt. π
All length inputs are BRL-CAD model-space values. They are intentionally unitless at the command line: a value of 1000 means 1000 database model units, whatever unit system the receiving .g database is interpreted to use. The generated shape is a semi-span wing; use --semi-span to specify that length directly, or --full-span when starting from a full aircraft span. Sweep is available either as --sweep-angle for an aerodynamic planform description or as --sweep-offset for exact model-space placement. Choose your fighter. π«Ά
π ALGORITHM SOURCES π
The section mathematics are implemented from the public-domain NACA456 program by Ralph Carmichael, distributed by Public Domain Aeronautical Software (PDAS):
https://www.pdas.com/naca456download.html
The BRL-CAD implementation references the NACA456 source files nacax.f90, epspsi.f90, and splprocs.f90. In particular, it uses the NACA456 MeanLine3, MeanLine3Reflex, MeanLine6, MeanLine6M, ScaleFactor, and six-series epsilon/psi table logic as the basis for the local C++ implementation. Iconic source lineage, honestly. π
The NACA456 source package and PDAS reference page identify these principal references for the underlying airfoil coordinate algorithms and data:
- Carmichael, Ralph L., "Algorithm for Calculating Coordinates of Cambered NACA Airfoils At Specified Chord Locations," AIAA Paper 2001-5235, November 2001.
- Ladson, Charles L., and Brooks, Cuyler W., Jr., "Development of a Computer Program to Obtain Ordinates for NACA 6- and 6A-Series Airfoils," NASA Technical Memorandum X-3069, September 1974.
- Ladson, Charles L., and Brooks, Cuyler W., Jr., "Development of a Computer Program to Obtain Ordinates for NACA 4-Digit, 4-Digit Modified, 5-Digit, and 16-Series Airfoils," NASA Technical Memorandum X-3284, November 1975.
- Ladson, Charles L., Brooks, Cuyler W., Jr., Hill, Acquilla S., and Sproles, Darrell W., "Computer Program to Obtain Ordinates for NACA Airfoils," NASA Technical Memorandum 4741, December 1996.
- Abbott, Ira H., and von Doenhoff, Albert E., Theory of Airfoil Sections, Dover, 1952.
- Abbott, Ira H., von Doenhoff, Albert E., and Stivers, Louis S., "Summary of Airfoil Data," NACA Report 824, 1945.
- Jacobs, Eastman N., and Pinkerton, Robert M., "Tests in the Variable-density Wind Tunnel of Related Airfoils Having the Maximum Camber Unusually Far Forward," NACA Report 537, 1935.
- Loftin, Laurence K., Jr., "Theoretical and Experimental Data for a Number of NACA 6A-series Airfoil Sections," NACA Report 903, 1948.
The broader PDAS bibliography is maintained at:
https://www.pdas.com/naca456refs.html
π EXAMPLES π
π©οΈ Example 1. Swept, dihedral, tapered BoT wing
naca456 --mode bot --force --output wing.g --name wing_2412 \
--airfoil 2412 --semi-span 1000 --root-chord 250 --tip-chord 125 \
--sweep-angle 4.6 --dihedral 5 --tip-twist -2 --stations 9 --samples 65
Generates a closed Bag-of-Triangles half-wing from a NACA 2412 section with 4.6 degrees of leading-edge sweep, 5 degrees of dihedral, and -2 degrees of tip washout into wing.g as the solid wing_2412.bot and region wing_2412.r, ready to be raytraced with rt(1) or edited in mged(1). She's ready for her close-up. β¨
π¦ Example 2. BREP wing blending a 5-digit root into a 6-series tip
naca456 --mode brep --force --output wing-brep.g --name wing_brep \
--airfoil 23012 --tip-airfoil 65-210 --full-span 2000 \
--root-chord 280 --tip-chord 110 --sweep-offset 120 \
--dihedral 4 --tip-twist -3 --stations 8 --samples 29
Produces a NURBS boundary-representation wing whose sections are linearly interpolated from a NACA 23012 root to a NACA 65-210 tip. The full span is 2000 model units (1000-unit semi-span), and the tip leading edge is placed 120 units aft by direct offset rather than by sweep angle. Mixing families? Obsessed. π
π Example 3. Wing with a JSON-specified raked tip, then inspected in mged
cat > tip-raked.json <<'EOF'
{ "version": 1, "style": "raked", "extension": 120.0, "rake_offset": 80.0,
"terminal_chord": 70.0, "terminal_airfoil": "0008", "cap_style": "flat" }
EOF
naca456 --mode brep --force --output wing-raked-brep.g \
--name wing_raked --airfoil 2412 --semi-span 780 \
--root-chord 230 --tip-chord 110 --sweep-offset 70 \
--tip-specification tip-raked.json --stations 7 --samples 25
mged wing-raked-brep.g "attr get wing_raked.r naca456::tip_style"
Builds a raked wing-tip extension described by an external versioned JSON tip specification, then reads back the naca456::tip_style attribute that naca456 records on every generated region for auditability. Receipts? We keep them. π§Ύπ
π Example 4. Built-in sampler database
naca456 --demo-file naca456-demo.g
mged naca456-demo.g "l all"
Writes a 36-wing sampler (24 BoT and 12 BREP wings) covering the 4-digit, 5-digit, 5-digit reflex, 6-series, and 6A-series families together with a top-level all combination that unions every generated wing region. A whole little airfoil buffet, fr fr. π
π©Ί DIAGNOSTICS π©Ί
naca456 exits with a nonzero status if option parsing fails, if the requested NACA code is unsupported, if the output database cannot be opened, if appending would overwrite an existing object name, if BoT mesh validation fails, or if BREP validation or solid classification fails. So if something's up, she will absolutely let you know. π
π SEE ALSO π
brlcad(1), mged(1), rt(1), libwdb(3)
π AUTHOR π
BRL-CAD Team
Β©οΈ COPYRIGHT Β©οΈ
This software is Copyright (c) 1989-2026 by the United States Government as represented by U.S. Army Research Laboratory.
π BUG REPORTS π
Reports of bugs or problems should be submitted via electronic mail to devs@brlcad.org
and that's the whole page, bestie β brought to you by BRL-CAD, filed under NACA456(1), with all the source/version and date energy at the bottom where it belongs. go build something iconic π β¨π«Ά
π¦ where this page comes from
- nixpkgs unstable: brlcad 7.44.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms