fastoad.model_base.propulsion module
Base classes for propulsion components.
- class fastoad.model_base.propulsion.IPropulsion[source]
Bases:
ABCInterface that should be implemented by propulsion models.
Using this class allows to delegate to the propulsion model the management of propulsion-related data when computing performances.
The performance model calls
compute_flight_points()by providing one or several flight points. The method will feed these flight points with results of the model (e.g. thrust, SFC, ..).The performance model will then be able to call
get_consumed_mass()to know the mass consumption for each flight point.Note:
If the propulsion model needs fields that are not among defined fields of the :class`FlightPoint class`, these fields can be made authorized by :class`FlightPoint class`. Please see part about extensibility in :class`FlightPoint class` documentation.
- abstractmethod compute_flight_points(flight_points: FlightPoint | DataFrame)[source]
Computes Specific Fuel Consumption according to provided conditions.
See
FlightPointfor available fields that may be used for computation. If a DataFrame instance is provided, it is expected that its columns match field names of FlightPoint (actually, the DataFrame instance should be generated from a list of FlightPoint instances).Note
About thrust_is_regulated, thrust_rate and thrust
thrust_is_regulatedtells if a flight point should be computed usingthrust_rate(when False) orthrust(when True) as input. This way, the method can be used in a vectorized mode, where each point can be set to respect a thrust order or a thrust rate order.if
thrust_is_regulatedis not defined, the considered input will be the defined one betweenthrust_rateandthrust(if both are provided,thrust_ratewill be used)if
thrust_is_regulatedisTrueorFalse(i.e., not a sequence), the considered input will be taken accordingly, and should of course be defined.if there are several flight points,
thrust_is_regulatedis a sequence or array,thrust_rateandthrustshould be provided and have the same shape asthrust_is_regulated:code:. The method will consider for each element which input will be used according tothrust_is_regulated.
- Parameters:
flight_points – FlightPoint or DataFrame instance
- Returns:
None (inputs are updated in-place)
- abstractmethod get_consumed_mass(flight_point: FlightPoint, time_step: float) float[source]
Computes consumed mass for provided flight point and time step.
This method should rely on FlightPoint fields that are generated by :meth: compute_flight_points.
- Parameters:
flight_point
time_step
- Returns:
the consumed mass in kg
- class fastoad.model_base.propulsion.IOMPropulsionWrapper[source]
Bases:
objectInterface for wrapping a
IPropulsionsubclass in OpenMDAO.The implementation class defines the needed input variables for instantiating the
IPropulsionsubclass insetup()and use them for instantiation inget_model()See
OMRubberEngineWrapperfor an example of implementation.- abstractmethod setup(component: Component)[source]
Defines the needed OpenMDAO inputs for propulsion instantiation as done in
get_model()Use add_inputs and declare_partials methods of the provided component
- Parameters:
component
- abstractmethod static get_model(inputs) IPropulsion[source]
This method defines the used
IPropulsionsubclass instance.- Parameters:
inputs – OpenMDAO input vector where the parameters that define the propulsion model are
- Returns:
the propulsion model instance
- class fastoad.model_base.propulsion.BaseOMPropulsionComponent(**kwargs)[source]
Bases:
ExplicitComponent,ABCBase class for creating an OpenMDAO component from subclasses of
IOMPropulsionWrapper.Classes that implements this interface should add their own inputs in setup() and implement
get_wrapper().Store some bound methods so we can detect runtime overrides.
- setup_partials()[source]
Declare partials.
This is meant to be overridden by component classes. All partials should be declared here since this is called after all size/shape information is known for all variables.
- compute(inputs, outputs, discrete_inputs=None, discrete_outputs=None)[source]
Compute outputs given inputs. The model is assumed to be in an unscaled state.
An inherited component may choose to either override this function or to define a compute_primal function.
- Parameters:
inputs (Vector) – Unscaled, dimensional input variables read via inputs[key].
outputs (Vector) – Unscaled, dimensional output variables read via outputs[key].
discrete_inputs (dict-like or None) – If not None, dict-like object containing discrete input values.
discrete_outputs (dict-like or None) – If not None, dict-like object containing discrete output values.
- abstractmethod static get_wrapper() IOMPropulsionWrapper[source]
This method defines the used
IOMPropulsionWrapperinstance.- Returns:
an instance of OpenMDAO wrapper for propulsion model
- class fastoad.model_base.propulsion.AbstractFuelPropulsion[source]
Bases:
IPropulsion,ABCPropulsion model that consume any fuel should inherit from this one. The hypothesis is that fuel is always consumed, even for negative thrust
In inheritors,
compute_flight_points()is expected to define “sfc” and “thrust” in computed FlightPoint instances.- get_consumed_mass(flight_point: FlightPoint, time_step: float) float[source]
Computes consumed mass for provided flight point and time step.
This method should rely on FlightPoint fields that are generated by :meth: compute_flight_points.
- Parameters:
flight_point
time_step
- Returns:
the consumed mass in kg
- class fastoad.model_base.propulsion.FuelEngineSet(engine: IPropulsion, engine_count)[source]
Bases:
AbstractFuelPropulsionClass for modelling an assembly of identical fuel engines.
Thrust is supposed equally distributed among them.
- Parameters:
engine – the engine model
engine_count
- compute_flight_points(flight_points: FlightPoint | DataFrame)[source]
Computes Specific Fuel Consumption according to provided conditions.
See
FlightPointfor available fields that may be used for computation. If a DataFrame instance is provided, it is expected that its columns match field names of FlightPoint (actually, the DataFrame instance should be generated from a list of FlightPoint instances).Note
About thrust_is_regulated, thrust_rate and thrust
thrust_is_regulatedtells if a flight point should be computed usingthrust_rate(when False) orthrust(when True) as input. This way, the method can be used in a vectorized mode, where each point can be set to respect a thrust order or a thrust rate order.if
thrust_is_regulatedis not defined, the considered input will be the defined one betweenthrust_rateandthrust(if both are provided,thrust_ratewill be used)if
thrust_is_regulatedisTrueorFalse(i.e., not a sequence), the considered input will be taken accordingly, and should of course be defined.if there are several flight points,
thrust_is_regulatedis a sequence or array,thrust_rateandthrustshould be provided and have the same shape asthrust_is_regulated:code:. The method will consider for each element which input will be used according tothrust_is_regulated.
- Parameters:
flight_points – FlightPoint or DataFrame instance
- Returns:
None (inputs are updated in-place)