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

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

# ----------------------------------------------------------------------------------------------------------------------  
#  IMPORT 
# ----------------------------------------------------------------------------------------------------------------------  
# RCAIDE imports  
from RCAIDE.Library.Mission.Common.Update.atmosphere import atmosphere

# pacakge imports 
import numpy as np

# ---------------------------------------------------------------------------------------------------------------------- 
#  Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------  
[docs] def initialize_conditions(segment): """ Initializes conditions for linear Mach descent at fixed rate Parameters ---------- segment : Segment The mission segment being analyzed - descent_rate : float Rate of descent [m/s] - mach_number_start : float Initial Mach number [-] - mach_number_end : float Final Mach number [-] - altitude_start : float Initial altitude [m] - altitude_end : float Final altitude [m] - sideslip_angle : float Aircraft sideslip angle [rad] - state: numerics.dimensionless.control_points : array Discretization points [-] conditions : Data State conditions container initials : Data, optional Initial conditions from previous segment Returns ------- None Notes ----- This function sets up the initial conditions for a descent segment with linearly varying Mach number and constant descent rate. The true airspeed varies with both Mach number and local speed of sound. Updates segment with velocity vector, position vector, and altitude. **Calculation Process** 1. Get atmospheric properties for speed of sound 2. Discretize altitude profile 3. Calculate Mach number variation: M = M0 + (Mf - M0)*t where: - M0 is initial Mach number - Mf is final Mach number - t is normalized time/distance 4. Calculate true airspeed: V = M * a where: - M is local Mach number - a is local speed of sound 5. Decompose velocity using: - Fixed descent rate - Sideslip angle - Computed true airspeed **Major Assumptions** * Linear Mach number variation * Constant descent rate * Standard atmosphere model * Small angle approximations * Quasi-steady flight See Also -------- RCAIDE.Framework.Mission.Segments RCAIDE.Library.Mission.Common.Update.atmosphere """ # unpack descent_rate = segment.descent_rate M0 = segment.mach_number_start Mf = segment.mach_number_end alt0 = segment.altitude_start altf = segment.altitude_end beta = segment.sideslip_angle t_nondim = segment.state.numerics.dimensionless.control_points conditions = segment.state.conditions # Update freestream to get speed of sound atmosphere(segment) a = conditions.freestream.speed_of_sound # 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] # check for initial velocity vector if M0 is None: if not segment.state.initials: raise AttributeError('initial mach number not set') M0 = np.linalg.norm(segment.state.initials.conditions.frames.inertial.velocity_vector[-1,:])/a[0,:] # discretize on altitude alt = t_nondim * (altf-alt0) + alt0 conditions.freestream.altitude[:,0] = alt[:,0] # positive altitude # process velocity vector mach_number = (Mf-M0)*t_nondim + M0 v_xy_mag = mach_number * a v_z = descent_rate # z points down v_xy = np.sqrt( v_xy_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[:,0] conditions.frames.inertial.velocity_vector[:,1] = v_y[:,0] 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 t