Winglet Design (aerodynamics/wing-design/winglet-design)
Use when the task is the wingtip device trade for induced-drag reduction:
sizing the winglet height and cant from the reference wing geometry and
a target drag reduction, and weighing the drag gain against the root
bending moment penalty. This leaf implements the effective-span
extension model in pure Python, stdlib only. It pairs with
aerodynamics/wing-design/wing-planform-design for the reference
planform, and with vehicle-design/sizing/wing-planform-sizing and the
drag-polar leaves for the system context. The improved span efficiency
and bending penalty models are documented conceptual approximations for
a preliminary trade; a real winglet design needs a VLM/CFD pass and a
structural FEM pass.
Domain quick reference
- Effective span extension: extension = K_HEIGHT * height_frac, with
K_HEIGHT = 0.8 the documented fraction of the winglet height that acts
as span extension. height_frac is the winglet height over the local
semi-span.
- Cant weighting: cant_factor = cos(cant_deg). A vertical winglet
(cant 0) keeps the full effect; a flat tip (cant 90) loses it.
- Extended span and effective aspect ratio: b_eff = b * (1 + 2 *
cant_factor * K_HEIGHT * height_frac) adds both tips, and
AR_eff = b_eff^2 / area.
- Improved span efficiency: e_eff = 1 - (1 - e_base) / (AR_eff / AR)
with AR = span^2 / area. Documented approximation: the drag factor
k = 1 / (pi * e * AR) shrinks with the effective-AR gain.
- Induced drag: k = 1 / (pi * e * AR) and cd_i = cl^2 * k at the
reference lift coefficient.
- Drag reduction: reduction_pct = 100 * (1 - cd_i_wl / cd_i_base).
- Root bending penalty: penalty_pct = cant_factor * K_HEIGHT *
height_frac * 100 * (1 + 0.5 * height_frac). Approximate scaling, the
winglet load acts near the tip so the added root moment grows roughly
with the height fraction.
- Sizing: size_winglet bisects height_frac in [0.01, 0.5] to a 0.1 pct
reduction tolerance and returns the physical height
height_m = height_frac * span / 2 (semi-span local reference).
- Units are SI: m, m^2, degrees.
Workflow
- Take the reference wing geometry from the planform design: span,
area, base span efficiency e_base, and the lift coefficient cl_ref
for the drag check.
- Read off the winglet height fraction and cant, or the target
reduction percent when sizing.
- Compute the span extension with effective_span_extension and the
cant weighting with cant_factor.
- Get the effective aspect ratio with ar_eff and the improved span
efficiency with e_winglet.
- Get the induced-drag factors with induced_drag_factor, then the
drag coefficients with cd_i, and the gain with
drag_reduction_pct.
- Check the structural side with root_bending_penalty_pct.
- To size the device, run size_winglet with the target reduction and
inspect the returned height fraction, height, ar_eff, e_eff, cd_i,
reduction_pct and bending_penalty_pct.
- Confirm the deterministic checks with the contract test
scripts/test_winglet_design.py.
Worked example
Wing: span 30 m, area 100 m^2 (AR 9), e_base 0.80, cl_ref 0.5. Direct
case height_frac 0.12, cant 0 deg, taper 0.35.
- Extension: 0.8 * 0.12 = 0.096; cant factor 1.0.
- Extended span: 30 * (1 + 2 * 1.0 * 0.096) = 35.76 m; AR_eff =
35.76^2 / 100 = 12.788.
- Span efficiency: e_eff = 1 - 0.2 / (12.788 / 9) = 0.85924.
- Drag factors: k_base = 1 / (pi * 0.8 * 9) = 0.044210; k_wl = 1 / (pi *
0.85924 * 12.788) = 0.028969.
- Drag coefficients: cd_i base = 0.25 * 0.044210 = 0.011052; cd_i wl =
0.25 * 0.028969 = 0.007242.
- Reduction: 100 * (1 - 0.007242 / 0.011052) = 34.47 pct.
- Bending penalty: 1.0 * 0.8 * 0.12 * 100 * (1 + 0.06) = 10.18 pct.
- Sizing case: size_winglet(30, 100, 0.8, 25, 0.5) returns height_frac
0.0784, height_m 1.176 m, ar_eff 11.40, e_eff 0.8421, reduction_pct
25.00 within the 0.1 pct tolerance, bending_penalty_pct 6.52.
Verification
- Confirm ar_eff(30, 100, 0.12, 0.0) returns 12.788 within 0.01.
- Confirm e_winglet(0.8, 0.12, 0.0) returns 0.85924 within 1e-4.
- Confirm induced_drag_factor(0.8, 9.0) returns 0.044210 within 1e-6
and the winglet factor matches 1 / (pi * e_eff * AR_eff).
- Confirm cd_i base 0.011052 and the drag reduction 34.47 pct against
the worked example band (34.43 within 0.05).
- Confirm root_bending_penalty_pct(0.12, 0.0) returns 10.18 within
0.05 and drops to zero for a flat tip at 90 deg cant.
- Confirm size_winglet with target 25 pct returns a height fraction in
[0.05, 0.12] and a reduction within 0.1 pct of the target.
- Confirm every non-positive span, area, lift coefficient, span
efficiency outside (0, 1], height fraction outside [0, 0.6], cant
outside [-90, 90] degrees, taper outside (0, 1] and target reduction
outside (0, 100) raises ValueError.
- Run the contract test offline: python3
scripts/test_winglet_design.py (31 tests, deterministic).
Related leaves
- aerodynamics/wing-design/wing-planform-design: the reference planform
geometry and spanwise loading the winglet sizing starts from.
- vehicle-design/sizing/wing-planform-sizing: vehicle-level wing area
sizing context.
- aerodynamics/drag-polars/drag-polar and
aerodynamics/drag-polars/parasite-drag: the full polar the induced
term feeds into.
- aerodynamics/cfd/vortex-lattice-method: the higher-fidelity follow-on
for the spanwise loading with the winglet fitted.
- structures/fem/calculix-linear: the structural follow-on for the root
bending check.
Pitfalls
- Sizing the winglet against the cruise drag polar without a reference
lift coefficient: cd_i scales as cl^2, so the 34.47 pct reduction in
the worked example is only valid at cl_ref = 0.5 - report the
reduction with the lift coefficient it was computed at.
- Counting the full winglet height as span: only K_HEIGHT = 0.8 of the
height acts as span extension, and only the cant-weighted part
(cant_factor = cos(cant_deg)) contributes, so a canted or flat tip
gains less effective span than its physical height suggests.
- Trading drag reduction without the bending check: the winglet that
cuts induced drag 34.47 pct also adds 10.18 pct root bending moment
in the worked example - the tip-device trade must weigh
root_bending_penalty_pct against the drag gain.
- Treating the approximate models as a final design: the e_eff
improvement and bending-penalty relations are documented conceptual
approximations for a preliminary trade; a real winglet needs the VLM
or CFD pass and the structural FEM pass named in the related leaves.
- Feeding non-physical geometry: span, area and lift coefficient must be
positive, span efficiency in (0, 1], height fraction in [0, 0.6],
cant in [-90, 90] deg, taper in (0, 1] and target reduction in
(0, 100) - everything else raises ValueError.
- Confusing the sizing reference: size_winglet bisects the height
fraction on the local semi-span reference and returns the physical
height as height_frac * span / 2, so the returned height_m belongs to
the semi-span local definition, not the full span.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_winglet_design.py
The test covers the worked example contract (AR_eff 12.788, e_eff
0.85924, k_base 0.044210, drag reduction 34.47 pct, bending penalty
10.18 pct), the cant weighting bounds, the effective-aspect-ratio
identity, the sizing bisection contract and its monotonicity, the
height from the semi-span reference, and ValueError rejection of every
non-physical input.
Compliance
- Standards referenced, not reproduced: NACA TR-824 is the classic
induced-drag and airfoil-data basis and FAR 25 the structural and
airworthiness context; both are cited by name only with the model
relations stated as standard engineering methodology, summary-only
per standards-map.yaml.
- The e_eff improvement and bending-penalty models are documented
conceptual approximations for a preliminary trade.
- compliance: STANDARDS-REF, gated: false.
1---2name: winglet-design3description: Use when you must size a winglet as a wingtip device for induced-drag reduction on a fixed-wing aircraft: compute the effective span extension and the effective aspect ratio from the winglet height fraction and the cant angle, estimate the improved span efficiency, the induced-drag factor and the induced-drag coefficient at a reference lift coefficient, the percent drag reduction, and the root bending moment penalty at the wing root, then size the winglet height by bisection to hit a target drag reduction. Produces the winglet height, the effective aspect ratio, the drag reduction and the bending penalty that gate the wingtip device trade. Trigger: winglet design, wingtip device, induced drag reduction, effective aspect ratio, span efficiency, cant angle, winglet height, root bending moment penalty.4license: Apache-2.05---67# Winglet Design (aerodynamics/wing-design/winglet-design)89Use when the task is the wingtip device trade for induced-drag reduction:10sizing the winglet height and cant from the reference wing geometry and11a target drag reduction, and weighing the drag gain against the root12bending moment penalty. This leaf implements the effective-span13extension model in pure Python, stdlib only. It pairs with14aerodynamics/wing-design/wing-planform-design for the reference15planform, and with vehicle-design/sizing/wing-planform-sizing and the16drag-polar leaves for the system context. The improved span efficiency17and bending penalty models are documented conceptual approximations for18a preliminary trade; a real winglet design needs a VLM/CFD pass and a19structural FEM pass.2021## Domain quick reference2223- Effective span extension: extension = K_HEIGHT * height_frac, with24 K_HEIGHT = 0.8 the documented fraction of the winglet height that acts25 as span extension. height_frac is the winglet height over the local26 semi-span.27- Cant weighting: cant_factor = cos(cant_deg). A vertical winglet28 (cant 0) keeps the full effect; a flat tip (cant 90) loses it.29- Extended span and effective aspect ratio: b_eff = b * (1 + 2 *30 cant_factor * K_HEIGHT * height_frac) adds both tips, and31 AR_eff = b_eff^2 / area.32- Improved span efficiency: e_eff = 1 - (1 - e_base) / (AR_eff / AR)33 with AR = span^2 / area. Documented approximation: the drag factor34 k = 1 / (pi * e * AR) shrinks with the effective-AR gain.35- Induced drag: k = 1 / (pi * e * AR) and cd_i = cl^2 * k at the36 reference lift coefficient.37- Drag reduction: reduction_pct = 100 * (1 - cd_i_wl / cd_i_base).38- Root bending penalty: penalty_pct = cant_factor * K_HEIGHT *39 height_frac * 100 * (1 + 0.5 * height_frac). Approximate scaling, the40 winglet load acts near the tip so the added root moment grows roughly41 with the height fraction.42- Sizing: size_winglet bisects height_frac in [0.01, 0.5] to a 0.1 pct43 reduction tolerance and returns the physical height44 height_m = height_frac * span / 2 (semi-span local reference).45- Units are SI: m, m^2, degrees.4647## Workflow48491. Take the reference wing geometry from the planform design: span,50 area, base span efficiency e_base, and the lift coefficient cl_ref51 for the drag check.522. Read off the winglet height fraction and cant, or the target53 reduction percent when sizing.543. Compute the span extension with effective_span_extension and the55 cant weighting with cant_factor.564. Get the effective aspect ratio with ar_eff and the improved span57 efficiency with e_winglet.585. Get the induced-drag factors with induced_drag_factor, then the59 drag coefficients with cd_i, and the gain with60 drag_reduction_pct.616. Check the structural side with root_bending_penalty_pct.627. To size the device, run size_winglet with the target reduction and63 inspect the returned height fraction, height, ar_eff, e_eff, cd_i,64 reduction_pct and bending_penalty_pct.658. Confirm the deterministic checks with the contract test66 scripts/test_winglet_design.py.6768## Worked example6970Wing: span 30 m, area 100 m^2 (AR 9), e_base 0.80, cl_ref 0.5. Direct71case height_frac 0.12, cant 0 deg, taper 0.35.7273- Extension: 0.8 * 0.12 = 0.096; cant factor 1.0.74- Extended span: 30 * (1 + 2 * 1.0 * 0.096) = 35.76 m; AR_eff =75 35.76^2 / 100 = 12.788.76- Span efficiency: e_eff = 1 - 0.2 / (12.788 / 9) = 0.85924.77- Drag factors: k_base = 1 / (pi * 0.8 * 9) = 0.044210; k_wl = 1 / (pi *78 0.85924 * 12.788) = 0.028969.79- Drag coefficients: cd_i base = 0.25 * 0.044210 = 0.011052; cd_i wl =80 0.25 * 0.028969 = 0.007242.81- Reduction: 100 * (1 - 0.007242 / 0.011052) = 34.47 pct.82- Bending penalty: 1.0 * 0.8 * 0.12 * 100 * (1 + 0.06) = 10.18 pct.83- Sizing case: size_winglet(30, 100, 0.8, 25, 0.5) returns height_frac84 0.0784, height_m 1.176 m, ar_eff 11.40, e_eff 0.8421, reduction_pct85 25.00 within the 0.1 pct tolerance, bending_penalty_pct 6.52.8687## Verification8889- Confirm ar_eff(30, 100, 0.12, 0.0) returns 12.788 within 0.01.90- Confirm e_winglet(0.8, 0.12, 0.0) returns 0.85924 within 1e-4.91- Confirm induced_drag_factor(0.8, 9.0) returns 0.044210 within 1e-692 and the winglet factor matches 1 / (pi * e_eff * AR_eff).93- Confirm cd_i base 0.011052 and the drag reduction 34.47 pct against94 the worked example band (34.43 within 0.05).95- Confirm root_bending_penalty_pct(0.12, 0.0) returns 10.18 within96 0.05 and drops to zero for a flat tip at 90 deg cant.97- Confirm size_winglet with target 25 pct returns a height fraction in98 [0.05, 0.12] and a reduction within 0.1 pct of the target.99- Confirm every non-positive span, area, lift coefficient, span100 efficiency outside (0, 1], height fraction outside [0, 0.6], cant101 outside [-90, 90] degrees, taper outside (0, 1] and target reduction102 outside (0, 100) raises ValueError.103- Run the contract test offline: python3104 scripts/test_winglet_design.py (31 tests, deterministic).105106## Related leaves107108- aerodynamics/wing-design/wing-planform-design: the reference planform109 geometry and spanwise loading the winglet sizing starts from.110- vehicle-design/sizing/wing-planform-sizing: vehicle-level wing area111 sizing context.112- aerodynamics/drag-polars/drag-polar and113 aerodynamics/drag-polars/parasite-drag: the full polar the induced114 term feeds into.115- aerodynamics/cfd/vortex-lattice-method: the higher-fidelity follow-on116 for the spanwise loading with the winglet fitted.117- structures/fem/calculix-linear: the structural follow-on for the root118 bending check.119120## Pitfalls121122- Sizing the winglet against the cruise drag polar without a reference123 lift coefficient: cd_i scales as cl^2, so the 34.47 pct reduction in124 the worked example is only valid at cl_ref = 0.5 - report the125 reduction with the lift coefficient it was computed at.126- Counting the full winglet height as span: only K_HEIGHT = 0.8 of the127 height acts as span extension, and only the cant-weighted part128 (cant_factor = cos(cant_deg)) contributes, so a canted or flat tip129 gains less effective span than its physical height suggests.130- Trading drag reduction without the bending check: the winglet that131 cuts induced drag 34.47 pct also adds 10.18 pct root bending moment132 in the worked example - the tip-device trade must weigh133 root_bending_penalty_pct against the drag gain.134- Treating the approximate models as a final design: the e_eff135 improvement and bending-penalty relations are documented conceptual136 approximations for a preliminary trade; a real winglet needs the VLM137 or CFD pass and the structural FEM pass named in the related leaves.138- Feeding non-physical geometry: span, area and lift coefficient must be139 positive, span efficiency in (0, 1], height fraction in [0, 0.6],140 cant in [-90, 90] deg, taper in (0, 1] and target reduction in141 (0, 100) - everything else raises ValueError.142- Confusing the sizing reference: size_winglet bisects the height143 fraction on the local semi-span reference and returns the physical144 height as height_frac * span / 2, so the returned height_m belongs to145 the semi-span local definition, not the full span.146147## Behavior contract (gate 3)148149Run the deterministic contract test (stdlib unittest, offline):150151 python3 scripts/test_winglet_design.py152153The test covers the worked example contract (AR_eff 12.788, e_eff1540.85924, k_base 0.044210, drag reduction 34.47 pct, bending penalty15510.18 pct), the cant weighting bounds, the effective-aspect-ratio156identity, the sizing bisection contract and its monotonicity, the157height from the semi-span reference, and ValueError rejection of every158non-physical input.159160## Compliance161162- Standards referenced, not reproduced: NACA TR-824 is the classic163 induced-drag and airfoil-data basis and FAR 25 the structural and164 airworthiness context; both are cited by name only with the model165 relations stated as standard engineering methodology, summary-only166 per standards-map.yaml.167- The e_eff improvement and bending-penalty models are documented168 conceptual approximations for a preliminary trade.169- compliance: STANDARDS-REF, gated: false.