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