Source code for fastoad.models.aerodynamics.components.utils.cd0_lifting_surface

"""Computation of CD0 for a lifting surface."""
#  This file is part of FAST-OAD : A framework for rapid Overall Aircraft Design
#  Copyright (C) 2021 ONERA & ISAE-SUPAERO
#  FAST is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <https://www.gnu.org/licenses/>.

from dataclasses import dataclass

import numpy as np

from fastoad.models.aerodynamics.components.utils.friction_drag import (
    get_flat_plate_friction_drag_coefficient,
)


[docs]@dataclass class LiftingSurfaceGeometry: """Minimum geometry data for computation of CD0 of lifting surfaces.""" thickness_ratio: float #: average thickness ratio MAC_length: float #: length of Mean Aerodynamic Chord sweep_angle_25: float #: sweep angle at 25% chord, in degrees cambered: bool #: True if airfoil is cambered wet_area: float #: wet surface area of the lifting surface interaction_coeff: float #: ratio of additional drag due to interaction effects
[docs]def compute_cd0_lifting_surface( geometry: LiftingSurfaceGeometry, mach: float, reynolds: float, wing_area: float, lift_coefficient: float = 0.0, ): """ Computes CD0 for a lifting surface. Friction coefficient is assessed from :cite:`raymer:1999` (Eq 12.27). Corrections for lifting surfaces are from :cite:`supaero:2014`. :param geometry: definition of lifting surface geometry :param mach: Mach number :param reynolds: Reynolds number :param wing_area: wing area (will be used for getting CD specific to wing area :param lift_coefficient: needed if wing is cambered :return: CD0 value """ # Drag coefficient for flat plate ( cf = get_flat_plate_friction_drag_coefficient(geometry.MAC_length, mach, reynolds) # Contribution of relative thickness thickness_contribution = ( 4.688 * geometry.thickness_ratio ** 2 + 3.146 * geometry.thickness_ratio ) # Contribution of camber sweep_25 = np.radians(geometry.sweep_angle_25) if geometry.cambered: camber_contribution = ( 2.859 * (lift_coefficient / np.cos(sweep_25) ** 2) ** 3 - 1.849 * (lift_coefficient / np.cos(sweep_25) ** 2) ** 2 + 0.382 * (lift_coefficient / np.cos(sweep_25) ** 2) + 0.06 ) else: camber_contribution = 0.0 # Correction from sweep angle sweep_correction = ( 1 - 0.000178 * geometry.sweep_angle_25 ** 2 - 0.0065 * geometry.sweep_angle_25 ) cd0_ht = ( ( (thickness_contribution + camber_contribution) * sweep_correction + geometry.interaction_coeff + 1 ) * cf * geometry.wet_area / wing_area ) return cd0_ht