Source code for RCAIDE.Library.Mission.Common.Initialize.differentials_altitude

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

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------

# package imports 
import numpy as np

# ----------------------------------------------------------------------------------------------------------------------
#  Update Differentials Altitude
# ---------------------------------------------------------------------------------------------------------------------- 
[docs] def differentials_altitude(segment): """ Initializes the differential altitude for mission segment time calculations Parameters ---------- segment : Segment The mission segment being analyzed Notes ----- This function calculates the time differentials based on altitude changes in the mission segment. It uses the vertical component of velocity and position to determine appropriate time steps for integration. The function performs the following steps: 1. Extracts control points and integration operators 2. Calculates total altitude change 3. Determines time step based on vertical velocity 4. Rescales time operators 5. Updates segment time vector **Required Segment State Variables** state.numerics.dimensionless: - integrate : array Integration operator matrix - control_points : array Normalized time points state.conditions.frames.inertial: - position_vector : array Vehicle position in inertial frame [m] - velocity_vector : array Vehicle velocity in inertial frame [m/s] - time : array Segment time vector [s] **Major Assumptions** * Continuous vertical velocity * Well-defined altitude change * No singularities in vertical velocity Returns ------- None Updates segment state directly See Also -------- RCAIDE.Framework.Mission.Segments """ # unpack t = segment.state.numerics.dimensionless.control_points I = segment.state.numerics.dimensionless.integrate r = segment.state.conditions.frames.inertial.position_vector v = segment.state.conditions.frames.inertial.velocity_vector dz = r[-1,2] - r[0,2] vz = v[:,2,None] # maintain column array # get overall time step dt = np.dot( I[-1,:] * dz , 1/ vz[:,0] ) # rescale operators t = t * dt # pack t_initial = segment.state.conditions.frames.inertial.time[0,0] segment.state.conditions.frames.inertial.time[:,0] = t_initial + t[:,0] return