calc_forces! (src/solver.jl, the unrefined aggregation block) sets x_airf_unrefined_dist, y_airf_unrefined_dist and z_airf_unrefined_dist to the plain mean over a section's panels of each panel's unit vector. On a curved or twisted section that mean is shorter than 1 and the three are no longer orthogonal; they are also unweighted, next to coefficients that #402 makes area-weighted. va_vec_unrefined_dist is a plain mean too.
Nothing in the repo reads these four fields (grep, 2026-09-30), so no result moves today.
What I would do: build the section frame from the area-weighted mean of y_airf and z_airf, Gram-Schmidt them and take x_airf = y × z (the same handedness as the panel frame), and area-weight va_vec. Whether an unrefined section frame should instead be the unrefined geometry's own frame (from its leading/trailing edge points) is the decision this needs.
Found in review of #402.
calc_forces!(src/solver.jl, the unrefined aggregation block) setsx_airf_unrefined_dist,y_airf_unrefined_distandz_airf_unrefined_distto the plain mean over a section's panels of each panel's unit vector. On a curved or twisted section that mean is shorter than 1 and the three are no longer orthogonal; they are also unweighted, next to coefficients that #402 makes area-weighted.va_vec_unrefined_distis a plain mean too.Nothing in the repo reads these four fields (grep, 2026-09-30), so no result moves today.
What I would do: build the section frame from the area-weighted mean of
y_airfandz_airf, Gram-Schmidt them and takex_airf = y × z(the same handedness as the panel frame), and area-weightva_vec. Whether an unrefined section frame should instead be the unrefined geometry's own frame (from its leading/trailing edge points) is the decision this needs.Found in review of #402.