Source code for RCAIDE.Library.Methods.Aerodynamics.Common.Drag.miscellaneous_drag
# RCAIDE/Library/Methods/Aerodynamics/Common/Drag/supersonic_miscellaneous_drag_aircraft.py
# (c) Copyright 2023 Aerospace Research Community LLC
#
# Created: Jun 2024, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
from RCAIDE.Framework.Core import Data
# package imports
import numpy as np
# ----------------------------------------------------------------------------------------------------------------------
# Supersonic Miscellaneous Drag Total
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def miscellaneous_drag(state,settings,geometry):
"""Computes the miscellaneous drag associated with an aircraft
Assumptions:
Basic fit
Source:
http://aerodesign.stanford.edu/aircraftdesign/aircraftdesign.html (Stanford AA241 A/B Course Notes)
Args:
configuration.trim_drag_correction_factor [Unitless]
geometry.nacelle.diameter [m]
geometry.reference_area [m^2]
geometry.wings['main_wing'].aspect_ratio [Unitless]
state.conditions.freestream.mach_number [Unitless] (actual values are not used)
Returns:
total_miscellaneous_drag [Unitless]
"""
conditions = state.conditions
S_ref = geometry.reference_area
Mach = conditions.freestream.mach_number
if np.all((Mach<=1.0) == True): # subsonic
swet_tot = 0.
for wing in geometry.wings:
swet_tot += wing.areas.wetted
for fuselage in geometry.fuselages:
swet_tot += fuselage.areas.wetted
for boom in geometry.booms:
swet_tot += boom.areas.wetted
for network in geometry.networks:
for propulsor in network.propulsors:
if 'nacelle' in propulsor:
swet_tot += propulsor.nacelle.areas.wetted
# total miscellaneous drag
miscellaneous_drag = 3 * (0.40* (0.0184 + 0.000469 * swet_tot - 1.13*10**-7 * swet_tot ** 2)) / S_ref
total_miscellaneous_drag = miscellaneous_drag *np.ones_like(Mach)
else: # supersonic
# Initialize drag
total_nacelle_base_drag = 0.0
nacelle_base_drag_results = Data()
# Estimating nacelle drag
for network in geometry.networks:
for propulsor in network.propulsors:
if 'nacelle' in propulsor:
nacelle_base_drag = 3 * 0.5/12. * np.pi * propulsor.nacelle.diameter * 0.2/S_ref
nacelle_base_drag_results[propulsor.nacelle.tag] = nacelle_base_drag * np.ones_like(Mach)
total_nacelle_base_drag += nacelle_base_drag
# Fuselage upsweep drag
fuselage_upsweep_drag = 0.006 /S_ref
# total miscellaneous drag
miscellaneous_drag = total_nacelle_base_drag + fuselage_upsweep_drag
total_miscellaneous_drag = miscellaneous_drag *np.ones_like(Mach)
# Store results
conditions.aerodynamics.coefficients.drag.miscellaneous = Data(
total = total_miscellaneous_drag,)
return