Source code for RCAIDE.Library.Components.Fuselages.Cabins.Cabin
# RCAIDE/Components/Fuselages/Cabins/Cabin.py
#
# Created: Mar 2024, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
# RCAIDE imports
import RCAIDE
from RCAIDE.Framework.Core import Data, Units
from RCAIDE.Library.Components.Component import Container
from RCAIDE.Library.Components import Component
from RCAIDE.Library.Methods.Mass_Properties.Moment_of_Inertia.compute_cabin_moment_of_inertia import compute_cabin_moment_of_inertia
from RCAIDE.Library.Methods.Mass_Properties.Center_of_Gravity.compute_cabin_center_of_gravity import compute_cabin_center_of_gravity
# ----------------------------------------------------------------------------------------------------------------------
# Fuselage
# ----------------------------------------------------------------------------------------------------------------------
[docs]
class Cabin(Component):
def __defaults__(self):
"""
Sets default values for all fuselage attributes.
"""
self.tag = 'cabin'
self.number_of_passengers = 0
self.number_of_seats = 0
self.segments_bounding_cabin = []
self.filled_seats_arrangement = 'random'
self.type_A_door_length = 36 * Units.inches
self.galley_lavatory_length = 32 * Units.inches
self.emergency_exit_seat_pitch = 36 * Units.inches
self.length = 0
self.width = 0
self.height = 0
self.wide_body = False
self.tail = Data()
self.tail.fineness_ratio = 0
self.nose = Data()
self.nose.fineness_ratio = 0
self.classes = Container()
self.segments = Container()
[docs]
def append_segment(self, segment):
"""
Adds a new segment to the cabin's segment container.
Parameters
----------
segment : Data
Cabin segment to be added
"""
# Assert database type
if not isinstance(segment, RCAIDE.Library.Components.Fuselages.Cabins.Segments.Segment):
raise Exception('input component must be of type Segment')
# Store data
self.segments.append(segment)
return
[docs]
def append_cabin_class(self, cabin_class):
# Assert database type
if not (isinstance(cabin_class, RCAIDE.Library.Components.Fuselages.Cabins.Classes.Economy) or
isinstance(cabin_class, RCAIDE.Library.Components.Fuselages.Cabins.Classes.Business) or
isinstance(cabin_class, RCAIDE.Library.Components.Fuselages.Cabins.Classes.First)):
raise Exception('input component must be of type Cabin_Class')
# Store data
self.classes.append(cabin_class)
return
[docs]
def compute_moments_of_inertia(self, vehicle, center_of_gravity=[[0, 0, 0]]):
"""
Computes the moment of inertia tensor for the cabin.
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
"""
for fuselage in vehicle.fuselages:
for cabin in fuselage.cabins:
if cabin.tag == self.tag:
_, _ = compute_cabin_moment_of_inertia(
self, fuselage, center_of_gravity)
for wing in vehicle.wings:
if type(wing) == RCAIDE.Library.Components.Wings.Blended_Wing_Body:
for cabin in wing.cabins:
if cabin.tag == self.tag:
_, _ = compute_cabin_moment_of_inertia(
self, wing, center_of_gravity)
return
[docs]
def compute_center_of_gravity(self, vehicle):
"""
Computes the center of gravity for the cabin.
See Also
--------
RCAIDE.Library.Methods.weights.vehicle.center_of_gravity.compute_fuselage_center_of_gravity
Implementation of the center of gravity calculation
"""
for fuselage in vehicle.fuselages:
for cabin in fuselage.cabins:
if cabin.tag == self.tag and fuselage.layout_of_passenger_accommodations != None:
_ = compute_cabin_center_of_gravity(self, fuselage)
for wing in vehicle.wings:
if isinstance(wing, RCAIDE.Library.Components.Wings.Blended_Wing_Body):
for cabin in wing.cabins:
if cabin.tag == self.tag and wing.layout_of_passenger_accommodations != None:
_ = compute_cabin_center_of_gravity(self, wing)
return