Source code for RCAIDE.Library.Mission.Segments.Single_Point.Set_Speed_Set_Throttle
# RCAIDE/Library/Missions/Segments/Single_Point/Set_Speed_Set_Throttle.py
#
#
# Created: Jul 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def initialize_conditions(segment):
"""
Initializes conditions for fixed speed and throttle analysis
Parameters
----------
segment : Segment
The mission segment being analyzed
- altitude : float
Flight altitude [m]
- air_speed : float
True airspeed [m/s]
- sideslip_angle : float
Aircraft sideslip angle [rad]
- linear_acceleration_z : float
Acceleration in z-direction [m/s^2]
- roll_rate : float
Aircraft roll rate [rad/s]
- pitch_rate : float
Aircraft pitch rate [rad/s]
- yaw_rate : float
Aircraft yaw rate [rad/s]
- state:
unknowns:
acceleration : array
X-direction acceleration [m/s^2]
conditions : Data
State conditions container
initials : Data, optional
Initial conditions from previous segment
Returns
-------
None
Updates segment conditions directly:
- conditions.freestream.altitude [m]
- conditions.frames.inertial.position_vector [m]
- conditions.frames.inertial.velocity_vector [m/s]
- conditions.frames.inertial.acceleration_vector [m/s^2]
- conditions.static_stability.roll_rate [rad/s]
- conditions.static_stability.pitch_rate [rad/s]
- conditions.static_stability.yaw_rate [rad/s]
Notes
-----
This function sets up the initial conditions for a single point analysis with
fixed speed and throttle setting. The x-acceleration is treated as an unknown
to be solved for during the analysis.
**Calculation Process**
1. Check initial conditions
2. Decompose velocity into components using sideslip angle:
- v_x = V * cos(β)
- v_y = V * sin(β)
where:
- V is true airspeed
- β is sideslip angle
3. Set position and altitude
4. Initialize acceleration vector with unknown x-component
5. Set angular rates
**Major Assumptions**
* Fixed throttle setting
* Constant airspeed
* Small angle approximations
* Quasi-steady state
* No lateral acceleration
See Also
--------
RCAIDE.Framework.Mission.Segments
"""
# unpack
alt = segment.altitude
air_speed = segment.air_speed
beta = segment.sideslip_angle
linear_acceleration_z = segment.linear_acceleration_z
roll_rate = segment.roll_rate
pitch_rate = segment.pitch_rate
yaw_rate = segment.yaw_rate
acceleration = segment.state.unknowns.acceleration[0][0]
# check for initial altitude
if alt is None:
if not segment.state.initials: raise AttributeError('altitude not set')
alt = -1.0 *segment.state.initials.conditions.frames.inertial.position_vector[-1,2]
v_x = np.cos(beta)*air_speed
v_y = np.sin(beta)*air_speed
# pack
segment.state.conditions.freestream.altitude[:,0] = alt
segment.state.conditions.frames.inertial.position_vector[:,2] = -alt # z points down
segment.state.conditions.frames.inertial.velocity_vector[:,0] = v_x
segment.state.conditions.frames.inertial.velocity_vector[:,1] = v_y
segment.state.conditions.frames.inertial.acceleration_vector = np.array([[acceleration,0.0,linear_acceleration_z]])
segment.state.conditions.static_stability.roll_rate[:,0] = roll_rate
segment.state.conditions.static_stability.pitch_rate[:,0] = pitch_rate
segment.state.conditions.static_stability.yaw_rate[:,0] = yaw_rate
# ----------------------------------------------------------------------------------------------------------------------
# Unpack Unknowns
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def unpack_unknowns(segment):
""" Unpacks the x accleration and body angle from the solver to the mission
Assumptions:
N/A
Inputs:
segment.state.unknowns:
acceleration [meters/second^2]
body_angle [radians]
Outputs:
segment.state.conditions:
frames.inertial.acceleration_vector [meters/second^2]
frames.body.inertial_rotations [radians]
Properties Used:
N/A
"""
# unpack unknowns
acceleration = segment.state.unknowns.acceleration
segment.state.conditions.frames.inertial.acceleration_vector[0,0] = acceleration