# This file is part of FAST-OAD_CS23-HE : A framework for rapid Overall Aircraft Design of Hybrid
# Electric Aircraft.
# Copyright (C) 2025 ISAE-SUPAERO
import numpy as np
import openmdao.api as om
[docs]
class FlatPlateFrictionDragCoefficient(om.ExplicitComponent):
"""
Computation of the flat plate friction drag coefficient.
"""
[docs]
def initialize(self):
self.options.declare("low_speed_aero", default=False, types=bool)
[docs]
def setup(self):
mach_variable = (
"data:aerodynamics:aircraft:takeoff:mach"
if self.options["low_speed_aero"]
else "data:TLAR:cruise_mach"
)
self.add_input("characteristic_length", val=np.nan, units="m")
self.add_input("characteristic_reynolds", val=np.nan)
self.add_input(mach_variable, val=np.nan)
self.add_output("plate_drag_friction_coeff")
[docs]
def setup_partials(self):
self.declare_partials("plate_drag_friction_coeff", "*", method="exact")
[docs]
def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):
mach_variable = (
"data:aerodynamics:aircraft:takeoff:mach"
if self.options["low_speed_aero"]
else "data:TLAR:cruise_mach"
)
length = inputs["characteristic_length"]
mach = inputs[mach_variable]
reynolds = inputs["characteristic_reynolds"]
outputs["plate_drag_friction_coeff"] = 0.455 / (
(1.0 + 0.144 * mach**2.0) ** 0.65 * np.log10(reynolds * length) ** 2.58
)
[docs]
def compute_partials(self, inputs, partials, discrete_inputs=None):
mach_variable = (
"data:aerodynamics:aircraft:takeoff:mach"
if self.options["low_speed_aero"]
else "data:TLAR:cruise_mach"
)
length = inputs["characteristic_length"]
mach = inputs[mach_variable]
reynolds = inputs["characteristic_reynolds"]
partials["plate_drag_friction_coeff", mach_variable] = (
-0.085176
* mach
/ ((1.0 + 0.144 * mach**2.0) ** 1.65 * np.log10(reynolds * length) ** 2.58)
)
partials["plate_drag_friction_coeff", "characteristic_length"] = -10.095959 / (
(1.0 + 0.144 * mach**2.0) ** 0.65 * np.log(reynolds * length) ** 3.58 * length
)
partials["plate_drag_friction_coeff", "characteristic_reynolds"] = -10.095959 / (
(1.0 + 0.144 * mach**2.0) ** 0.65 * np.log(reynolds * length) ** 3.58 * reynolds
)