Performance model files

Performance model files are TOML files containing data to define an aircraft performance model. Different performance model types are supported, and are distinguished by a top-level model_type field, with one of the following values:

  • model_type = "legacy": legacy table-based performance model, intended to replicate the behavior of the AEIC v2 Matlab code. These files are essentially just a conversion of BADA PTF files into TOML format, including some extra information from the engine database.

  • model_type = "bada": BADA3-based performance model.

  • model_type = "tasopt": performance model based on TASOPT simulations.

Note

So far, only the legacy performance model is implemented.

Creating performance model files

There is a make-performance-model command to help with the creation of performance model TOML files.

Warning

Currently, this can obviously only generate “legacy” performance model files!

Also, the script is unfinished and needs some work by Adi and/or Wyatt to pin down some of the choices for generating the performance table and LTO data.

A complete invocation of make-performance-model to generate a legacy performance model file looks like this:

Performance data is taken from a BADA PTF file, and LTO data is taken from the engine database.

(More documentation to come when this is finished.)

Example file

The following shows an example performance model file, for a legacy table-based performance model. The fields common to all performance models (defined in the BasePerformanceModel class) come first, then the fields specific to the LegacyPerformanceModel class. In this case, the model type-specific fields are a table of performance data that the model uses.

All of the common fields are defined as simple attributes on the BasePerformanceModel class and are interpreted according to the usual rules for fields in Pydantic models. In particular, the speeds and LTO_performance tables within the TOML data define dictionaries mapping from flight phases to speed and performance data. The fields and sub-types for these entries can be seen by following the types from the speeds and lto_performance fields of the BasePerformanceModel class.

# Performance model type (one of: legacy, bada, tasopt, piano).
model_type = "legacy"

# ==============================================================================
#
#  COMMON FIELDS
#
# Fields common to all performance model types.

aircraft_name = "B738"
aircraft_class = "narrow" # wide, narrow, small, freight
ISA_offset = 0
maximum_altitude_ft = 41000
maximum_payload_kg = 22422
number_of_engines = 2 # Number of engines
APU_name = "APU 131-9" # None: APU emissions not calculated

# ------------------------------------------------------------------------------
#
# Speed data
#

[speeds.climb]
cas_lo = 128.611
cas_hi = 154.3332
mach = 0.80

[speeds.cruise]
cas_lo = 128.611
cas_hi = 144.04432
mach = 0.80

[speeds.descent]
cas_lo = 128.611
cas_hi = 149.18876
mach = 0.80

# ------------------------------------------------------------------------------
#
# LTO data
#

[LTO_performance]
source = "EDB"
ICAO_UID = "01P11CM121" # Add UID for EDB data
Foo_kN = 102.695

[LTO_performance.mode_data.approach]
thrust_frac = 0.3
fuel_kgs    = 0.278
EI_NOx      = 0.0
EI_HC       = 0.0
EI_CO       = 0.0

[LTO_performance.mode_data.climb]
thrust_frac = 0.85
fuel_kgs    = 0.754
EI_NOx      = 0.0
EI_HC       = 0.0
EI_CO       = 0.0

[LTO_performance.mode_data.takeoff]
thrust_frac = 1.0
fuel_kgs    = 0.903
EI_NOx      = 0.0
EI_HC       = 0.0
EI_CO       = 0.0

[LTO_performance.mode_data.idle]
thrust_frac = 0.07
fuel_kgs    = 0.102
EI_NOx      = 0.0
EI_HC       = 0.0
EI_CO       = 0.0

# ==============================================================================
#
#  MODEL-TYPE SPECIFIC FIELDS
#

# ------------------------------------------------------------------------------
#
# Performance table data.
#

[flight_performance]
cols = [
  "fuel_flow",  # kg/s - REQUIRED; OUTPUT COLUMN
  "fl",  # Flight levels
  "tas",  # m/s
  "rocd",  # m/s
  "mass"  # kg
]

data = [
  [ 1.3283519891023357,   0.0,  80.81275720164649,   23.82067487604034, 51434.0,  33.45038717147103],
  [0.12407137859174493,   0.0,  74.12551440329176,  -4.666077749500726, 51434.0,  5.460240925557456],
  [ 1.3287732751930788,   5.0,  81.39379412431006,  23.925338277820426, 51434.0,  33.47349770720624],
  ... data elided ...
  [ 1.5102911008506101, 410.0,   235.983685523832,  26.808004912602275, 81371.0, 47.160758804286196],
  [ 1.1025791086163905, 410.0,   235.983685523832,                 0.0, 81371.0, 29.337465977104877],
  [0.26136051703345853, 410.0,   235.983685523832, -13.952738253118492, 81371.0,  9.232965393299214],
]