Source code for RCAIDE.Library.Methods.Aerodynamics.Common.Drag.parasite_drag_nacelle

# RCAIDE/Library/Methods/Aerodynamics/Common/Drag/parasite_drag_nacelle.py
# (c) Copyright 2023 Aerospace Research Community LLC
# 
# Created:  Jun 2024, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ---------------------------------------------------------------------------------------------------------------------- 
  
from RCAIDE.Framework.Core                    import Data  
from RCAIDE.Library.Methods.Utilities         import Cubic_Spline_Blender   
from RCAIDE.Library.Methods.Aerodynamics.Common.Drag.compressible_turbulent_flat_plate import compressible_turbulent_flat_plate

# package imports
import numpy as np

# ---------------------------------------------------------------------------------------------------------------------- 
#  Supersonic Parasite Drag Nacekke 
# ---------------------------------------------------------------------------------------------------------------------- 
[docs] def parasite_drag_nacelle(state,settings,geometry): """Computes the parasite drag due to the nacelle Assumptions: None Source: None Args: state.conditions.freestream.mach_number (numpy.ndarray): mach_number [Unitless] state.conditions.freestream.temperature (numpy.ndarray): temperature [K] state.conditions.freestream.reynolds_number (numpy.ndarray): Reynolds number [Unitless] settings (dict): analyses settings [-] geometry (dict): aircraft geometry [-] Returns: None """ # Estimating nacelle drag for network in geometry.networks: for propulsor in network.propulsors: if 'nacelle' in propulsor: nacelle_drag(state,settings,propulsor.nacelle) return
# ---------------------------------------------------------------------------------------------------------------------- # Nacelle Drag # ----------------------------------------------------------------------------------------------------------------------
[docs] def nacelle_drag(state,settings, nacelle): """helperr fuction to computes the parasite drag due to the nacelle Assumptions: None Source: Stanford AA241 A/B Course Notes Args: state.conditions.freestream.mach_number (numpy.ndarray): mach_number [Unitless] state.conditions.freestream.temperature (numpy.ndarray): temperature [K] state.conditions.freestream.reynolds_number (numpy.ndarray): Reynolds number [Unitless] settings (dict): analyses settings [-] Returns: None """ # unpack inputs conditions = state.conditions freestream = conditions.freestream Mach = freestream.mach_number T = freestream.temperature Re = freestream.reynolds_number low_mach_cutoff = settings.supersonic.begin_drag_rise_mach_number high_mach_cutoff = settings.supersonic.end_drag_rise_mach_number Sref = nacelle.diameter**2 / 4 * np.pi Swet = nacelle.areas.wetted # Reynolds number Re_prop = Re*nacelle.length # Skin friction coefficient cf_prop, k_comp, k_reyn = compressible_turbulent_flat_plate(Re_prop,Mach,T) # Form factor according to Raymer equation form_factor = 1 + 0.35 / ( nacelle.length/nacelle.diameter) if np.all((Mach<=1.0) == True): # subsonic condition parasite_drag = form_factor * cf_prop * Swet / Sref else: # supersonic condition k_prop_sup = 1. trans_spline = Cubic_Spline_Blender(low_mach_cutoff,high_mach_cutoff) h00 = lambda M:trans_spline.compute(M) form_factor = form_factor*(h00(Mach)) + k_prop_sup*(1-h00(Mach)) # find the final result parasite_drag = form_factor * cf_prop * Swet / Sref # store results results = Data( wetted_area = Swet , reference_area = Sref , total = parasite_drag , skin_friction = cf_prop , compressibility_factor = k_comp , reynolds_factor = k_reyn , form_factor = form_factor , ) state.conditions.aerodynamics.coefficients.drag.parasite[nacelle.tag] = results return