1+ backend = length (ARGS ) >= 1 ? ARGS [1 ] : " Makie"
2+ if backend == " Makie"
3+ using CairoMakie
4+ elseif backend == " ControlPlots"
5+ using ControlPlots
6+ else
7+ error (" Unknown plotting backend: $backend . Use \" Makie\" or \" ControlPlots\" ." )
8+ end
9+
110using VortexStepMethod
2- using CairoMakie
311using Test
412
513# Resolve repo data directory for ram air kite assets
@@ -29,7 +37,9 @@ if !@isdefined ram_wing
2937 foil_src = joinpath (_ram_data_dir, " ram_air_kite_foil.dat" )
3038 cp (body_src, body_path; force= true )
3139 cp (foil_src, foil_path; force= true )
32- ram_wing = ObjWing (body_path, foil_path; alpha_range= deg2rad .(- 1 : 1 ), delta_range= deg2rad .(- 1 : 1 ))
40+ ram_wing = ObjWing (body_path, foil_path;
41+ alpha_range= deg2rad .(- 1 : 1 ),
42+ delta_range= deg2rad .(- 1 : 1 ))
3343end
3444
3545function create_body_aero ()
@@ -38,33 +48,31 @@ function create_body_aero()
3848 span = 20.0 # Wing span [m]
3949 chord = 1.0 # Chord length [m]
4050 v_a = 20.0 # Magnitude of inflow velocity [m/s]
41- density = 1.225 # Air density [kg/m³]
4251 alpha_deg = 30.0 # Angle of attack [degrees]
4352 alpha = deg2rad (alpha_deg)
4453
4554 # Step 2: Create wing geometry with linear panel distribution
4655 wing = Wing (n_panels, spanwise_distribution= LINEAR)
4756
48- # Add wing sections - defining only tip sections with inviscid airfoil model
49- add_section! (wing,
50- [0.0 , span/ 2 , 0.0 ], # Left tip LE
51- [chord, span/ 2 , 0.0 ], # Left tip TE
57+ # Add wing sections
58+ add_section! (wing,
59+ [0.0 , span/ 2 , 0.0 ],
60+ [chord, span/ 2 , 0.0 ],
5261 INVISCID)
53- add_section! (wing,
54- [0.0 , - span/ 2 , 0.0 ], # Right tip LE
55- [chord, - span/ 2 , 0.0 ], # Right tip TE
62+ add_section! (wing,
63+ [0.0 , - span/ 2 , 0.0 ],
64+ [chord, - span/ 2 , 0.0 ],
5665 INVISCID)
5766
5867 # Step 3: Initialize aerodynamics
5968 refine! (wing)
6069 body_aero = BodyAerodynamics ([wing])
61- # Set inflow conditions
6270 vel_app = [cos (alpha), 0.0 , sin (alpha)] .* v_a
6371 set_va! (body_aero, vel_app)
6472 body_aero
6573end
6674
67- @testset " Plotting" begin
75+ @testset " Plotting ( $backend ) " begin
6876 save_dir = tempdir ()
6977 body_aero = create_body_aero ()
7078
7583 save_path= save_dir,
7684 is_save= true ,
7785 is_show= false )
78- @test fig isa Figure
79- @test isfile (joinpath (save_dir, " Rectangular_wing_geometry_angled_view.png" ))
80- safe_rm (joinpath (save_dir, " Rectangular_wing_geometry_angled_view.png" ))
81- @test isfile (joinpath (save_dir, " Rectangular_wing_geometry_front_view.png" ))
82- safe_rm (joinpath (save_dir, " Rectangular_wing_geometry_front_view.png" ))
83- @test isfile (joinpath (save_dir, " Rectangular_wing_geometry_side_view.png" ))
84- safe_rm (joinpath (save_dir, " Rectangular_wing_geometry_side_view.png" ))
85- @test isfile (joinpath (save_dir, " Rectangular_wing_geometry_top_view.png" ))
86- safe_rm (joinpath (save_dir, " Rectangular_wing_geometry_top_view.png" ))
86+ if backend == " Makie"
87+ @test fig isa Figure
88+ else
89+ @test fig != = nothing
90+ end
91+ @test isfile (joinpath (save_dir,
92+ " Rectangular_wing_geometry_angled_view.png" ))
93+ safe_rm (joinpath (save_dir,
94+ " Rectangular_wing_geometry_angled_view.png" ))
95+ @test isfile (joinpath (save_dir,
96+ " Rectangular_wing_geometry_front_view.png" ))
97+ safe_rm (joinpath (save_dir,
98+ " Rectangular_wing_geometry_front_view.png" ))
99+ @test isfile (joinpath (save_dir,
100+ " Rectangular_wing_geometry_side_view.png" ))
101+ safe_rm (joinpath (save_dir,
102+ " Rectangular_wing_geometry_side_view.png" ))
103+ @test isfile (joinpath (save_dir,
104+ " Rectangular_wing_geometry_top_view.png" ))
105+ safe_rm (joinpath (save_dir,
106+ " Rectangular_wing_geometry_top_view.png" ))
87107
88108 # Step 5: Initialize the solvers
89109 vsm_solver = Solver (body_aero; aerodynamic_model_type= VSM)
94114 results_llt = solve (llt_solver, body_aero)
95115
96116 # Step 7: Plot spanwise distributions
97- y_coordinates = [panel. aero_center[2 ] for panel in body_aero. panels]
117+ y_coordinates = [panel. aero_center[2 ]
118+ for panel in body_aero. panels]
98119
99120 fig = plot_distribution (
100121 [y_coordinates, y_coordinates],
@@ -103,10 +124,14 @@ end
103124 title= " Spanwise Distributions" ,
104125 is_show= false
105126 )
106- @test fig isa Figure
127+ if backend == " Makie"
128+ @test fig isa Figure
129+ else
130+ @test fig != = nothing
131+ end
107132
108133 # Step 8: Plot polar curves
109- v_a = 20.0 # Magnitude of inflow velocity [m/s]
134+ v_a = 20.0
110135 angle_range = range (0 , 20 , 20 )
111136 fig = plot_polars (
112137 [llt_solver, vsm_solver],
@@ -121,14 +146,21 @@ end
121146 is_save= true ,
122147 is_show= false
123148 )
124- @test fig isa Figure
149+ if backend == " Makie"
150+ @test fig isa Figure
151+ else
152+ @test fig != = nothing
153+ end
125154 @test isfile (joinpath (save_dir, " Rectangular_Wing_Polars.png" ))
126155 safe_rm (joinpath (save_dir, " Rectangular_Wing_Polars.png" ))
127156
128157 # Step 9: Test polar data plotting
129- # ram_wing is an ObjWing - no refine! needed
130158 body_aero = BodyAerodynamics ([ram_wing])
131159 fig = plot_polar_data (body_aero; is_show= false )
132- @test fig isa Figure
160+ if backend == " Makie"
161+ @test fig isa Figure
162+ else
163+ @test fig != = nothing
164+ end
133165end
134- nothing
166+ nothing
0 commit comments