Skip to content

Commit 4bd3e26

Browse files
committed
generate_polar_data() works now
1 parent ea8e5f7 commit 4bd3e26

File tree

2 files changed

+153
-152
lines changed

2 files changed

+153
-152
lines changed

examples/rectangular_wing.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,25 @@ println("Projected area = $(round(results_vsm["projected_area"], digits=4)) m²"
6565
# Step 7: Plot spanwise distributions
6666
y_coordinates = [panel.aerodynamic_center[2] for panel in wa.panels]
6767

68-
plot_distribution(
69-
[y_coordinates, y_coordinates],
70-
[results_vsm, results_llt],
71-
["VSM", "LLT"],
72-
title="Spanwise Distributions"
73-
)
74-
75-
# # Step 8: Plot polar curves
76-
# angle_range = range(0, 20, 20)
77-
# plot_polars(
78-
# [llt_solver, vsm_solver],
79-
# [wa, wa],
80-
# ["LLT", "VSM"],
81-
# angle_range=angle_range,
82-
# angle_type="angle_of_attack",
83-
# Umag=Umag,
84-
# title="Rectangular Wing Polars"
68+
# plot_distribution(
69+
# [y_coordinates, y_coordinates],
70+
# [results_vsm, results_llt],
71+
# ["VSM", "LLT"],
72+
# title="Spanwise Distributions"
8573
# )
8674

75+
# Step 8: Plot polar curves
76+
angle_range = range(0, 20, 20)
77+
plot_polars(
78+
[llt_solver, vsm_solver],
79+
[wa, wa],
80+
["LLT", "VSM"],
81+
angle_range=angle_range,
82+
angle_type="angle_of_attack",
83+
Umag=Umag,
84+
title="Rectangular Wing Polars"
85+
)
86+
8787
# Save plots if needed
8888
# savefig("geometry.pdf")
8989
# savefig("distributions.pdf")

src/plotting.jl

Lines changed: 136 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -390,155 +390,156 @@ function plot_distribution(y_coordinates_list, results_list, label_list;
390390
return fig
391391
end
392392

393-
# """
394-
# generate_polar_data(solver, wing_aero, angle_range; kwargs...)
393+
"""
394+
generate_polar_data(solver, wing_aero, angle_range; kwargs...)
395395
396-
# Generate polar data for aerodynamic analysis over a range of angles.
396+
Generate polar data for aerodynamic analysis over a range of angles.
397397
398-
# # Arguments
399-
# - `solver`: Aerodynamic solver object
400-
# - `wing_aero`: Wing aerodynamics object
401-
# - `angle_range`: Range of angles to analyze
402-
# - `angle_type`: Type of angle variation ("angle_of_attack" or "side_slip")
403-
# - `angle_of_attack`: Initial angle of attack in radians
404-
# - `side_slip`: Initial side slip angle in radians
405-
# - `yaw_rate`: Yaw rate
406-
# - `Umag`: Magnitude of velocity
407-
408-
# # Returns
409-
# - Tuple of polar data array and Reynolds number
410-
# """
411-
# function generate_polar_data(
412-
# solver,
413-
# wing_aero,
414-
# angle_range;
415-
# angle_type="angle_of_attack",
416-
# angle_of_attack=0.0,
417-
# side_slip=0.0,
418-
# yaw_rate=0.0,
419-
# Umag=10.0
420-
# )
421-
# n_panels = length(wing_aero.panels)
422-
# n_angles = length(angle_range)
398+
# Arguments
399+
- `solver`: Aerodynamic solver object
400+
- `wing_aero`: Wing aerodynamics object
401+
- `angle_range`: Range of angles to analyze
402+
- `angle_type`: Type of angle variation ("angle_of_attack" or "side_slip")
403+
- `angle_of_attack`: Initial angle of attack in radians
404+
- `side_slip`: Initial side slip angle in radians
405+
- `yaw_rate`: Yaw rate
406+
- `Umag`: Magnitude of velocity
407+
408+
# Returns
409+
- Tuple of polar data array and Reynolds number
410+
"""
411+
function generate_polar_data(
412+
solver,
413+
wing_aero,
414+
angle_range;
415+
angle_type="angle_of_attack",
416+
angle_of_attack=0.0,
417+
side_slip=0.0,
418+
yaw_rate=0.0,
419+
Umag=10.0
420+
)
421+
n_panels = length(wing_aero.panels)
422+
n_angles = length(angle_range)
423423

424-
# # Initialize arrays
425-
# cl = zeros(n_angles)
426-
# cd = zeros(n_angles)
427-
# cs = zeros(n_angles)
428-
# gamma_distribution = zeros(n_angles, n_panels)
429-
# cl_distribution = zeros(n_angles, n_panels)
430-
# cd_distribution = zeros(n_angles, n_panels)
431-
# cs_distribution = zeros(n_angles, n_panels)
432-
# reynolds_number = zeros(n_angles)
424+
# Initialize arrays
425+
cl = zeros(n_angles)
426+
cd = zeros(n_angles)
427+
cs = zeros(n_angles)
428+
gamma_distribution = zeros(n_angles, n_panels)
429+
cl_distribution = zeros(n_angles, n_panels)
430+
cd_distribution = zeros(n_angles, n_panels)
431+
cs_distribution = zeros(n_angles, n_panels)
432+
reynolds_number = zeros(n_angles)
433433

434-
# # Previous gamma for initialization
435-
# gamma = nothing
434+
# Previous gamma for initialization
435+
gamma = nothing
436436

437-
# for (i, angle_i) in enumerate(angle_range)
438-
# # Set angle based on type
439-
# if angle_type == "angle_of_attack"
440-
# α = deg2rad(angle_i)
441-
# β = side_slip
442-
# elseif angle_type == "side_slip"
443-
# α = angle_of_attack
444-
# β = deg2rad(angle_i)
445-
# else
446-
# throw(ArgumentError("angle_type must be 'angle_of_attack' or 'side_slip'"))
447-
# end
437+
for (i, angle_i) in enumerate(angle_range)
438+
# Set angle based on type
439+
if angle_type == "angle_of_attack"
440+
α = deg2rad(angle_i)
441+
β = side_slip
442+
elseif angle_type == raw"side_slip"
443+
α = angle_of_attack
444+
β = deg2rad(angle_i)
445+
else
446+
throw(ArgumentError("angle_type must be 'angle_of_attack' or 'side_slip'"))
447+
end
448448

449-
# # Update inflow conditions
450-
# set_va!(
451-
# wing_aero,
452-
# [
453-
# cos(α) * cos(β),
454-
# sin(β),
455-
# sin(α)
456-
# ] * Umag
457-
# )
449+
# Update inflow conditions
450+
set_va!(
451+
wing_aero,
452+
[
453+
cos(α) * cos(β),
454+
sin(β),
455+
sin(α)
456+
] * Umag
457+
)
458458

459-
# # Solve and store results
460-
# results = solve(solver, wing_aero, gamma_distribution[i, :])
459+
# Solve and store results
460+
results = solve(solver, wing_aero, gamma_distribution[i, :])
461461

462-
# cl[i] = results["cl"]
463-
# cd[i] = results["cd"]
464-
# cs[i] = results["cs"]
465-
# gamma_distribution[i,:] = results["gamma_distribution"]
466-
# cl_distribution[i,:] = results["cl_distribution"]
467-
# cd_distribution[i,:] = results["cd_distribution"]
468-
# cs_distribution[i,:] = results["cs_distribution"]
469-
# reynolds_number[i] = results["Rey"]
462+
cl[i] = results["cl"]
463+
cd[i] = results["cd"]
464+
cs[i] = results["cs"]
465+
gamma_distribution[i,:] = results["gamma_distribution"]
466+
cl_distribution[i,:] = results["cl_distribution"]
467+
cd_distribution[i,:] = results["cd_distribution"]
468+
cs_distribution[i,:] = results["cs_distribution"]
469+
reynolds_number[i] = results["Rey"]
470470

471-
# # Store gamma for next iteration
472-
# gamma = gamma_distribution[i,:]
473-
# end
471+
# Store gamma for next iteration
472+
gamma = gamma_distribution[i,:]
473+
end
474474

475-
# polar_data = [
476-
# angle_range,
477-
# cl,
478-
# cd,
479-
# cs,
480-
# gamma_distribution,
481-
# cl_distribution,
482-
# cd_distribution,
483-
# cs_distribution,
484-
# reynolds_number
485-
# ]
475+
polar_data = [
476+
angle_range,
477+
cl,
478+
cd,
479+
cs,
480+
gamma_distribution,
481+
cl_distribution,
482+
cd_distribution,
483+
cs_distribution,
484+
reynolds_number
485+
]
486486

487-
# return polar_data, reynolds_number[1]
488-
# end
487+
return polar_data, reynolds_number[1]
488+
end
489489

490-
# """
491-
# plot_polars(solver_list, wing_aero_list, label_list; kwargs...)
490+
"""
491+
plot_polars(solver_list, wing_aero_list, label_list; kwargs...)
492492
493-
# Plot polar data comparing different solvers and configurations.
493+
Plot polar data comparing different solvers and configurations.
494494
495-
# # Arguments
496-
# - `solver_list`: List of aerodynamic solvers
497-
# - `wing_aero_list`: List of wing aerodynamics objects
498-
# - `label_list`: List of labels for each configuration
499-
# - `literature_path_list`: Optional paths to literature data files
500-
# - `angle_range`: Range of angles to analyze
501-
# - Additional keyword arguments for plot customization
502-
# """
503-
# function plot_polars(
504-
# solver_list,
505-
# wing_aero_list,
506-
# label_list;
507-
# literature_path_list=String[],
508-
# angle_range=range(0, 20, 2),
509-
# angle_type="angle_of_attack",
510-
# angle_of_attack=0.0,
511-
# side_slip=0.0,
512-
# yaw_rate=0.0,
513-
# Umag=10.0,
514-
# title="polar",
515-
# data_type=".pdf",
516-
# save_path=nothing,
517-
# is_save=true,
518-
# is_show=true
519-
# )
520-
# # Validate inputs
521-
# total_cases = length(wing_aero_list) + length(literature_path_list)
522-
# if total_cases != length(label_list) || length(solver_list) != length(wing_aero_list)
523-
# throw(ArgumentError("Mismatch in number of solvers ($(length(solver_list))), " *
524-
# "cases ($total_cases), and labels ($(length(label_list)))"))
525-
# end
495+
# Arguments
496+
- `solver_list`: List of aerodynamic solvers
497+
- `wing_aero_list`: List of wing aerodynamics objects
498+
- `label_list`: List of labels for each configuration
499+
- `literature_path_list`: Optional paths to literature data files
500+
- `angle_range`: Range of angles to analyze
501+
- Additional keyword arguments for plot customization
502+
"""
503+
function plot_polars(
504+
solver_list,
505+
wing_aero_list,
506+
label_list;
507+
literature_path_list=String[],
508+
angle_range=range(0, 20, 2),
509+
angle_type="angle_of_attack",
510+
angle_of_attack=0.0,
511+
side_slip=0.0,
512+
yaw_rate=0.0,
513+
Umag=10.0,
514+
title="polar",
515+
data_type=".pdf",
516+
save_path=nothing,
517+
is_save=true,
518+
is_show=true
519+
)
520+
# Validate inputs
521+
total_cases = length(wing_aero_list) + length(literature_path_list)
522+
if total_cases != length(label_list) || length(solver_list) != length(wing_aero_list)
523+
throw(ArgumentError("Mismatch in number of solvers ($(length(solver_list))), " *
524+
"cases ($total_cases), and labels ($(length(label_list)))"))
525+
end
526526

527-
# # Generate polar data
528-
# polar_data_list = []
529-
# for (i, (solver, wing_aero)) in enumerate(zip(solver_list, wing_aero_list))
530-
# polar_data, rey = generate_polar_data(
531-
# solver, wing_aero, angle_range;
532-
# angle_type=angle_type,
533-
# angle_of_attack=angle_of_attack,
534-
# side_slip=side_slip,
535-
# yaw_rate=yaw_rate,
536-
# Umag=Umag
537-
# )
538-
# push!(polar_data_list, polar_data)
539-
# # Update label with Reynolds number
540-
# label_list[i] = "$(label_list[i]) Re = $(round(Int, rey*1e-5))e5"
541-
# end
527+
# Generate polar data
528+
polar_data_list = []
529+
for (i, (solver, wing_aero)) in enumerate(zip(solver_list, wing_aero_list))
530+
polar_data, rey = generate_polar_data(
531+
solver, wing_aero, angle_range;
532+
angle_type=angle_type,
533+
angle_of_attack=angle_of_attack,
534+
side_slip=side_slip,
535+
yaw_rate=yaw_rate,
536+
Umag=Umag
537+
)
538+
push!(polar_data_list, polar_data)
539+
# Update label with Reynolds number
540+
label_list[i] = "$(label_list[i]) Re = $(round(Int, rey*1e-5))e5"
541+
end
542+
println(label_list)
542543

543544
# # Load literature data if provided
544545
# if !isempty(literature_path_list)
@@ -634,4 +635,4 @@ end
634635
# end
635636

636637
# return res
637-
# end
638+
end

0 commit comments

Comments
 (0)