Skip to content

Commit 9f67197

Browse files
committed
Fixed multi-wing bug
1 parent 9d86d40 commit 9f67197

2 files changed

Lines changed: 34 additions & 7 deletions

File tree

src/body_aerodynamics.jl

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,15 +1045,16 @@ function set_va!(body_aero::BodyAerodynamics, va::AbstractVector, omega=zeros(MV
10451045
if all(iszero, omega)
10461046
va_distribution .= repeat(reshape(va, 1, 3), n_panels)
10471047
else
1048+
idx = 1
10481049
for wing in body_aero.wings
1049-
# Get spanwise positions
1050-
spanwise_positions = [panel.control_point for panel in body_aero.panels]
1051-
1052-
# Calculate velocities for each panel
1053-
for i in 1:wing.n_panels
1054-
omega_va = -omega × spanwise_positions[i]
1055-
va_distribution[i, :] .= omega_va .+ va
1050+
panel_end = idx + wing.n_panels - 1
1051+
1052+
# Calculate velocities for each panel in this wing slice
1053+
for j in idx:panel_end
1054+
omega_va = -omega × body_aero.panels[j].control_point
1055+
va_distribution[j, :] .= omega_va .+ va
10561056
end
1057+
idx = panel_end + 1
10571058
end
10581059
end
10591060

test/body_aerodynamics/test_body_aerodynamics.jl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,3 +469,29 @@ end
469469
@test !body_aero.has_distributed_va
470470
@test body_aero.va [11.0, 0.0, 0.0]
471471
end
472+
473+
@testset "set_va! with omega on multi-wing body" begin
474+
wing1 = Wing(2; spanwise_distribution=UNCHANGED)
475+
add_section!(wing1, [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], INVISCID)
476+
add_section!(wing1, [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], INVISCID)
477+
add_section!(wing1, [0.0, 2.0, 0.0], [1.0, 2.0, 0.0], INVISCID)
478+
479+
wing2 = Wing(2; spanwise_distribution=UNCHANGED)
480+
add_section!(wing2, [0.0, 10.0, 0.0], [1.0, 10.0, 0.0], INVISCID)
481+
add_section!(wing2, [0.0, 11.0, 0.0], [1.0, 11.0, 0.0], INVISCID)
482+
add_section!(wing2, [0.0, 12.0, 0.0], [1.0, 12.0, 0.0], INVISCID)
483+
484+
refine!(wing1)
485+
refine!(wing2)
486+
body_aero = BodyAerodynamics([wing1, wing2])
487+
488+
va = [10.0, 0.0, 0.0]
489+
omega = [0.0, 0.0, 1.0]
490+
set_va!(body_aero, va, omega)
491+
492+
for panel in body_aero.panels
493+
expected_va = va .+ (-omega × panel.control_point)
494+
@test panel.va expected_va atol=1e-12
495+
end
496+
@test !body_aero.has_distributed_va
497+
end

0 commit comments

Comments
 (0)