@@ -104,6 +104,39 @@ function Base.setproperty!(obj::BodyAerodynamics, sym::Symbol, val)
104104 end
105105end
106106
107+ function update_pos! (body_aero:: BodyAerodynamics , le_pos:: AbstractMatrix , te_pos:: AbstractMatrix )
108+ panels = Panel[]
109+ for wing in body_aero. wings
110+ section_list = refine_aerodynamic_mesh (wing)
111+ n_panels_per_wing = length (section_list) - 1
112+
113+ # Calculate panel properties
114+ panel_props = calculate_panel_properties (
115+ section_list,
116+ n_panels_per_wing,
117+ aero_center_location,
118+ control_point_location
119+ )
120+
121+ # Create panels
122+ for panel in body_aero. panels
123+
124+ update_pos! (
125+ panel,
126+ section_list[i],
127+ section_list[i+ 1 ],
128+ panel_props. aero_centers[i],
129+ panel_props. control_points[i],
130+ panel_props. bound_points_1[i],
131+ panel_props. bound_points_2[i],
132+ panel_props. x_airf[i],
133+ panel_props. y_airf[i],
134+ panel_props. z_airf[i]
135+ )
136+ end
137+ end
138+ end
139+
107140"""
108141 PanelProperties
109142
@@ -650,20 +683,13 @@ Set velocity array and update wake filaments.
650683- `va`: Either a velocity vector or a list of velocity vectors
651684- `omega`: Turn rate around x y and z axis
652685"""
653- function set_va! (body_aero:: BodyAerodynamics , va, omega= zeros (MVec3))
654- omega = MVec3 (omega)
655-
656- # Add length check for va
657- if va isa Vector{Float64} && length (va) != 3 && length (va) != length (body_aero. panels)
658- throw (ArgumentError (" va must be length 3 or match number of panels" ))
659- end
686+ function set_va! (body_aero:: BodyAerodynamics , va:: VelVector , omega= zeros (MVec3))
687+ length (va) != 3 && throw (ArgumentError (" va must be length 3" ))
660688
661689 # Calculate va_distribution based on input type
662- va_distribution = if length (va) == 3 && all (omega .== 0.0 )
690+ va_distribution = if all (omega .== 0.0 )
663691 repeat (reshape (va, 1 , 3 ), length (body_aero. panels))
664- elseif length (va) == length (body_aero. panels)
665- va
666- elseif ! all (omega .== 0.0 ) && length (va) == 3
692+ elseif ! all (omega .== 0.0 )
667693 va_dist = zeros (length (body_aero. panels), 3 )
668694
669695 for wing in body_aero. wings
@@ -677,8 +703,6 @@ function set_va!(body_aero::BodyAerodynamics, va, omega=zeros(MVec3))
677703 end
678704 end
679705 va_dist
680- else
681- throw (ArgumentError (" Invalid va distribution: length(va)=$(length (va)) ≠ n_panels=$(length (body_aero. panels)) " ))
682706 end
683707
684708 # Update panel velocities
@@ -691,3 +715,16 @@ function set_va!(body_aero::BodyAerodynamics, va, omega=zeros(MVec3))
691715 body_aero. _va = va
692716 return nothing
693717end
718+
719+ function set_va! (body_aero:: BodyAerodynamics , va_distribution:: Vector{VelVector} , omega= zeros (MVec3))
720+ length (va) != length (body_aero. panels) && throw (ArgumentError (" Length of va distribution should be equal to number of panels." ))
721+
722+ for (i, panel) in enumerate (body_aero. panels)
723+ panel. va = va_distribution[i]
724+ end
725+
726+ # Update wake elements
727+ body_aero. panels = frozen_wake (va_distribution, body_aero. panels)
728+ body_aero. _va = va
729+ return nothing
730+ end
0 commit comments