@@ -22,9 +22,9 @@ Main structure for calculating aerodynamic properties of bodies. Use the constru
2222- `y::MVector{P, Float64}` = MVector{P,Float64}(zeros(P))
2323- `cache::Vector{PreallocationTools.LazyBufferCache{typeof(identity), typeof(identity)}}` = [LazyBufferCache() for _ in 1:15]
2424"""
25- @with_kw mutable struct BodyAerodynamics{P}
25+ @with_kw mutable struct BodyAerodynamics{P,W <: AbstractWing }
2626 panels:: Vector{Panel}
27- wings:: Vector{Wing }
27+ wings:: Vector{W }
2828 _va:: MVec3 = zeros (MVec3)
2929 has_distributed_va:: Bool = false
3030 omega:: MVec3 = zeros (MVec3)
@@ -110,7 +110,7 @@ function BodyAerodynamics(
110110 end
111111 end
112112
113- body_aero = BodyAerodynamics {length(panels)} (; panels, wings)
113+ body_aero = BodyAerodynamics {length(panels),T } (; panels, wings)
114114 reinit! (body_aero; va, omega)
115115 return body_aero
116116end
@@ -694,11 +694,11 @@ end
694694
695695"""
696696 calculate_results(body_aero::BodyAerodynamics, gamma_new,
697- density, aerodynamic_model_type::Model,
697+ density,
698698 core_radius_fraction, mu,
699699 alpha_dist, v_a_dist,
700700 chord_array, x_airf_array,
701- y_airf_array, z_airf_array,
701+ z_airf_array,
702702 va_array, va_norm_array,
703703 va_unit_array, panels::Vector{Panel},
704704 is_only_f_and_gamma_output::Bool)
@@ -713,14 +713,12 @@ function calculate_results(
713713 gamma_new,
714714 reference_point,
715715 density,
716- aerodynamic_model_type:: Model ,
717716 core_radius_fraction,
718717 mu,
719718 alpha_dist,
720719 v_a_dist,
721720 chord_array,
722721 x_airf_array,
723- y_airf_array,
724722 z_airf_array,
725723 va_array,
726724 va_norm_array,
@@ -1041,23 +1039,22 @@ Set velocity array and update wake filaments.
10411039- `omega::VelVector`: Turn rate vector around x y and z axis [rad/s]
10421040"""
10431041function set_va! (body_aero:: BodyAerodynamics , va:: AbstractVector , omega= zeros (MVec3))
1044- # Calculate va_distribution based on input type
1045- va_distribution = if all (omega .== 0.0 )
1046- repeat ( reshape (va, 1 , 3 ), length (body_aero . panels))
1047- elseif ! all (omega .== 0.0 )
1048- va_dist = zeros ( length (body_aero . panels), 3 )
1049-
1042+ n_panels = length (body_aero . panels)
1043+ va_distribution = zeros (n_panels, 3 )
1044+
1045+ if all (iszero, omega )
1046+ va_distribution . = repeat ( reshape (va, 1 , 3 ), n_panels )
1047+ else
10501048 for wing in body_aero. wings
10511049 # Get spanwise positions
10521050 spanwise_positions = [panel. control_point for panel in body_aero. panels]
10531051
10541052 # Calculate velocities for each panel
10551053 for i in 1 : wing. n_panels
10561054 omega_va = - omega × spanwise_positions[i]
1057- va_dist [i, :] .= omega_va .+ va
1055+ va_distribution [i, :] .= omega_va .+ va
10581056 end
10591057 end
1060- va_dist
10611058 end
10621059
10631060 # Update panel velocities
@@ -1072,7 +1069,7 @@ function set_va!(body_aero::BodyAerodynamics, va::AbstractVector, omega=zeros(MV
10721069 return nothing
10731070end
10741071
1075- function set_va! (body_aero:: BodyAerodynamics , va_distribution:: AbstractMatrix , omega = zeros (MVec3) )
1072+ function set_va! (body_aero:: BodyAerodynamics , va_distribution:: AbstractMatrix )
10761073 size (va_distribution, 1 ) != length (body_aero. panels) &&
10771074 throw (ArgumentError (" Number of rows in va distribution should be equal to number of panels." ))
10781075
0 commit comments