Skip to content

correct_aoa defaults to false, so the solver runs as LL-3/4 and loses 24-59% of the induced drag #318

Description

@1-Bort-1

correct_aoa defaults to false (src/solver.jl:178, src/settings.jl:203), so by default one velocity — the 3/4-chord control-point one — both reads the polars and turns the resulting force. Gaunaa, Li & Pirrung, From thin airfoil theory to finite wings: consistent implementation of Lifting Line-based models, TORQUE 2026, J. Phys. Conf. Ser. 3224 042030 (OpenSourceAWE/Internal Papers/Gaunaa_2026.pdf) calls that implementation LL-3/4 and measures what it costs.

The rule is TAT3, boxed, p. 4:

The flow direction that determines the lift and drag force directions in 2D UTAT is the undisturbed relative flow direction evaluated at the quarter-chord point.

with TAT2 (p. 4) putting the magnitude at the 3/4-chord point, so the two points do different jobs. Footnote 2, p. 4, on using one point for both:

Within the LL framework, this error vanishes only for straight wings with elliptic planform and very high aspect ratios.

What it costs

Against a VLM reference at α = 10°, inviscid polars (C_l = 2πα, C_d = 0), 120 spanwise sections. e_Osw,Blade is the Oswald efficiency from the on-blade forces — i.e. induced drag:

case LL-3/4 C_L LL-3/4 e_Osw,Blade
straight elliptic, AR 20 −0.46 % −23.64 %
straight elliptic, AR 4 −6.72 % −58.81 %
swept + anhedral elliptic (10 % sweep, 25 % anhedral) +7.02 % −8.73 %

(Table 1 p. 8, Table 2 p. 9.) Lift survives; induced drag does not. p. 7:

e_{Osw,Blade} is significantly underestimated by LL-3/4 (-59%) and LL-Ranneberg (-38%), whereas LL-1/4 and LL-Gaunaa, which both use the local conditions at the 1/4 chord point for the local force directions, remain within 1% of the VLM reference.

A kite is the low-aspect-ratio, curved case, not the straight high-AR one the footnote exempts.

The machinery is already here

correct_aoa=true is exactly TAT2 + TAT3: alpha_dist from the VSM AIC at control_point (3/4 chord, src/wing_geometry.jl:220) reads the polars, and alpha_corrected from update_effective_angle_of_attack! (src/body_aerodynamics.jl:516-546) at aero_center (1/4 chord, src/wing_geometry.jl:219) is used for nothing but panel_force_directions (src/solver.jl:406-408). It is covered by test/body_aerodynamics/test_body_aerodynamics.jl:322,330.

One detail to settle with it rather than after it: update_effective_angle_of_attack! builds that second matrix by calling the assembler with LLT, and evaluation_point_on_bound is a global flag, not a diagonal test (src/panel.jl:679-686), so every panel's bound filament is zeroed for every evaluation point. The paper asks for something narrower — Eq. (2), p. 5, subtracts only

the induced velocity from an infinitely long (2D) vortex line with the same strength and direction as the sectional 3D bound vortex

i.e. the section's own 2D substitute, which is what calculate_velocity_induced_bound_2D! already does on the VSM diagonal (src/body_aerodynamics.jl:450-454). Dropping every panel's bound contribution is a stronger removal than "undisturbed" in TAT3 means.

What I would do

Work out whether correct_aoa should default to true, and fix the aero-centre velocity to Eq. (2) rather than whole-matrix LLT if so. It changes every existing result, so it is a decision rather than a fix, and it wants a case with a known answer — the paper's straight elliptic AR 4 wing against C_l = 2πα is reproducible here and would be a good one.

data/TUDELFT_V3_KITE/vsm_settings_coarse.yaml also carries correct_aoa twice, commented at line 60 and live at line 85; worth collapsing to one whichever way this lands.

Found while checking #273 against this paper. Related: #272, #317.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions