@@ -390,155 +390,156 @@ function plot_distribution(y_coordinates_list, results_list, label_list;
390390 return fig
391391end
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)
634635# end
635636
636637# return res
637- # end
638+ end
0 commit comments