Source code for RCAIDE.Library.Mission.Segments.Untrimmed.Untrimmed
# RCAIDE/Library/Missions/Segments/Untrimmed/Untrimmed.py
#
#
# Created: Jul 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Initialize Conditions
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def initialize_conditions(segment):
"""
Initializes conditions for untrimmed flight analysis at fixed state
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_x : float
Acceleration in x-direction [m/s^2]
- linear_acceleration_y : float
Acceleration in y-direction [m/s^2]
- 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:
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 an untrimmed flight analysis
at fixed speed and altitude. It allows specification of full 6-DOF motion
states without enforcing trim constraints.
**Calculation Process**
1. Check initial altitude
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. Set full acceleration vector
5. Set angular rates
**Major Assumptions**
* Fixed speed and altitude point
* No trim constraints enforced
* Full 6-DOF motion allowed
* Small angle approximations
* No atmospheric variations
See Also
--------
RCAIDE.Framework.Mission.Segments
"""
# unpack
alt = segment.altitude
air_speed = segment.air_speed
sideslip = segment.sideslip_angle
linear_acceleration_x = segment.linear_acceleration_x
linear_acceleration_y = segment.linear_acceleration_y
linear_acceleration_z = segment.linear_acceleration_z
roll_rate = segment.roll_rate
pitch_rate = segment.pitch_rate
yaw_rate = segment.yaw_rate
# 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]
# pack
air_speed_x = np.cos(sideslip)*air_speed
air_speed_y = np.sin(sideslip)*air_speed
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] = air_speed_x
segment.state.conditions.frames.inertial.velocity_vector[:,1] = air_speed_y
segment.state.conditions.frames.inertial.acceleration_vector = np.array([[linear_acceleration_x,linear_acceleration_y,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