Source code for fastga.models.aerodynamics.aerodynamics

"""FAST - Copyright (c) 2016 ONERA ISAE."""

#  This file is part of FAST-OAD_CS23 : A framework for rapid Overall Aircraft Design
#  Copyright (C) 2022  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/>.

import openmdao.api as om

import fastoad.api as oad
from fastoad.module_management.constants import ModelDomain

from fastga.models.aerodynamics.aerodynamics_high_speed import AerodynamicsHighSpeed
from fastga.models.aerodynamics.aerodynamics_low_speed import AerodynamicsLowSpeed

from .constants import DEFAULT_INPUT_AOA


[docs]@oad.RegisterOpenMDAOSystem("fastga.aerodynamics.legacy", domain=ModelDomain.AERODYNAMICS) class Aerodynamics(om.Group): """ Computes the aerodynamic properties of the aircraft in cruise conditions and in low speed conditions. Calls the AerodynamicHighSpeed and AerodynamicsLowSpeed sub-groups. """
[docs] def initialize(self): """Definition of the options for the group.""" self.options.declare("propulsion_id", default="", types=str) self.options.declare("use_openvsp", default=False, types=bool) self.options.declare("compute_mach_interpolation", default=False, types=bool) self.options.declare("compute_slipstream_low_speed", default=False, types=bool) self.options.declare("compute_slipstream_cruise", default=False, types=bool) self.options.declare("result_folder_path", default="", types=str) self.options.declare("openvsp_exe_path", default="", types=str, allow_none=True) self.options.declare("airfoil_folder_path", default=None, types=str, allow_none=True) self.options.declare("wing_airfoil", default="naca23012.af", types=str, allow_none=True) self.options.declare("htp_airfoil", default="naca0012.af", types=str, allow_none=True) self.options.declare("vtp_airfoil", default="naca0012.af", types=str, allow_none=True) self.options.declare("input_angle_of_attack", default=DEFAULT_INPUT_AOA, types=float)
[docs] def setup(self): """Add the LowSpeed and HighSpeedAerodynamics subsystems.""" # Compute the low speed aero (landing/takeoff) self.add_subsystem( "aero_low", AerodynamicsLowSpeed( propulsion_id=self.options["propulsion_id"], use_openvsp=self.options["use_openvsp"], compute_slipstream=self.options["compute_slipstream_low_speed"], result_folder_path=self.options["result_folder_path"], openvsp_exe_path=self.options["openvsp_exe_path"], airfoil_folder_path=self.options["airfoil_folder_path"], wing_airfoil=self.options["wing_airfoil"], htp_airfoil=self.options["htp_airfoil"], vtp_airfoil=self.options["vtp_airfoil"], input_angle_of_attack=self.options["input_angle_of_attack"], ), promotes=["*"], ) # Compute cruise characteristics self.add_subsystem( "aero_high", AerodynamicsHighSpeed( propulsion_id=self.options["propulsion_id"], use_openvsp=self.options["use_openvsp"], compute_mach_interpolation=self.options["compute_mach_interpolation"], compute_slipstream=self.options["compute_slipstream_cruise"], result_folder_path=self.options["result_folder_path"], openvsp_exe_path=self.options["openvsp_exe_path"], airfoil_folder_path=self.options["airfoil_folder_path"], wing_airfoil=self.options["wing_airfoil"], htp_airfoil=self.options["htp_airfoil"], vtp_airfoil=self.options["vtp_airfoil"], input_angle_of_attack=self.options["input_angle_of_attack"], ), promotes=["*"], )