Source code for fastoad.models.propulsion.fuel_propulsion.base

"""Base classes for fuel-consuming propulsion models."""
#  This file is part of FAST : A framework for rapid Overall Aircraft Design
#  Copyright (C) 2020  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 abc import ABC
from typing import Union

import pandas as pd

from fastoad.base.flight_point import FlightPoint
from fastoad.models.propulsion import IPropulsion


[docs]class AbstractFuelPropulsion(IPropulsion, ABC): """ Propulsion model that consume any fuel should inherit from this one. In inheritors, :meth:`compute_flight_points` is expected to define "sfc" and "thrust" in computed FlightPoint instances. """
[docs] def get_consumed_mass(self, flight_point: FlightPoint, time_step: float) -> float: return time_step * flight_point.sfc * flight_point.thrust
[docs]class FuelEngineSet(AbstractFuelPropulsion): def __init__(self, engine: IPropulsion, engine_count): """ Class for modelling an assembly of identical fuel engines. Thrust is supposed equally distributed among them. :param engine: the engine model :param engine_count: """ self.engine = engine self.engine_count = engine_count
[docs] def compute_flight_points(self, flight_points: Union[FlightPoint, pd.DataFrame]): if isinstance(flight_points, FlightPoint): flight_points_per_engine = FlightPoint(flight_points) else: flight_points_per_engine = flight_points.copy() if flight_points.thrust is not None: flight_points_per_engine.thrust = flight_points.thrust / self.engine_count self.engine.compute_flight_points(flight_points_per_engine) flight_points.sfc = flight_points_per_engine.sfc flight_points.thrust = flight_points_per_engine.thrust * self.engine_count flight_points.thrust_rate = flight_points_per_engine.thrust_rate