Source code for RCAIDE.Library.Mission.Common.Update.stability
# RCAIDE/Library/Missions/Common/Update/stability.py
#
#
# Created: Jul 2023, M. Clarke
import numpy as np
import RCAIDE
# ----------------------------------------------------------------------------------------------------------------------
# Stability
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def stability(segment):
""" Updates the stability of the aircraft
Assumptions:
If stability model is defined, overwrite the aerodynamics calculations
Inputs:
None
Outputs:
None
Properties Used:
N/A
"""
# unpack
stability_model = segment.analyses.stability
conditions = segment.state.conditions
if stability_model != None:
# check to see if results have already been calculated using the Aero analyses
if ((type(segment.analyses.stability) == RCAIDE.Framework.Analyses.Stability.Vortex_Lattice_Method) and (type(segment.analyses.aerodynamics) == RCAIDE.Framework.Analyses.Aerodynamics.Vortex_Lattice_Method)) or \
((type(segment.analyses.stability) == RCAIDE.Framework.Analyses.Stability.Athena_Vortex_Lattice) and (type(segment.analyses.aerodynamics) == RCAIDE.Framework.Analyses.Aerodynamics.Athena_Vortex_Lattice)):
pass
else:
Sref = stability_model.vehicle.reference_area
MAC = stability_model.vehicle.wings.main_wing.chords.mean_aerodynamic
span = stability_model.vehicle.wings.main_wing.spans.projected
q = segment.state.conditions.freestream.dynamic_pressure
CLmax = stability_model.settings.maximum_lift_coefficient
_ = stability_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
# -----------------------------------------------------------------
CM = conditions.static_stability.coefficients.M
CL = conditions.static_stability.coefficients.L
CN = conditions.static_stability.coefficients.N
CM[q<=0.0] = 0.0
# dimensionalize
M = segment.state.ones_row(3) * 0.0
M[:,0] = (CL[:,0] * q[:,0] * Sref * span)
M[:,1] = (CM[:,0] * q[:,0] * Sref * MAC)
M[:,2] = (CN[:,0] * q[:,0] * Sref * span)
# pack conditions
conditions.frames.wind.moment_vector[:,:] = M[:,:]
return