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

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

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ---------------------------------------------------------------------------------------------------------------------- 
# RCAIDE imporst 
from RCAIDE.Framework.Core import Data

# package imports
import numpy as np

# ----------------------------------------------------------------------
#  Induced Drag Aircraft
# ---------------------------------------------------------------------- 
[docs] def induced_drag(state,settings,geometry): """Determines induced drag for the full aircraft Assumptions: This function operates in one of three ways: -An oswald efficiency is provided. All induced drag, inviscid and viscous, is use calculated using that factor -A span efficiency is provided. The inviscid induced drag is calculated from that. Viscous induced drag is calculated using the viscous_lift_dependent_drag_factor, K, and the parasite drag. -The inviscid induced drag from the the lift calculation for each wing, usually a vortex lattice, is used. Viscous induced drag is calculated using the viscous_lift_dependent_drag_factor, K, and the parasite drag. The last two options do not explicitly provide for the case where the fuselage produces an induced drag directly. Source: adg.stanford.edu (Stanford AA241 A/B Course Notes) http://aerodesign.stanford.edu/aircraftdesign/aircraftdesign.html Inputs: state.conditions.aerodynamics. lift_coefficient [Unitless] lift_breakdown.inviscid_wings[wings.*.tag] [Unitless] drag_breakdown.induced.inviscid [Unitless] drag_breakdown.induced.inviscid_wings[wings.*.tag] [Unitless] drag_breakdown.parasite[wings.*.tag].parasite_drag_coefficient [Unitless] drag_breakdown.parasite[wings.*.tag].reference_area [m^2] settings.oswald_efficiency_factor [Unitless] settings.viscous_lift_dependent_drag_factor [Unitless] settings.span_efficiency [Unitless] Outputs: conditions.aerodynamics.coefficients.drag.induced. total [Unitless] viscous [Unitless] oswald_efficiency_factor [Unitless] viscous_wings_drag [Unitless] total_induced_drag [Unitless] Properties Used: N/A """ # unpack inputs wings = geometry.wings K = settings.viscous_lift_dependent_drag_factor e_osw = settings.oswald_efficiency_factor aero = state.conditions.aerodynamics.coefficients CL = aero.lift.total CDi = aero.drag.induced.inviscid wing_viscous_induced_drags = Data() # If the oswald efficiency factor is not specified if e_osw == None: # Prime totals area = 1E-12 AR = 1E-12 total_viscous_induced_drag = K*aero.drag.parasite.total*(CL**2) # Go through each wing, and make calculations for wing in wings: AR_wing = wing.aspect_ratio S_wing = aero.drag.parasite[wing.tag].reference_area if S_wing > area: area = S_wing AR = AR_wing # compute total induced drag total_induced_drag = total_viscous_induced_drag + CDi # Calculate the vehicle level oswald efficiency e_osw = (CL**2)/(np.pi*AR*total_induced_drag) # If the user specifies a vehicle level oswald efficiency factor else: # Find the largest wing, use that for AR S = 1E-12 AR = 1E-12 for wing in wings: if wing.areas.reference>S: AR = wing.aspect_ratio S = wing.areas.reference # Calculate the induced drag total_induced_drag = CL **2 / (np.pi*AR*e_osw) total_viscous_induced_drag = total_induced_drag - CDi aero.drag.induced.total = total_induced_drag aero.drag.induced.viscous = total_viscous_induced_drag aero.drag.induced.oswald_efficiency_factor = e_osw aero.drag.induced.viscous_wings_drag = wing_viscous_induced_drags return