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 coefficient for all nacelles in the aircraft. Parameters ---------- state : Data Flight conditions and aerodynamic state settings : dict Aerodynamic analysis settings and parameters geometry : Data Aircraft geometry containing: - networks : list List of propulsion networks containing propulsors - propulsors : list List of propulsor objects with nacelle attributes - nacelle : Nacelle, optional Nacelle object to be analyzed Returns ------- None Results are stored in state.conditions.aerodynamics.coefficients.drag.parasite[nacelle.tag] Notes ----- This function iterates through all propulsion networks and propulsors to identify nacelles and compute their parasite drag coefficients using the nacelle_drag helper function. **Major Assumptions** * All nacelles follow the same drag calculation methodology * Nacelle drag is independent of other aircraft components * Each nacelle has a unique tag for result storage """ # Estimating nacelle drag for network in geometry.networks: for propulsor in network.propulsors: if propulsor.nacelle != None: nacelle_drag(state,settings,propulsor.nacelle) return
# ---------------------------------------------------------------------------------------------------------------------- # Nacelle Drag # ----------------------------------------------------------------------------------------------------------------------
[docs] def nacelle_drag(state,settings, nacelle): """ Computes the parasite drag coefficient for a single nacelle accounting for compressibility effects. Parameters ---------- state : Data Flight conditions containing: - conditions.freestream.mach_number : float Freestream Mach number [unitless] - conditions.freestream.temperature : float Freestream static temperature [K] - conditions.freestream.reynolds_number : float Freestream Reynolds number per unit length [unitless/m] settings : dict Aerodynamic analysis settings containing: - supersonic.begin_drag_rise_mach_number : float Mach number at which drag rise begins [unitless] - supersonic.end_drag_rise_mach_number : float Mach number at which drag rise ends [unitless] nacelle : Data Nacelle geometry containing: - tag : str Unique identifier for the nacelle - diameter : float Diameter of the nacelle [m] - length : float Length of the nacelle [m] - areas.wetted : float Wetted area of the nacelle [m²] Returns ------- None Results are stored in state.conditions.aerodynamics.coefficients.drag.parasite[nacelle.tag] Notes ----- This function calculates the parasite drag coefficient for a nacelle using compressible turbulent flat plate theory with form factor corrections. The calculation accounts for compressibility effects and uses cubic spline blending for the transonic regime. **Major Assumptions** * Fully turbulent boundary layer over the entire nacelle * Raymer's form factor correlation is valid for nacelle geometry * Compressible turbulent flat plate skin friction correlation * Cubic spline blending smooths transition between subsonic and supersonic regimes * Nacelle shape can be approximated as a cylindrical body **Theory** The nacelle Reynolds number is: :math:`Re_{nac} = Re \\cdot l_{nac}` where :math:`Re` is the freestream Reynolds number per unit length and :math:`l_{nac}` is the nacelle length. The skin friction coefficient is calculated using compressible turbulent flat plate theory: :math:`C_f = f(Re_{nac}, M, T)` The reference area is: :math:`S_{ref} = \\pi \\cdot d_{nac} \\cdot l_{nac}` where :math:`d_{nac}` is the nacelle diameter. The form factor follows Raymer's correlation: :math:`FF = 1 + \\frac{0.35}{l_{nac}/d_{nac}}` For subsonic flow (M ≤ 1.0), the parasite drag coefficient is: :math:`C_{D,parasite} = FF \\cdot C_f \\cdot \\frac{S_{wet}}{S_{ref}}` For supersonic flow, the form factor is blended using a cubic spline: :math:`FF_{eff} = FF \\cdot h_{00}(M) + 1 \\cdot (1-h_{00}(M))` where :math:`h_{00}(M)` is the cubic spline blending function. The final parasite drag coefficient is: :math:`C_{D,parasite} = FF_{eff} \\cdot C_f \\cdot \\frac{S_{wet}}{S_{ref}}` **Definitions** 'Nacelle Drag' Parasite drag component caused by the nacelle's aerodynamic shape and surface friction. 'Form Factor' Multiplier accounting for the increase in drag due to nacelle shape compared to a flat plate. References ---------- [1] Stanford AA241 Course Notes See Also -------- RCAIDE.Library.Methods.Aerodynamics.Common.Drag.compressible_turbulent_flat_plate RCAIDE.Library.Methods.Utilities.Cubic_Spline_Blender """ # 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 = np.pi * nacelle.diameter * nacelle.length 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