Source code for RCAIDE.Library.Components.Fuselages.Fuselage

# RCAIDE/Compoments/Fuselages/Fuselage.py
# 
# Created:  Mar 2024, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ---------------------------------------------------------------------------------------------------------------------- 
# RCAIDE imports
import RCAIDE
from RCAIDE.Framework.Core                import Data 
from RCAIDE.Library.Components.Component  import Container
from RCAIDE.Library.Components            import Component
from RCAIDE.Library.Methods.Mass_Properties.Moment_of_Inertia.compute_fuselage_moment_of_inertia import  compute_fuselage_moment_of_inertia

# ---------------------------------------------------------------------------------------------------------------------- 
#  Fuselage
# ---------------------------------------------------------------------------------------------------------------------- 
[docs] class Fuselage(Component): """ Base class for aircraft fuselage components providing core functionality for geometric definition and analysis. Attributes ---------- tag : str Unique identifier for the fuselage component, defaults to 'fuselage' origin : list 3D coordinates [x, y, z] defining the fuselage's reference point, defaults to [[0.0, 0.0, 0.0]] aerodynamic_center : list 3D coordinates [x, y, z] of the fuselage's aerodynamic center, defaults to [0.0, 0.0, 0.0] differential_pressure : float Cabin pressurization differential, defaults to 0.0 areas : Data Collection of fuselage area measurements - front_projected : float Frontal area, defaults to 0.0 - side_projected : float Side profile area, defaults to 0.0 - wetted : float Total wetted surface area, defaults to 0.0 effective_diameter : float Equivalent circular diameter, defaults to 0.0 width : float Maximum fuselage width, defaults to 0.0 heights : Data Collection of height measurements along the fuselage - maximum : float Maximum height in meters, defaults to 0.0 - at_quarter_length : float Height at 25% of fuselage length, defaults to 0.0 - at_three_quarters_length : float Height at 75% of fuselage length, defaults to 0.0 - at_wing_root_quarter_chord : float Height at wing root quarter chord, defaults to 0.0 - at_vertical_root_quarter_chord : float Height at vertical tail root quarter chord, defaults to 0.0 lengths : Data Collection of length measurements - nose : float Length of nose section, defaults to 0.0 - tail : float Length of tail section, defaults to 0.0 - total : float Total fuselage length, defaults to 0.0 - cabin : float Length of passenger cabin, defaults to 0.0 - fore_space : float Length of forward equipment bay, defaults to 0.0 - aft_space : float Length of aft equipment bay, defaults to 0.0 x_rotation : float Rotation angle about x-axis, defaults to 0.0 y_rotation : float Rotation angle about y-axis, defaults to 0.0 z_rotation : float Rotation angle about z-axis, defaults to 0.0 fineness : Data Fineness ratio parameters - nose : float Ratio of nose length to maximum diameter, defaults to 0.0 - tail : float Ratio of tail length to maximum diameter, defaults to 0.0 nose_curvature : float Shape parameter defining nose profile curvature, defaults to 1.5 tail_curvature : float Shape parameter defining tail profile curvature, defaults to 1.5 fuel_tanks : Container Collection of fuel tank components within the fuselage, initialized empty vsp_data : Data OpenVSP-specific geometry parameters - xsec_surf_id : str OpenVSP cross-section surface identifier - xsec_num : int Number of cross-sections in OpenVSP model, defaults to None segments : Container Collection of fuselage segment components, initialized empty Notes ----- This class serves as the foundation for all fuselage types in RCAIDE, providing: * Geometric definition capabilities * Integration with OpenVSP for visualization and analysis * Support for fuel tank and segment management * Basic structural configuration parameters **Definitions** 'Fineness Ratio' Ratio of length to maximum diameter, important for drag characteristics 'Wetted Area' Total surface area exposed to airflow 'Equipment Bay' Non-pressurized volume for systems and equipment storage See Also -------- RCAIDE.Library.Components.Fuselages.Tube_Fuselage Implementation for conventional tube-and-wing aircraft RCAIDE.Library.Components.Fuselages.Blended_Wing_Body_Fuselage Implementation for blended wing body aircraft """ def __defaults__(self): """ Sets default values for all fuselage attributes. """ self.tag = 'fuselage' self.origin = [[0.0,0.0,0.0]] self.aerodynamic_center = [0.0,0.0,0.0] self.differential_pressure = 0.0 self.number_of_passengers = 0.0 self.layout_of_passenger_accommodations = None 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.lengths = Data() self.lengths.nose = 0.0 self.lengths.tail = 0.0 self.lengths.total = 0.0 self.x_rotation = 0.0 self.y_rotation = 0.0 self.z_rotation = 0.0 self.fineness = Data() self.fineness.nose = 0.0 self.fineness.tail = 0.0 self.nose_curvature = 1.5 self.tail_curvature = 1.5 self.fuel_tanks = Container() 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 fuselage geom. self.segments = Container() self.cabins = Container() self.vsp_data = Data() self.vsp_data.xsec_id = '' self.vsp_data.shape = ''
[docs] def append_segment(self,segment): """ Adds a new segment to the fuselage's segment container. Parameters ---------- segment : Data Fuselage segment to be added """ # Assert database type if not isinstance(segment,RCAIDE.Library.Components.Fuselages.Segments.Segment): raise Exception('input component must be of type Segment') # Store data self.segments.append(segment) return
[docs] def append_cabin(self,cabin): """ Adds a new segment to the fuselage's segment container. Parameters ---------- segment : Data Fuselage segment to be added """ # Assert database type if not isinstance(cabin,RCAIDE.Library.Components.Fuselages.Cabins.Cabin): raise Exception('input component must be of type Cabin') # Store data self.cabins.append(cabin) return
[docs] def append_fuel_tank(self,fuel_tank): """ Adds a new fuel tank to the fuselage's fuel tank container. Parameters ---------- fuel_tank : Data Fuel tank component to be added """ # Assert database type if not isinstance(fuel_tank,Data): raise Exception('input component must be of type Data()') # Store data self.Fuel_Tanks.append(fuel_tank) return
[docs] def compute_moment_of_inertia(self, center_of_gravity=[[0, 0, 0]]): """ Computes the moment of inertia tensor for the fuselage. Parameters ---------- center_of_gravity : list, optional Reference point coordinates for moment calculation, defaults to [[0, 0, 0]] Returns ------- I : ndarray 3x3 moment of inertia tensor in kg*m^2 See Also -------- RCAIDE.Library.Methods.Weights.Moment_of_Inertia.compute_fuselage_moment_of_inertia Implementation of the moment of inertia calculation """ I = compute_fuselage_moment_of_inertia(self,center_of_gravity) return I