Source code for RCAIDE.Library.Mission.Common.Update.forces

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

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

# RCAIDE imports
import  RCAIDE 
from RCAIDE.Framework.Core   import orientation_product, orientation_transpose  
import  numpy as  np 

# ----------------------------------------------------------------------------------------------------------------------
#  Update Forces
# ----------------------------------------------------------------------------------------------------------------------
[docs] def forces(segment): """ Updates the total resultant force on the vehicle Assumptions: N/A Inputs: segment.state.conditions.: frames.wind.force_vector [N] frames.body.thrust_force_vector [N] frames.inertial.gravity_force_vector [N] Outputs: segment.conditions frames.inertial.total_force_vector [N] Properties Used: N/A """ # unpack conditions = segment.state.conditions F_aero_w = conditions.frames.wind.force_vector F_thrust_body = conditions.frames.body.thrust_force_vector F_weight_i = conditions.frames.inertial.gravity_force_vector # unpack transformation matrices T_body2inertial = conditions.frames.body.transform_to_inertial T_wind2inertial = conditions.frames.wind.transform_to_inertial T_wind2body = conditions.frames.wind.transform_to_body T_inertial2body = orientation_transpose(T_body2inertial) T_body2wind = orientation_transpose(T_wind2body) # transform matrices F_aero_i = orientation_product(T_wind2inertial,F_aero_w) F_thrust_i = orientation_product(T_body2inertial,F_thrust_body) F_thrust_wind = orientation_product(T_body2wind,F_thrust_body) F_weight_body = orientation_product(T_inertial2body, F_weight_i) F_weight_wind = orientation_product(T_body2wind,F_weight_body) if type(segment) == RCAIDE.Framework.Mission.Segments.Vertical_Flight.Climb or \ type(segment) == RCAIDE.Framework.Mission.Segments.Vertical_Flight.Descent: F_aero_i = np.zeros_like(F_thrust_i) F_aero_w = np.zeros_like(F_thrust_i) F_weight_wind[:, [0, 2]] = F_weight_wind[:, [2, 0]] F_thrust_wind[:, [0, 2]] = F_thrust_wind[:, [2, 0]] F_weight_i[:,1] *= -1 F_weight_wind[:,1] *= -1 # sum of the forces F_tot_i = F_aero_i + F_thrust_i + F_weight_i F_tot_w = F_aero_w + F_thrust_wind + F_weight_wind # pack conditions.frames.inertial.total_force_vector[:,:] = F_tot_i[:,:] conditions.frames.wind.total_force_vector[:,:] = F_tot_w[:,:] return