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

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

# ----------------------------------------------------------------------------------------------------------------------
#  Imports
# ---------------------------------------------------------------------------------------------------------------------- 
import RCAIDE 
from RCAIDE.Library.Methods.Mass_Properties.Center_of_Gravity.update_center_of_gravity import update_center_of_gravity
from RCAIDE.Library.Methods.Mass_Properties.Moment_of_Inertia.update_moments_of_inertia import update_moments_of_inertia

# package imports 
import numpy as np  
    
# ----------------------------------------------------------------------------------------------------------------------
# Update Weights
# ----------------------------------------------------------------------------------------------------------------------  
[docs] def weights(segment): """ Updates the weight of the vehicle Assumptions: N/A Inputs: segment.state. numerics.time.integrate [-] conditions.weights.vehicle.mass [kg] conditions.weights.vehicle.mass_rate [kg/s] conditions.freestream.gravity [m/s^2] Outputs: segment.state.conditions. weights.vehicle.mass frames.inertial.gravity_force_vector Properties Used: N/A """ # unpack conditions = segment.state.conditions I = segment.state.numerics.time.integrate m_0_vehicle = conditions.weights.vehicle.mass[0,0] m_dot_vehicle = conditions.weights.vehicle.mass_rate g = conditions.freestream.gravity vehicle = segment.analyses.vehicle if (type(segment) == RCAIDE.Framework.Mission.Segments.Single_Point.Set_Speed_Set_Altitude) or\ (type(segment) == RCAIDE.Framework.Mission.Segments.Single_Point.Set_Speed_Set_Altitude_AVL_Trimmed) or \ (type(segment) == RCAIDE.Framework.Mission.Segments.Single_Point.Set_Speed_Set_Altitude_No_Propulsion) or \ (type(segment) == RCAIDE.Framework.Mission.Segments.Single_Point.Set_Speed_Set_Throttle): W = m_0_vehicle*g conditions.frames.inertial.gravity_force_vector[:,2] = W[:,0] else: # -------------------------------------------------------------------------- # update center of gravity # -------------------------------------------------------------------------- if segment.analyses.weights.settings.run_center_of_gravity_analysis: # loop through battery modules in networks for network in vehicle.networks: for fuel_line in network.fuel_lines: for fuel_tank in fuel_line.fuel_tanks: fuel = fuel_tank.fuel mass_flow_rate = conditions.energy.fuel_lines[fuel_line.tag].fuel_tanks[fuel_tank.tag].mass_flow_rate m_0_fuel = conditions.weights.components.mass[fuel.tag][0,0] conditions.weights.components.mass[fuel.tag][:,0] = m_0_fuel + np.dot(I, -mass_flow_rate).flatten() update_center_of_gravity(segment.state, vehicle) # -------------------------------------------------------------------------- # update moment of inertia # -------------------------------------------------------------------------- if segment.analyses.weights.settings.run_moments_of_inertia_analysis: update_moments_of_inertia(segment.state, vehicle) # -------------------------------------------------------------------------- # update mass # -------------------------------------------------------------------------- m = m_0_vehicle + np.dot(I, -m_dot_vehicle) W = m*g conditions.weights.vehicle.mass[1:,0] = m[1:,0] conditions.frames.inertial.gravity_force_vector[:,2] = W[:,0] return