Source code for RCAIDE.Library.Mission.Common.Update.aerodynamics

# RCAIDE/Library/Missions/Common/Update/aerodynamics.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  Update Aerodynamics
# ----------------------------------------------------------------------------------------------------------------------
[docs] def aerodynamics(segment): """ Gets aerodynamics conditions Assumptions: +X out nose +Y out starboard wing +Z down Inputs: segment.analyses.aerodynamics_model [Function] aerodynamics_model.settings.maximum_lift_coefficient [unitless] aerodynamics_model.vehicle.reference_area [meter^2] segment.state.conditions.freestream.dynamic_pressure [pascals] Outputs: conditions.aerodynamics.coefficients.lift.total [unitless] conditions.aerodynamics.coefficients.drag.total [unitless] conditions.frames.wind.force_vector [newtons] conditions.frames.wind.drag_force_vector [newtons] Properties Used: N/A """ # unpack conditions = segment.state.conditions aerodynamics_model = segment.analyses.aerodynamics q = segment.state.conditions.freestream.dynamic_pressure Sref = aerodynamics_model.vehicle.reference_area CLmax = aerodynamics_model.settings.maximum_lift_coefficient MAC = aerodynamics_model.vehicle.wings.main_wing.chords.mean_aerodynamic span = aerodynamics_model.vehicle.wings.main_wing.spans.projected # call aerodynamics model _ = aerodynamics_model(segment) # Forces CL = conditions.aerodynamics.coefficients.lift.total CD = conditions.aerodynamics.coefficients.drag.total CY = conditions.static_stability.coefficients.Y CL[q<=0.0] = 0.0 CD[q<=0.0] = 0.0 CL[CL>CLmax] = CLmax CL[CL< -CLmax] = -CLmax # dimensionalize F = segment.state.ones_row(3) * 0.0 F[:,2] = ( -CL * q * Sref )[:,0] F[:,1] = ( -CY * q * Sref )[:,0] F[:,0] = ( -CD * q * Sref )[:,0] # rewrite aerodynamic CL and CD conditions.aerodynamics.coefficients.lift.total = CL conditions.aerodynamics.coefficients.drag.total = CD conditions.frames.wind.force_vector[:,:] = F[:,:] # ----------------------------------------------------------------- # Moments # ----------------------------------------------------------------- C_M = conditions.static_stability.coefficients.M C_L = conditions.static_stability.coefficients.L C_N = conditions.static_stability.coefficients.N C_M[q<=0.0] = 0.0 # dimensionalize M = segment.state.ones_row(3) * 0.0 M[:,0] = (C_L[:,0] * q[:,0] * Sref * span) M[:,1] = (C_M[:,0] * q[:,0] * Sref * MAC) M[:,2] = (C_N[:,0] * q[:,0] * Sref * span) # pack conditions conditions.frames.wind.moment_vector[:,:] = M[:,:] return