Skip to content

POLAR_MATRICES tables are written with %.4f, so Cd carries no deflection dependence at small deltas #362

Description

@1-Bort-1

Summary

write_polar_matrix_csv (src/airfoil_aero/airfoil_solvers/common.jl:62) writes every coefficient with @sprintf("%.4f"). On a kite section Cd ≈ 0.009, so the quantum is about 1% of the value, and the drag response to a trailing-edge deflection disappears into it: a 1° flap moves Cd by roughly 2e-5, which rounds away entirely.

Measured on data/ram_air_kite/ram_air_kite_body.obj through obj_to_yaml (NeuralFoil, Re=1e6, alpha_range=-1:1:1, delta_range=-1:1:1, all in degrees). Two consecutive delta blocks of one section's table:

alpha,delta,Cl,Cd,Cm
-1.0000,0.0000,-0.3019,0.0093,0.0605
 0.0000,0.0000,-0.1878,0.0089,0.0614
 1.0000,0.0000,-0.0717,0.0088,0.0619
-1.0000,1.0000,-0.2640,0.0093,0.0502
 0.0000,1.0000,-0.1495,0.0089,0.0511
 1.0000,1.0000,-0.0330,0.0088,0.0515

Cl moves by 0.038 and Cm by 0.010; the Cd column is identical, digit for digit. Through Wing + BodyAerodynamics that makes the panel's ∂Cd/∂delta exactly 0.0 over ±1° — maximum(abs, cd_interp.(alphas, deg2rad(1)) .- cd_interp.(alphas, 0.0)) == 0.0 on the outboard panels. Where a panel does show a difference it is a single unit in the last written decimal (1.0e-4), picked up from one bracketing section rounding to 0.0099 against the other's 0.0098.

At the default delta_range=-3:3:3 the deflection spans a few quanta rather than none, so the derivative is not zero there — it is quantised to about 1e-4 steps.

Why it matters

Any POLAR_MATRICES wing built through obj_to_yaml carries no usable drag response to control-surface deflection at small angles, and a coarsely quantised one at larger angles. Anything differentiating or trimming on deflection reads that as zero drag sensitivity.

It also made a test assert a coin flip: test/plotting/test_plotting.jl's "POLAR_MATRICES panel is evaluated at the passed delta" guarded the deflection with @test deflected[2] != stored[2] on Cd. That held on main only through the one-quantum rounding above; #350 re-slices the fixture, the two bracketing sections then round identically, and the assertion went red. #350 moves the guard onto Cl, which carries the deflection with margin to spare, but the underlying table stays as coarse as it is.

What I would do

Write the coefficient columns with enough digits to carry the solver's own resolution — %.6f, or %g to drop the padding — and regenerate. The same writer covers Cl and Cm, which lose less but lose it the same way. Existing generated tables would have to be regenerated to benefit; nothing errors if they are not.

Activity

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions