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.
correct_aoadefaults tofalse(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/InternalPapers/Gaunaa_2026.pdf) calls that implementation LL-3/4 and measures what it costs.The rule is TAT3, boxed, p. 4:
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:
What it costs
Against a VLM reference at α = 10°, inviscid polars (
C_l = 2πα,C_d = 0), 120 spanwise sections.e_Osw,Bladeis the Oswald efficiency from the on-blade forces — i.e. induced drag:C_Le_Osw,Blade(Table 1 p. 8, Table 2 p. 9.) Lift survives; induced drag does not. p. 7:
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=trueis exactly TAT2 + TAT3:alpha_distfrom the VSM AIC atcontrol_point(3/4 chord,src/wing_geometry.jl:220) reads the polars, andalpha_correctedfromupdate_effective_angle_of_attack!(src/body_aerodynamics.jl:516-546) ataero_center(1/4 chord,src/wing_geometry.jl:219) is used for nothing butpanel_force_directions(src/solver.jl:406-408). It is covered bytest/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 withLLT, andevaluation_point_on_boundis 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 onlyi.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_aoashould default totrue, 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 againstC_l = 2παis reproducible here and would be a good one.data/TUDELFT_V3_KITE/vsm_settings_coarse.yamlalso carriescorrect_aoatwice, 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.