Source code for RCAIDE.Library.Mission.Segments.Descent.Constant_CAS_Constant_Rate

# RCAIDE/Library/Missions/Segments/Descent/Constant_CAS_Constant_Rate.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------  
#  IMPORT 
# ---------------------------------------------------------------------------------------------------------------------- 
# RCAIDE imports 
import RCAIDE
from RCAIDE.Framework.Core import Units

# package imports 
import numpy as np

# ----------------------------------------------------------------------------------------------------------------------  
#  Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------  
[docs] def initialize_conditions(segment): """ Initializes conditions for constant calibrated airspeed descent at fixed rate Parameters ---------- segment : Segment The mission segment being analyzed - descent_rate : float Rate of descent [m/s] - calibrated_air_speed : float Calibrated airspeed to maintain [m/s] - altitude_start : float Initial altitude [m] - altitude_end : float Final altitude [m] - sideslip_angle : float Aircraft sideslip angle [rad] - temperature_deviation : float Temperature offset from standard day [K] - state: numerics.dimensionless.control_points : array Discretization points [-] conditions : Data State conditions container - analyses: atmosphere : Model Atmospheric model for property calculations Returns ------- None Notes ----- This function sets up the initial conditions for a descent segment with constant calibrated airspeed (CAS) and constant descent rate. It handles the conversion between CAS and true airspeed accounting for pressure and density variations with altitude. Updates segment conditions directly with velocity_vector [m/s], altitude [m], and position_vector [m]. **Calculation Process** 1. Discretize altitude profile 2. Get atmospheric properties at each altitude 3. Convert CAS to true airspeed using: - Pressure ratio (δ) - Compressibility effects - Equivalent airspeed (EAS) conversion 4. Decompose velocity into components using: - Fixed descent rate - Sideslip angle - Computed true airspeed **Major Assumptions** * Constant calibrated airspeed * Constant descent rate * Standard atmosphere model with temperature deviation * Small angle approximations * Quasi-steady flight See Also -------- RCAIDE.Framework.Mission.Segments RCAIDE.Library.Mission.Common.Update.atmosphere """ # unpack descent_rate = segment.descent_rate cas = segment.calibrated_air_speed alt0 = segment.altitude_start altf = segment.altitude_end beta = segment.sideslip_angle t_nondim = segment.state.numerics.dimensionless.control_points conditions = segment.state.conditions # check for initial altitude if alt0 is None: if not segment.state.initials: raise AttributeError('initial altitude not set') alt0 = -1.0 * segment.state.initials.conditions.frames.inertial.position_vector[-1,2] # discretize on altitude alt = t_nondim * (altf-alt0) + alt0 # determine airspeed from calibrated airspeed RCAIDE.Library.Mission.Common.Update.atmosphere(segment) # get density for airspeed alt_data = segment.analyses.atmosphere.compute_values(alt,segment.temperature_deviation) density = alt_data.density[:,0] pressure = alt_data.pressure[:,0] MSL_data = segment.analyses.atmosphere.compute_values(0.0,segment.temperature_deviation) pressure0 = MSL_data.pressure[0] if cas is None: if not segment.state.initials: raise AttributeError('initial equivalent airspeed not set') air_speed = np.linalg.norm(segment.state.initials.conditions.frames.inertial.velocity_vector[-1,:]) else: kcas = cas / Units.knots delta = pressure / pressure0 mach = 2.236*((((1+4.575e-7*kcas**2)**3.5-1)/delta + 1)**0.2857 - 1)**0.5 qc = pressure * ((1+0.2*mach**2)**3.5 - 1) eas = cas * (pressure/pressure0)**0.5*(((qc/pressure+1)**0.286-1)/((qc/pressure0+1)**0.286-1))**0.5 air_speed = eas/np.sqrt(density/MSL_data.density[0]) # process velocity vector v_mag = air_speed v_z = descent_rate # z points down v_xy = np.sqrt( v_mag**2 - v_z**2 ) v_x = np.cos(beta)*v_xy v_y = np.sin(beta)*v_xy # pack conditions conditions.frames.inertial.velocity_vector[:,0] = v_x conditions.frames.inertial.velocity_vector[:,1] = v_y conditions.frames.inertial.velocity_vector[:,2] = v_z conditions.frames.inertial.position_vector[:,2] = -alt[:,0] # z points down conditions.freestream.altitude[:,0] = alt[:,0] # positive altitude in this context