@@ -7,20 +7,24 @@ Struct for storing the solution of the [solve!](@ref) function. Must contain all
77# Attributes
88- aero_force::MVec3: Aerodynamic force vector in KB reference frame [N]
99- aero_moments::MVec3: Aerodynamic moments [Mx, My, Mz] around the reference point [Nm]
10- - force_coefficients::MVec3: Aerodynamic force coefficients [CL, CD, CS] [-]
10+ - force_coefficients::MVec3: Aerodynamic force coefficients [CFx, CFy, CFz] [-]
11+ - moment_coefficients::MVec3: Aerodynamic moment coefficients [CMx, CMy, CMz] [-]
1112- moment_distribution::Vector{Float64}: Pitching moments around the spanwise vector of each panel. [Nm]
13+ - moment_coefficient_distribution::Vector{Float64}: Pitching moment coefficient around the spanwise vector of each panel. [-]
1214- solver_status::SolverStatus: enum, see [SolverStatus](@ref)
1315"""
1416mutable struct VSMSolution
1517 aero_force:: MVec3
1618 aero_moments:: MVec3
1719 force_coefficients:: MVec3
20+ moment_coefficients:: MVec3
1821 moment_distribution:: Vector{Float64}
22+ moment_coefficient_distribution:: Vector{Float64}
1923 solver_status:: SolverStatus
2024end
2125
2226function VSMSolution ()
23- VSMSolution (zeros (MVec3), zeros (MVec3), zeros (MVec3), zeros (3 ), FAILURE)
27+ VSMSolution (zeros (MVec3), zeros (MVec3), zeros (MVec3), zeros (MVec3), zeros ( 3 ), zeros ( 3 ), FAILURE)
2428end
2529
2630"""
@@ -112,7 +116,9 @@ function solve!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribution=
112116 cm_array = zeros (n_panels)
113117 panel_width_array = zeros (n_panels)
114118 solver. sol. moment_distribution = zeros (n_panels)
119+ solver. sol. moment_coefficient_distribution = zeros (n_panels)
115120 moment_distribution = solver. sol. moment_distribution
121+ moment_coefficient_distribution = solver. sol. moment_coefficient_distribution
116122
117123 # Calculate coefficients for each panel
118124 for (i, panel) in enumerate (panels) # zero bytes
@@ -163,6 +169,9 @@ function solve!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribution=
163169 va = body_aero. va
164170 va_unit = va / va_mag
165171 q_inf = 0.5 * density * va_mag^ 2
172+
173+ # Calculate wing geometry properties
174+ projected_area = sum (wing -> calculate_projected_area (wing), body_aero. wings)
166175
167176 for (i, panel) in enumerate (panels) # 30625 bytes
168177
@@ -188,25 +197,25 @@ function solve!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribution=
188197 drag_induced_va = drag[i] * dir_drag_induced_va
189198 ftotal_induced_va = lift_induced_va + drag_induced_va
190199
191- # Calculate forces in prescribed wing frame
192- dir_lift_prescribed_va = cross (va, spanwise_direction)
193- dir_lift_prescribed_va = dir_lift_prescribed_va / norm (dir_lift_prescribed_va)
200+ # # Calculate forces in prescribed wing frame
201+ # dir_lift_prescribed_va = cross(va, spanwise_direction)
202+ # dir_lift_prescribed_va = dir_lift_prescribed_va / norm(dir_lift_prescribed_va)
194203
195- # Calculate force components
196- lift_prescribed_va = dot (lift_induced_va, dir_lift_prescribed_va) +
197- dot (drag_induced_va, dir_lift_prescribed_va)
198- drag_prescribed_va = dot (lift_induced_va, va_unit) +
199- dot (drag_induced_va, va_unit)
200- side_prescribed_va = dot (lift_induced_va, spanwise_direction) +
201- dot (drag_induced_va, spanwise_direction)
204+ # # Calculate force components
205+ # lift_prescribed_va = dot(lift_induced_va, dir_lift_prescribed_va) +
206+ # dot(drag_induced_va, dir_lift_prescribed_va)
207+ # drag_prescribed_va = dot(lift_induced_va, va_unit) +
208+ # dot(drag_induced_va, va_unit)
209+ # side_prescribed_va = dot(lift_induced_va, spanwise_direction) +
210+ # dot(drag_induced_va, spanwise_direction)
202211
203212 # Body frame forces
204213 f_body_3D[:,i] .= ftotal_induced_va .* panel. width
205214
206- # Update sums
207- lift_wing_3D_sum += lift_prescribed_va * panel. width
208- drag_wing_3D_sum += drag_prescribed_va * panel. width
209- side_wing_3D_sum += side_prescribed_va * panel. width
215+ # # Update sums
216+ # lift_wing_3D_sum += lift_prescribed_va * panel.width
217+ # drag_wing_3D_sum += drag_prescribed_va * panel.width
218+ # side_wing_3D_sum += side_prescribed_va * panel.width
210219
211220 # Calculate the moments
212221 # (1) Panel aerodynamic center in body frame:
@@ -226,26 +235,22 @@ function solve!(solver::Solver, body_aero::BodyAerodynamics, gamma_distribution=
226235 # Calculate the moment distribution (moment on each panel)
227236 arm = (moment_frac - 0.25 ) * panel. chord
228237 moment_distribution[i] = dot (ftotal_induced_va, panel. z_airf) * arm
238+ moment_coefficient_distribution[i] = moment_distribution[i] ./ (q_inf * projected_area)
229239 end
230240
231- # Calculate wing geometry properties
232- projected_area = sum (wing -> calculate_projected_area (wing), body_aero. wings)
233-
234- Fx = sum (f_body_3D[1 ,:])
235- Fy = sum (f_body_3D[2 ,:])
236- Fz = sum (f_body_3D[3 ,:])
237- Mx = sum (m_body_3D[1 ,:])
238- My = sum (m_body_3D[2 ,:])
239- Mz = sum (m_body_3D[3 ,:])
240-
241- CL = lift_wing_3D_sum / (q_inf * projected_area)
242- CD = drag_wing_3D_sum / (q_inf * projected_area)
243- CS = side_wing_3D_sum / (q_inf * projected_area)
244-
245241 # update the result struct
246- solver. sol. aero_force .= MVec3 ([Fx, Fy, Fz])
247- solver. sol. aero_moments .= MVec3 ([Mx, My, Mz])
248- solver. sol. force_coefficients .= MVec3 ([CL, CD, CS])
242+ solver. sol. aero_force .= [
243+ sum (f_body_3D[1 ,:]),
244+ sum (f_body_3D[2 ,:]),
245+ sum (f_body_3D[3 ,:])
246+ ]
247+ solver. sol. aero_moments .= [
248+ sum (m_body_3D[1 ,:]),
249+ sum (m_body_3D[2 ,:]),
250+ sum (m_body_3D[3 ,:])
251+ ]
252+ solver. sol. force_coefficients .= solver. sol. aero_force ./ (q_inf * projected_area)
253+ solver. sol. moment_coefficients .= solver. sol. aero_moments ./ (q_inf * projected_area)
249254 if converged
250255 # TODO : Check if the result if feasible if converged
251256 solver. sol. solver_status = FEASIBLE
0 commit comments