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 coefficient for the full aircraft using multiple calculation methods.
Parameters
----------
state : Data
Flight conditions and aerodynamic state containing:
- conditions.aerodynamics.coefficients.lift.total : float
Total lift coefficient [unitless]
- conditions.aerodynamics.coefficients.drag.induced.inviscid : float
Inviscid induced drag coefficient [unitless]
- conditions.aerodynamics.coefficients.drag.parasite.total : float
Total parasite drag coefficient [unitless]
- conditions.aerodynamics.coefficients.drag.parasite : dict
Dictionary of parasite drag coefficients by wing tag
- wing_tag : Data
Parasite drag data for each wing containing:
- parasite_drag_coefficient : float
Parasite drag coefficient [unitless]
- reference_area : float
Reference area [m²]
settings : dict
Aerodynamic analysis settings containing:
- oswald_efficiency_factor : float, optional
Vehicle-level Oswald efficiency factor [unitless]
- viscous_lift_dependent_drag_factor : float
Viscous lift-dependent drag factor K [unitless]
- span_efficiency : float, optional
Span efficiency factor [unitless]
geometry : Data
Aircraft geometry containing:
- wings : list
List of wing objects containing:
- tag : str
Unique identifier for the wing
- aspect_ratio : float
Aspect ratio of the wing [unitless]
- areas.reference : float
Reference area of the wing [m²]
Returns
-------
None
Results are stored in state.conditions.aerodynamics.coefficients.drag.induced
Notes
-----
This function calculates the induced drag coefficient using one of three methods depending
on the available input data. The calculation accounts for both inviscid and viscous
components of induced drag, with the viscous component related to parasite drag through
a lift-dependent factor.
**Major Assumptions**
* Three calculation methods available based on input data availability
* Viscous induced drag is proportional to parasite drag and lift coefficient squared
* Largest wing determines the effective aspect ratio when multiple wings are present
* Fuselage-induced drag is not explicitly accounted for in span efficiency methods
**Theory**
Method 1: Oswald Efficiency Factor Provided
The total induced drag is calculated directly:
:math:`C_{D,i} = \\frac{C_L^2}{\\pi AR \\cdot e_{osw}}`
where:
- :math:`C_L` is the total lift coefficient
- :math:`AR` is the aspect ratio of the largest wing
- :math:`e_{osw}` is the Oswald efficiency factor
Method 2: Span Efficiency Provided
The inviscid induced drag is calculated from span efficiency (Note, this is not the same as the oswald efficiency factor):
:math:`C_{D,i,inviscid} = \\frac{C_L^2}{\\pi AR \\cdot e_{span}}`
The viscous induced drag is:
:math:`C_{D,i,viscous} = K \\cdot C_{D,parasite} \\cdot C_L^2`
where :math:`K` is the viscous lift-dependent drag factor.
Method 3: Inviscid Induced Drag from Analysis
Uses pre-computed inviscid induced drag and calculates viscous component:
:math:`C_{D,i,viscous} = K \\cdot C_{D,parasite} \\cdot C_L^2`
:math:`C_{D,i,total} = C_{D,i,inviscid} + C_{D,i,viscous}`
The effective Oswald efficiency factor is back-calculated as:
:math:`e_{osw} = \\frac{C_L^2}{\\pi AR \\cdot C_{D,i,total}}`
**Definitions**
'Induced Drag'
Drag component caused by the production of lift, including both inviscid and viscous effects.
'Oswald Efficiency Factor'
Factor accounting for the efficiency of lift generation and its associated drag penalty of the entire aircraft.
'Span Efficiency Factor'
Factor accounting for the efficiency of lift generation and its associated drag penalty of the wing.
'Viscous Lift-Dependent Drag'
Additional drag caused by viscous effects that scale with lift coefficient squared.
References
----------
[1] Stanford AA241 Course Notes. adg.stanford.edu http://aerodesign.stanford.edu/aircraftdesign/aircraftdesign.html
"""
# 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