Source code for RCAIDE.Library.Components.Booms.Boom
# RCAIDE/Compoments/Booms/Boom.py
#
#
# Created: Mar 2024, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
from RCAIDE.Library.Components import Component
from RCAIDE.Framework.Core import Data, Container
# ----------------------------------------------------------------------------------------------------------------------
# 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:"""
#This sets the default values.
#Assumptions:
# None
#Source:
# None
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.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):
"""
Assumptions:
None
Source:
None
Args:
self : boom [unitless]
segment : cross-section of boom [unitless]
Outputs:
None
"""
# Assert database type
if not isinstance(segment,Data):
raise Exception('input component must be of type Data()')
# Store data
self.segments.append(segment)
return
[docs]
class Container(Component.Container):
def get_children(self):
""" :meta private: """
#Returns the components that can go inside
#Assumptions:
# None
#Source:
# None
#Args:
# self : container of booms [unitless]
#Outputs:
# Boom : boom [unitless]
return [Boom]
# ------------------------------------------------------------
# Handle Linking
# ------------------------------------------------------------
Boom.Container = Container