Source code for fastoad.models.performances.mission.segments.cruise

"""Classes for simulating cruise segments."""
#  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 typing import List

import pandas as pd
from fastoad.base.flight_point import FlightPoint

from .base import RegulatedThrustSegment


[docs]class CruiseSegment(RegulatedThrustSegment): """ Class for computing cruise flight segment at constant altitude. Mach is considered constant, equal to Mach at starting point. Altitude is constant. Target is a specified ground_distance. The target definition indicates the ground_distance to be covered during the segment, independently of the initial value. """
[docs] def compute_from(self, start: FlightPoint) -> pd.DataFrame: start = FlightPoint(start) if start.ground_distance: self.target.ground_distance = self.target.ground_distance + start.ground_distance return super().compute_from(start)
def _get_distance_to_target(self, flight_points: List[FlightPoint]) -> bool: current = flight_points[-1] return self.target.ground_distance - current.ground_distance
[docs]class OptimalCruiseSegment(CruiseSegment): """ Class for computing cruise flight segment at maximum lift/drag ratio. Mach is considered constant, equal to Mach at starting point. Altitude is set **at every point** to get the optimum CL according to current mass. """
[docs] def compute_from(self, start: FlightPoint) -> pd.DataFrame: start = FlightPoint(start) start.altitude = self._get_optimal_altitude(start.mass, start.mach) return super().compute_from(start)
def _compute_next_altitude(self, next_point, previous_point): next_point.altitude = self._get_optimal_altitude( next_point.mass, previous_point.mach, altitude_guess=previous_point.altitude )