Source code for RCAIDE.Library.Components.Booms.Boom

# RCAIDE/Components/Booms/Boom.py
# 
# 
# Created:  Mar 2024, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ---------------------------------------------------------------------------------------------------------------------- 
# RCAIDE imports
import RCAIDE
from RCAIDE.Library.Components import Component 
from RCAIDE.Framework.Core     import Data, Container
from RCAIDE.Library.Methods.Mass_Properties.Center_of_Gravity.compute_boom_center_of_gravity     import compute_boom_center_of_gravity
from RCAIDE.Library.Methods.Mass_Properties.Moment_of_Inertia.compute_cylinder_moment_of_inertia import compute_cylinder_moment_of_inertia
 
# ----------------------------------------------------------------------------------------------------------------------
#  BOOM
# ----------------------------------------------------------------------------------------------------------------------  
[docs] class Boom(Component): """ A structural boom component model for aircraft and rotorcraft applications. Attributes ---------- tag : str Identifier for the boom component. Default is 'boom'. origin : list 3D coordinates of the boom origin [m]. Default is [[0.0,0.0,0.0]]. aerodynamic_center : list 3D coordinates of the aerodynamic center [m]. Default is [0.0,0.0,0.0]. areas : Data Collection of area measurements - front_projected : float Front projected area [m²]. Default is 0.0. - side_projected : float Side projected area [m²]. Default is 0.0. - wetted : float Wetted area of the boom [m²]. Default is 0.0. effective_diameter : float Effective diameter of the boom [m]. Default is 0.0. width : float Width of the boom [m]. Default is 0.0. heights : Data Collection of height measurements - maximum : float Maximum height of the boom [m]. Default is 0.0. - at_quarter_length : float Height at 25% of boom length [m]. Default is 0.0. - at_three_quarters_length : float Height at 75% of boom length [m]. Default is 0.0. - at_wing_root_quarter_chord : float Height at wing root quarter chord [m]. Default is 0.0. - at_vertical_root_quarter_chord : float Height at vertical root quarter chord [m]. Default is 0.0. x_rotation : float Rotation angle around x-axis [rad]. Default is 0.0. y_rotation : float Rotation angle around y-axis [rad]. Default is 0.0. z_rotation : float Rotation angle around z-axis [rad]. Default is 0.0. lengths : Data Collection of length measurements - nose : float Length of the nose section [m]. Default is 0.0. - total : float Total length of the boom [m]. Default is 0.0. - cabin : float Length of the cabin section [m]. Default is 0.0. - fore_space : float Length of space in front [m]. Default is 0.0. - aft_space : float Length of space in rear [m]. Default is 0.0. fineness : Data Fineness ratios - nose : float Fineness ratio of nose. Default is 0.0. - tail : float Fineness ratio of tail. Default is 0.0. differential_pressure : float Pressure differential across the boom [Pa]. Default is 0.0. vsp_data : Data Vehicle Sketch Pad related data - xsec_surf_id : str VSP cross-section surface identifier. Default is ''. - xsec_num : int Number of cross-sections in boom geometry. Default is None. segments : Container Container for boom segments. Default is empty container. Notes ----- The Boom class provides a comprehensive framework for modeling structural booms in aircraft and rotorcraft, including: * Geometric definition * Cross-sectional properties * Aerodynamic characteristics * Structural interfaces * VSP integration * Segmentation capabilities **Definitions** 'Fineness Ratio' Ratio of length to maximum diameter 'Wetted Area' Total surface area exposed to airflow 'Differential Pressure' Pressure difference between inside and outside of boom """ def __defaults__(self): """ :meta private:""" self.tag = 'boom' self.origin = [[0.0,0.0,0.0]] self.aerodynamic_center = [0.0,0.0,0.0] self.areas = Data() self.areas.front_projected = 0.0 self.areas.side_projected = 0.0 self.areas.wetted = 0.0 self.effective_diameter = 0.0 self.width = 0.0 self.heights = Data() self.heights.maximum = 0.0 self.heights.at_quarter_length = 0.0 self.heights.at_three_quarters_length = 0.0 self.heights.at_wing_root_quarter_chord = 0.0 self.heights.at_vertical_root_quarter_chord = 0.0 self.x_rotation = 0.0 self.y_rotation = 0.0 self.z_rotation = 0.0 self.supersonic = False self.lengths = Data() self.lengths.nose = 0.0 self.lengths.total = 0.0 self.lengths.cabin = 0.0 self.fineness = Data() self.fineness.nose = 0.0 self.fineness.tail = 0.0 self.differential_pressure = 0.0 # For VSP self.vsp_data = Data() self.vsp_data.xsec_surf_id = '' # There is only one XSecSurf in each VSP geom. self.vsp_data.xsec_num = None # Number if XSecs in rotor_boom geom. self.segments = Container()
[docs] def append_segment(self,segment): """ Adds a new segment to the boom's segment container. Parameters ---------- segment : Data Boom segment to be added """ # Assert database type if not isinstance(segment,RCAIDE.Library.Components.Booms.Segments.Segment): raise Exception('input component must be of type Segment') # Store data self.segments.append(segment) return
[docs] def compute_moments_of_inertia(self,vehicle,center_of_gravity=[[0, 0, 0]]): """ Computes the moment of inertia tensor for the boom. Parameters ---------- center_of_gravity : list, optional Reference point coordinates for moment calculation, defaults to [[0, 0, 0]] See Also -------- RCAIDE.Library.Methods.weights.vehicle.moments_of_inertia.compute_fuselage_moment_of_inertia Implementation of the moment of inertia calculation """ _ , _ = compute_cylinder_moment_of_inertia(self,outer_length=self.lengths.total,outer_radius=self.width/2,center_of_gravity= center_of_gravity) return
[docs] def compute_center_of_gravity(self,vehicle): """ Computes the center of gravity for the boom. See Also -------- RCAIDE.Library.Methods.weights.vehicle.center_of_gravity.compute_fuselage_center_of_gravity Implementation of the center of gravity calculation """ _ = compute_boom_center_of_gravity(self) return
[docs] class Container(Component.Container):
[docs] def get_children(self): return [Boom]
# ------------------------------------------------------------ # Handle Linking # ------------------------------------------------------------ Boom.Container = Container