Summary
In panel_axes (src/panel_aerodynamics.jl:58-69) the panel's spanwise axis, its
width and its bound filament all come from the quarter-chord step, but the
normal comes from the leading-edge step:
span_vec = panel_span_vector(le_1, te_1, le_2, te_2) # 0.75·le + 0.25·te
width = smooth_norm(span_vec)
x_airf = chord_vec ./ smooth_norm(chord_vec)
y_airf = orient .* (span_vec ./ width)
z_cross = cross(x_airf, le_1 .- le_2) # <-- leading edge, not quarter chord
z_airf = orient .* (z_cross ./ smooth_norm(z_cross))
panel.bound_point_1/2 and filaments[1] lie on the quarter-chord line, so
z_airf is not perpendicular to the vortex line the circulation sits on. The
effective angle of attack is taken against that normal
(src/solver.jl:717-726, atan(v·z_airf, v·x_airf)), so a rotation of z_airf
about x_airf feeds straight into every panel's alpha.
Size of the discrepancy
Measured on a 44-panel ram-air kite (SK100, strongly raked tip), settled under
load. Second column is the angle between z_airf and normalize(x_airf × (bound_point_2 − bound_point_1)):
panel LE step vs QC step z_airf vs QC-plane normal sweep(QC)
1 6.97° 5.58° 48.8°
4 7.68° 13.44° 57.2°
5 10.26° 7.21° 12.4°
20 1.71° 1.40° 1.5°
41 7.83° 13.82° -57.2°
44 6.98° 5.71° -48.7°
Near zero at the root, ~7° over most of the span, up to 13.8° on the outer
panels. It grows with taper, so it is largest exactly where the chord is
shortest and the panels are most sensitive.
Suggested fix
Take both from the same span reference:
z_cross = cross(x_airf, -span_vec)
If the leading-edge step is deliberate — it tracks the physical LE, arguably the
better reference for a cambered section's plane — then the bound filament
arguably ought to follow it too. Either way, mixing the two references inside one
frame looks unintended.
Related, possibly by design
Two things in the same area that only bite at high sweep, raised for the record
rather than as defects:
y_airf is not orthogonalised against x_airf. On the tip panels above,
x_airf · y_airf is 0.84, so projecting the velocity onto x_airf does not
remove the spanwise component, and the three axes do not decompose a vector
(the sum of the squared projections exceeds |v|²).
- Sections are looked up in their 2D polars at
atan(v·z_airf, v·x_airf) with
the full local dynamic pressure. Classical swept-wing theory feeds a section
the flow normal to the quarter-chord line with q scaled by cos²Λ. At the
8-13° of sweep a conventional wing carries this is negligible; on panels at
57° it is not.
Both are irrelevant on a conventional planform and become significant on a
strongly raked kite tip, where a single straight bound filament can span a bay
whose quarter-chord line is genuinely curving.
Version
main @ v4.3.1, src/panel_aerodynamics.jl:58-69.
Summary
In
panel_axes(src/panel_aerodynamics.jl:58-69) the panel's spanwise axis, itswidth and its bound filament all come from the quarter-chord step, but the
normal comes from the leading-edge step:
panel.bound_point_1/2andfilaments[1]lie on the quarter-chord line, soz_airfis not perpendicular to the vortex line the circulation sits on. Theeffective angle of attack is taken against that normal
(
src/solver.jl:717-726,atan(v·z_airf, v·x_airf)), so a rotation ofz_airfabout
x_airffeeds straight into every panel's alpha.Size of the discrepancy
Measured on a 44-panel ram-air kite (SK100, strongly raked tip), settled under
load. Second column is the angle between
z_airfandnormalize(x_airf × (bound_point_2 − bound_point_1)):Near zero at the root, ~7° over most of the span, up to 13.8° on the outer
panels. It grows with taper, so it is largest exactly where the chord is
shortest and the panels are most sensitive.
Suggested fix
Take both from the same span reference:
If the leading-edge step is deliberate — it tracks the physical LE, arguably the
better reference for a cambered section's plane — then the bound filament
arguably ought to follow it too. Either way, mixing the two references inside one
frame looks unintended.
Related, possibly by design
Two things in the same area that only bite at high sweep, raised for the record
rather than as defects:
y_airfis not orthogonalised againstx_airf. On the tip panels above,x_airf · y_airfis 0.84, so projecting the velocity ontox_airfdoes notremove the spanwise component, and the three axes do not decompose a vector
(the sum of the squared projections exceeds
|v|²).atan(v·z_airf, v·x_airf)withthe full local dynamic pressure. Classical swept-wing theory feeds a section
the flow normal to the quarter-chord line with
qscaled bycos²Λ. At the8-13° of sweep a conventional wing carries this is negligible; on panels at
57° it is not.
Both are irrelevant on a conventional planform and become significant on a
strongly raked kite tip, where a single straight bound filament can span a bay
whose quarter-chord line is genuinely curving.
Version
main@ v4.3.1,src/panel_aerodynamics.jl:58-69.