Source code for RCAIDE.Library.Methods.Geometry.Planform.fuselage_planform
# RCAIDE/Library/Methods/Geometry/Platform.py
#
#
# Created: Apr 2023, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
import numpy as np
# ----------------------------------------------------------------------
# Methods
# ----------------------------------------------------------------------
[docs]
def fuselage_planform(fuselage, circular_cross_section = True):
"""Calculates fuselage geometry values
Assumptions:
None
Source:
http://adg.stanford.edu/aa241/drag/wettedarea.html
Inputs:
fuselage.
num_coach_seats [-]
fineness.nose [-]
fineness.tail [-]
width [m]
heights.maximum [m]
Outputs:
fuselage.
lengths.nose [m]
lengths.tail [m]
lengths.cabin [m]
lengths.total [m]
areas.wetted [m]
areas.front_projected [m]
effective_diameter [m]
Properties Used:
N/A
"""
fuselage_width = fuselage.width
nose_length = fuselage.fineness.nose * fuselage_width
tail_length = fuselage.fineness.tail * fuselage_width
cabin_length = fuselage.lengths.total - nose_length - tail_length
fuselage_height = fuselage.heights.maximum
a = fuselage_width/2. # base semi-major axis
b = fuselage_height/2. # base semi-minor axis
R = (a-b)/(a+b)
side_projected_area = 0
wetted_area = 0
front_projected_area = 0
effective_diameter = 0
if len(fuselage.segments) > 2:
f_segs = list(fuselage.segments.keys())
for i in range(len(fuselage.segments)-1):
seg_1 = fuselage.segments[f_segs[i]]
seg_2 = fuselage.segments[f_segs[i+1]]
delta_x = fuselage.lengths.total * (seg_2.percent_x_location - seg_1.percent_x_location)
side_projected_area += ((seg_1.height + seg_2.height ) / 2) * delta_x
area = truncated_elliptic_cone_lateral_area(seg_1.width/2, seg_1.height/2, seg_2.width/2, seg_2.height/2, delta_x)
wetted_area += area
A_1 = np.pi * (seg_1.height / 2) * (seg_1.width / 2)
A_2 = np.pi * (seg_2.height / 2) * (seg_2.width / 2)
front_projected_area = np.maximum(front_projected_area,np.maximum(A_1,A_2) )
else:
side_projected_area = fuselage.heights.maximum * fuselage.lengths.total
wetted_area = np.pi*a*(a+ np.sqrt( fuselage.lengths.nose **2 +(a)**2)) + \
np.pi*a*(a+ np.sqrt( fuselage.lengths.tail**2 +(a)**2))+ \
np.pi * fuselage.width * ( fuselage.lengths.total - (fuselage.lengths.tail+ fuselage.lengths.nose))
front_projected_area = np.pi * a * b
effective_diameter = ((fuselage_width/2)+(fuselage_height/2.))*(64.-3.*R**4)/(64.-16.*R**2)
fuselage.lengths.nose = nose_length
fuselage.lengths.tail = tail_length
fuselage.lengths.cabin = cabin_length
fuselage.areas.wetted = wetted_area
fuselage.areas.front_projected = front_projected_area
fuselage.areas.side_projected = side_projected_area
fuselage.effective_diameter = effective_diameter
return
[docs]
def truncated_elliptic_cone_lateral_area(a, b, c, d, h):
s_major = np.sqrt(h**2 + (a - c)**2) # slant length in major axis direction
s_minor = np.sqrt(h**2 + (b - d)**2) # slant length in minor axis direction
wetted_area = np.pi * ((a + c)/2) * s_major + np.pi * ((b + d)/2) * s_minor
return wetted_area