Skip to content

Commit 4a6a371

Browse files
committed
Update tests for recent changes
1 parent a971574 commit 4a6a371

7 files changed

Lines changed: 141 additions & 70 deletions

File tree

test/bench.jl

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ using VortexStepMethod: calculate_AIC_matrices!, gamma_loop!, calculate_results,
1414
using Test
1515
using LinearAlgebra
1616

17+
# Check Julia version for known allocation issues
18+
const IS_JULIA_1_12_OR_NEWER = VERSION >= v"1.12"
19+
1720
@testset "Function Allocation Tests" begin
1821
# Define wing parameters
1922
n_panels = 20 # Number of panels
@@ -85,7 +88,11 @@ using LinearAlgebra
8588
for frac in core_radius_fractions
8689
@testset "Model $model Core Radius Fraction $frac" begin
8790
result = @benchmark calculate_AIC_matrices!($body_aero, $model, $frac, $va_norm_array, $va_unit_array) samples=1 evals=1
88-
@test result.allocs 30
91+
if IS_JULIA_1_12_OR_NEWER
92+
@test_broken result.allocs 30
93+
else
94+
@test result.allocs 30
95+
end
8996
@info "Model: $(model) \t Core radius fraction: $(frac) \t Allocations: $(result.allocs) \t Memory: $(result.memory)"
9097
end
9198
end
@@ -134,11 +141,11 @@ using LinearAlgebra
134141
solver = Solver(body_aero;
135142
aerodynamic_model_type=model
136143
)
137-
solver.sol._va_array .= va_array
138-
solver.sol._chord_array .= chord_array
139-
solver.sol._x_airf_array .= x_airf_array
140-
solver.sol._y_airf_array .= y_airf_array
141-
solver.sol._z_airf_array .= z_airf_array
144+
solver.sol._va_dist .= va_array
145+
solver.sol._chord_dist .= chord_array
146+
solver.sol._x_airf_dist .= x_airf_array
147+
solver.sol._y_airf_dist .= y_airf_array
148+
solver.sol._z_airf_dist .= z_airf_array
142149
result = @benchmark gamma_loop!(
143150
$solver,
144151
$body_aero,
@@ -203,17 +210,33 @@ using LinearAlgebra
203210

204211
@testset "Allocation Tests for solve() and solve!()" begin
205212
result = @benchmark solve_base!($solver, $body_aero, nothing) samples=1 evals=1 # 51 allocations
206-
@test result.allocs <= 55
213+
if IS_JULIA_1_12_OR_NEWER
214+
@test_broken result.allocs <= 55
215+
else
216+
@test result.allocs <= 55
217+
end
207218
# time Python: 32.0 ms Ryzen 7950x
208219
# time Julia: 0.45 ms Ryzen 7950x
209220
result = @benchmark sol = solve!($solver, $body_aero, nothing) samples=1 evals=1 # 85 allocations
210-
@test result.allocs <= 89
221+
if IS_JULIA_1_12_OR_NEWER
222+
@test_broken result.allocs <= 89
223+
else
224+
@test result.allocs <= 89
225+
end
211226

212227
# Step 5: Solve using both methods
213228
result = @benchmark solve_base!($nonlin_solver, $body_aero, nothing) samples=1 evals=1 # 51 allocations
214-
@test result.allocs <= 55
229+
if IS_JULIA_1_12_OR_NEWER
230+
@test_broken result.allocs <= 55
231+
else
232+
@test result.allocs <= 55
233+
end
215234
result = @benchmark sol = solve!($nonlin_solver, $body_aero, nothing) samples=1 evals=1 # 85 allocations
216-
@test result.allocs <= 89
235+
if IS_JULIA_1_12_OR_NEWER
236+
@test_broken result.allocs <= 89
237+
else
238+
@test result.allocs <= 89
239+
end
217240
end
218241
end
219242

test/body_aerodynamics/test_body_aerodynamics.jl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,6 @@ end
351351

352352
@test loop_sol.solver_status == FEASIBLE
353353

354-
@test sum(loop_sol.moment_dist) sum(loop_sol.unrefined_moment_dist)
355-
@test sum(nonlin_sol.moment_dist) sum(nonlin_sol.unrefined_moment_dist)
356-
357354
end
358355

359356
# Calculate forces using uncorrected alpha

test/body_aerodynamics/test_results.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ end
8585

8686
# Verify that linearization results match nonlinear results at operating point
8787
baseline_res = VortexStepMethod.solve!(solver, body_aero; log=false)
88-
baseline_res = [solver.sol.force; solver.sol.moment; solver.sol.unrefined_moment_dist]
89-
coeff_baseline_res = [solver.sol.force_coeffs; solver.sol.moment_coeffs; solver.sol.unrefined_moment_coeff_dist]
88+
baseline_res = [solver.sol.force; solver.sol.moment; solver.sol.moment_unrefined_dist]
89+
coeff_baseline_res = [solver.sol.force_coeffs; solver.sol.moment_coeffs; solver.sol.cm_unrefined_dist]
9090
@test baseline_res lin_res
9191
@test coeff_baseline_res coeff_lin_res
9292

@@ -142,8 +142,8 @@ end
142142

143143
# Get nonlinear solution
144144
nonlin_res = VortexStepMethod.solve!(solver, body_aero, nothing; log=false)
145-
nonlin_res = [solver.sol.force; solver.sol.moment; solver.sol.unrefined_moment_dist]
146-
coeff_nonlin_res = [solver.sol.force_coeffs; solver.sol.moment_coeffs; solver.sol.unrefined_moment_coeff_dist]
145+
nonlin_res = [solver.sol.force; solver.sol.moment; solver.sol.moment_unrefined_dist]
146+
coeff_nonlin_res = [solver.sol.force_coeffs; solver.sol.moment_coeffs; solver.sol.cm_unrefined_dist]
147147
@test nonlin_res baseline_res
148148
@test coeff_nonlin_res baseline_res
149149

@@ -250,7 +250,7 @@ end
250250

251251
# Get baseline results
252252
baseline_res = VortexStepMethod.solve!(solver, body_aero; log=false)
253-
baseline_res = [solver.sol.force; solver.sol.moment; solver.sol.unrefined_moment_dist]
253+
baseline_res = [solver.sol.force; solver.sol.moment; solver.sol.moment_unrefined_dist]
254254

255255
# Should match the linearization result
256256
@test baseline_res lin_res_combo
@@ -277,7 +277,7 @@ end
277277

278278
# Get nonlinear solution with perturbation
279279
nonlin_res = VortexStepMethod.solve!(solver, body_aero; log=false)
280-
nonlin_res = [solver.sol.force; solver.sol.moment; solver.sol.unrefined_moment_dist]
280+
nonlin_res = [solver.sol.force; solver.sol.moment; solver.sol.moment_unrefined_dist]
281281

282282
# Compute linearized prediction using our specialized Jacobian
283283
lin_prediction = lin_res_combo + jac_combo * perturbation

test/ram_geometry/test_kite_geometry.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ using Serialization
195195
original_te_point = copy(body_aero.panels[i].TE_point_1)
196196

197197
# Apply deformation with non-zero angles
198-
theta_dist = fill(deg2rad(30.0), wing.n_unrefined_sections) # 30 degrees twist for all sections
199-
delta_dist = fill(deg2rad(5.0), wing.n_unrefined_sections) # 5 degrees trailing edge deflection for all sections
198+
theta_dist = fill(deg2rad(30.0), wing.n_panels) # 30 degrees twist for all panels
199+
delta_dist = fill(deg2rad(5.0), wing.n_panels) # 5 degrees TE deflection for all panels
200200

201201
VortexStepMethod.deform!(wing, theta_dist, delta_dist)
202202
VortexStepMethod.reinit!(body_aero)

test/runtests.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ end
1616
function should_run_test(test_path::String)
1717
isempty(test_patterns) && return true
1818
for pattern in test_patterns
19-
# Match directory (e.g., "solver") or specific file (e.g., "test_group_coefficients")
19+
# Match directory (e.g., "solver") or specific file (e.g., "test_unrefined_dist")
2020
if occursin(pattern, test_path)
2121
return true
2222
end
@@ -45,7 +45,7 @@ end::Bool
4545
should_run_test("ram_geometry/test_kite_geometry.jl") && include("ram_geometry/test_kite_geometry.jl")
4646
should_run_test("settings/test_settings.jl") && include("settings/test_settings.jl")
4747
should_run_test("solver/test_solver.jl") && include("solver/test_solver.jl")
48-
should_run_test("solver/test_group_coefficients.jl") && include("solver/test_group_coefficients.jl")
48+
should_run_test("solver/test_unrefined_dist.jl") && include("solver/test_unrefined_dist.jl")
4949
should_run_test("VortexStepMethod/test_VortexStepMethod.jl") && include("VortexStepMethod/test_VortexStepMethod.jl")
5050
should_run_test("wake/test_wake.jl") && include("wake/test_wake.jl")
5151
should_run_test("wing_geometry/test_wing_geometry.jl") && include("wing_geometry/test_wing_geometry.jl")

test/wing_geometry/test_wing_geometry.jl

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ end
341341
span = 10.0
342342

343343
wing = Wing(n_panels; spanwise_distribution=LINEAR)
344-
# 3 sections = 2 unrefined panels
344+
# 3 sections
345345
add_section!(wing, [0.0, span/2, 0.0], [1.0, span/2, 0.0], INVISCID)
346346
add_section!(wing, [0.0, 0.0, 0.0], [1.0, 0.0, 0.0], INVISCID)
347347
add_section!(wing, [0.0, -span/2, 0.0], [1.0, -span/2, 0.0], INVISCID)
@@ -350,8 +350,8 @@ end
350350

351351
@test length(wing.refined_panel_mapping) == n_panels
352352

353-
# Manually verify each refined panel is mapped to its closest unrefined panel
354-
n_unrefined_panels = length(wing.unrefined_sections) - 1
353+
# Manually verify each refined panel is mapped to its closest unrefined section
354+
n_unrefined_sections = length(wing.unrefined_sections)
355355
for refined_panel_idx in 1:n_panels
356356
# Calculate refined panel center
357357
le_mid = (wing.refined_sections[refined_panel_idx].LE_point +
@@ -360,20 +360,18 @@ end
360360
wing.refined_sections[refined_panel_idx+1].TE_point) / 2
361361
refined_center = (le_mid + te_mid) / 2
362362

363-
# Find closest unrefined panel manually
363+
# Find closest unrefined section manually
364364
min_dist = Inf
365365
closest_idx = 1
366-
for unrefined_panel_idx in 1:n_unrefined_panels
367-
le_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].LE_point +
368-
wing.unrefined_sections[unrefined_panel_idx+1].LE_point) / 2
369-
te_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].TE_point +
370-
wing.unrefined_sections[unrefined_panel_idx+1].TE_point) / 2
371-
unrefined_center = (le_mid_unref + te_mid_unref) / 2
366+
for unrefined_section_idx in 1:n_unrefined_sections
367+
le_point = wing.unrefined_sections[unrefined_section_idx].LE_point
368+
te_point = wing.unrefined_sections[unrefined_section_idx].TE_point
369+
unrefined_center = (le_point + te_point) / 2
372370

373371
dist = norm(refined_center - unrefined_center)
374372
if dist < min_dist
375373
min_dist = dist
376-
closest_idx = unrefined_panel_idx
374+
closest_idx = unrefined_section_idx
377375
end
378376
end
379377

@@ -387,7 +385,7 @@ end
387385
span = 20.0
388386

389387
wing = Wing(n_panels; spanwise_distribution=COSINE)
390-
# 4 sections = 3 unrefined panels
388+
# 4 sections
391389
add_section!(wing, [0.0, span/2, 0.0], [1.0, span/2, 0.0], INVISCID)
392390
add_section!(wing, [0.0, span/6, 0.0], [1.0, span/6, 0.0], INVISCID)
393391
add_section!(wing, [0.0, -span/6, 0.0], [1.0, -span/6, 0.0], INVISCID)
@@ -397,8 +395,8 @@ end
397395

398396
@test length(wing.refined_panel_mapping) == n_panels
399397

400-
# Verify each panel is mapped to its closest unrefined panel
401-
n_unrefined_panels = length(wing.unrefined_sections) - 1
398+
# Verify each panel is mapped to its closest unrefined section
399+
n_unrefined_sections = length(wing.unrefined_sections)
402400
for refined_panel_idx in 1:n_panels
403401
# Calculate refined panel center
404402
le_mid = (wing.refined_sections[refined_panel_idx].LE_point +
@@ -407,20 +405,18 @@ end
407405
wing.refined_sections[refined_panel_idx+1].TE_point) / 2
408406
refined_center = (le_mid + te_mid) / 2
409407

410-
# Find closest unrefined panel manually
408+
# Find closest unrefined section manually
411409
min_dist = Inf
412410
closest_idx = 1
413-
for unrefined_panel_idx in 1:n_unrefined_panels
414-
le_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].LE_point +
415-
wing.unrefined_sections[unrefined_panel_idx+1].LE_point) / 2
416-
te_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].TE_point +
417-
wing.unrefined_sections[unrefined_panel_idx+1].TE_point) / 2
418-
unrefined_center = (le_mid_unref + te_mid_unref) / 2
411+
for unrefined_section_idx in 1:n_unrefined_sections
412+
le_point = wing.unrefined_sections[unrefined_section_idx].LE_point
413+
te_point = wing.unrefined_sections[unrefined_section_idx].TE_point
414+
unrefined_center = (le_point + te_point) / 2
419415

420416
dist = norm(refined_center - unrefined_center)
421417
if dist < min_dist
422418
min_dist = dist
423-
closest_idx = unrefined_panel_idx
419+
closest_idx = unrefined_section_idx
424420
end
425421
end
426422

@@ -433,7 +429,7 @@ end
433429
n_panels = 12
434430

435431
wing = Wing(n_panels; spanwise_distribution=SPLIT_PROVIDED)
436-
# 4 sections = 3 unrefined panels
432+
# 4 sections
437433
add_section!(wing, [0.0, 6.0, 0.0], [1.0, 6.0, 0.0], INVISCID)
438434
add_section!(wing, [0.0, 2.0, 0.0], [1.0, 2.0, 0.0], INVISCID)
439435
add_section!(wing, [0.0, -2.0, 0.0], [1.0, -2.0, 0.0], INVISCID)
@@ -443,8 +439,8 @@ end
443439

444440
@test length(wing.refined_panel_mapping) == n_panels
445441

446-
# Verify each panel is mapped to its closest unrefined panel
447-
n_unrefined_panels = length(wing.unrefined_sections) - 1
442+
# Verify each panel is mapped to its closest unrefined section
443+
n_unrefined_sections = length(wing.unrefined_sections)
448444
for refined_panel_idx in 1:n_panels
449445
# Calculate refined panel center
450446
le_mid = (wing.refined_sections[refined_panel_idx].LE_point +
@@ -453,20 +449,18 @@ end
453449
wing.refined_sections[refined_panel_idx+1].TE_point) / 2
454450
refined_center = (le_mid + te_mid) / 2
455451

456-
# Find closest unrefined panel manually
452+
# Find closest unrefined section manually
457453
min_dist = Inf
458454
closest_idx = 1
459-
for unrefined_panel_idx in 1:n_unrefined_panels
460-
le_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].LE_point +
461-
wing.unrefined_sections[unrefined_panel_idx+1].LE_point) / 2
462-
te_mid_unref = (wing.unrefined_sections[unrefined_panel_idx].TE_point +
463-
wing.unrefined_sections[unrefined_panel_idx+1].TE_point) / 2
464-
unrefined_center = (le_mid_unref + te_mid_unref) / 2
455+
for unrefined_section_idx in 1:n_unrefined_sections
456+
le_point = wing.unrefined_sections[unrefined_section_idx].LE_point
457+
te_point = wing.unrefined_sections[unrefined_section_idx].TE_point
458+
unrefined_center = (le_point + te_point) / 2
465459

466460
dist = norm(refined_center - unrefined_center)
467461
if dist < min_dist
468462
min_dist = dist
469-
closest_idx = unrefined_panel_idx
463+
closest_idx = unrefined_section_idx
470464
end
471465
end
472466

0 commit comments

Comments
 (0)