pycontrails 0.58.0__cp314-cp314-macosx_10_13_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pycontrails might be problematic. Click here for more details.

Files changed (122) hide show
  1. pycontrails/__init__.py +70 -0
  2. pycontrails/_version.py +34 -0
  3. pycontrails/core/__init__.py +30 -0
  4. pycontrails/core/aircraft_performance.py +679 -0
  5. pycontrails/core/airports.py +228 -0
  6. pycontrails/core/cache.py +889 -0
  7. pycontrails/core/coordinates.py +174 -0
  8. pycontrails/core/fleet.py +483 -0
  9. pycontrails/core/flight.py +2185 -0
  10. pycontrails/core/flightplan.py +228 -0
  11. pycontrails/core/fuel.py +140 -0
  12. pycontrails/core/interpolation.py +702 -0
  13. pycontrails/core/met.py +2931 -0
  14. pycontrails/core/met_var.py +387 -0
  15. pycontrails/core/models.py +1321 -0
  16. pycontrails/core/polygon.py +549 -0
  17. pycontrails/core/rgi_cython.cpython-314-darwin.so +0 -0
  18. pycontrails/core/vector.py +2249 -0
  19. pycontrails/datalib/__init__.py +12 -0
  20. pycontrails/datalib/_met_utils/metsource.py +746 -0
  21. pycontrails/datalib/ecmwf/__init__.py +73 -0
  22. pycontrails/datalib/ecmwf/arco_era5.py +345 -0
  23. pycontrails/datalib/ecmwf/common.py +114 -0
  24. pycontrails/datalib/ecmwf/era5.py +554 -0
  25. pycontrails/datalib/ecmwf/era5_model_level.py +490 -0
  26. pycontrails/datalib/ecmwf/hres.py +804 -0
  27. pycontrails/datalib/ecmwf/hres_model_level.py +466 -0
  28. pycontrails/datalib/ecmwf/ifs.py +287 -0
  29. pycontrails/datalib/ecmwf/model_levels.py +435 -0
  30. pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +139 -0
  31. pycontrails/datalib/ecmwf/variables.py +268 -0
  32. pycontrails/datalib/geo_utils.py +261 -0
  33. pycontrails/datalib/gfs/__init__.py +28 -0
  34. pycontrails/datalib/gfs/gfs.py +656 -0
  35. pycontrails/datalib/gfs/variables.py +104 -0
  36. pycontrails/datalib/goes.py +757 -0
  37. pycontrails/datalib/himawari/__init__.py +27 -0
  38. pycontrails/datalib/himawari/header_struct.py +266 -0
  39. pycontrails/datalib/himawari/himawari.py +667 -0
  40. pycontrails/datalib/landsat.py +589 -0
  41. pycontrails/datalib/leo_utils/__init__.py +5 -0
  42. pycontrails/datalib/leo_utils/correction.py +266 -0
  43. pycontrails/datalib/leo_utils/landsat_metadata.py +300 -0
  44. pycontrails/datalib/leo_utils/search.py +250 -0
  45. pycontrails/datalib/leo_utils/sentinel_metadata.py +748 -0
  46. pycontrails/datalib/leo_utils/static/bq_roi_query.sql +6 -0
  47. pycontrails/datalib/leo_utils/vis.py +59 -0
  48. pycontrails/datalib/sentinel.py +650 -0
  49. pycontrails/datalib/spire/__init__.py +5 -0
  50. pycontrails/datalib/spire/exceptions.py +62 -0
  51. pycontrails/datalib/spire/spire.py +604 -0
  52. pycontrails/ext/bada.py +42 -0
  53. pycontrails/ext/cirium.py +14 -0
  54. pycontrails/ext/empirical_grid.py +140 -0
  55. pycontrails/ext/synthetic_flight.py +431 -0
  56. pycontrails/models/__init__.py +1 -0
  57. pycontrails/models/accf.py +425 -0
  58. pycontrails/models/apcemm/__init__.py +8 -0
  59. pycontrails/models/apcemm/apcemm.py +983 -0
  60. pycontrails/models/apcemm/inputs.py +226 -0
  61. pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +183 -0
  62. pycontrails/models/apcemm/utils.py +437 -0
  63. pycontrails/models/cocip/__init__.py +29 -0
  64. pycontrails/models/cocip/cocip.py +2742 -0
  65. pycontrails/models/cocip/cocip_params.py +305 -0
  66. pycontrails/models/cocip/cocip_uncertainty.py +291 -0
  67. pycontrails/models/cocip/contrail_properties.py +1530 -0
  68. pycontrails/models/cocip/output_formats.py +2270 -0
  69. pycontrails/models/cocip/radiative_forcing.py +1260 -0
  70. pycontrails/models/cocip/radiative_heating.py +520 -0
  71. pycontrails/models/cocip/unterstrasser_wake_vortex.py +508 -0
  72. pycontrails/models/cocip/wake_vortex.py +396 -0
  73. pycontrails/models/cocip/wind_shear.py +120 -0
  74. pycontrails/models/cocipgrid/__init__.py +9 -0
  75. pycontrails/models/cocipgrid/cocip_grid.py +2552 -0
  76. pycontrails/models/cocipgrid/cocip_grid_params.py +138 -0
  77. pycontrails/models/dry_advection.py +602 -0
  78. pycontrails/models/emissions/__init__.py +21 -0
  79. pycontrails/models/emissions/black_carbon.py +599 -0
  80. pycontrails/models/emissions/emissions.py +1353 -0
  81. pycontrails/models/emissions/ffm2.py +336 -0
  82. pycontrails/models/emissions/static/default-engine-uids.csv +239 -0
  83. pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +596 -0
  84. pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +215 -0
  85. pycontrails/models/extended_k15.py +1327 -0
  86. pycontrails/models/humidity_scaling/__init__.py +37 -0
  87. pycontrails/models/humidity_scaling/humidity_scaling.py +1075 -0
  88. pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  89. pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  90. pycontrails/models/issr.py +210 -0
  91. pycontrails/models/pcc.py +326 -0
  92. pycontrails/models/pcr.py +154 -0
  93. pycontrails/models/ps_model/__init__.py +18 -0
  94. pycontrails/models/ps_model/ps_aircraft_params.py +381 -0
  95. pycontrails/models/ps_model/ps_grid.py +701 -0
  96. pycontrails/models/ps_model/ps_model.py +1000 -0
  97. pycontrails/models/ps_model/ps_operational_limits.py +525 -0
  98. pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv +69 -0
  99. pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv +104 -0
  100. pycontrails/models/sac.py +442 -0
  101. pycontrails/models/tau_cirrus.py +183 -0
  102. pycontrails/physics/__init__.py +1 -0
  103. pycontrails/physics/constants.py +117 -0
  104. pycontrails/physics/geo.py +1138 -0
  105. pycontrails/physics/jet.py +968 -0
  106. pycontrails/physics/static/iata-cargo-load-factors-20250221.csv +74 -0
  107. pycontrails/physics/static/iata-passenger-load-factors-20250221.csv +74 -0
  108. pycontrails/physics/thermo.py +551 -0
  109. pycontrails/physics/units.py +472 -0
  110. pycontrails/py.typed +0 -0
  111. pycontrails/utils/__init__.py +1 -0
  112. pycontrails/utils/dependencies.py +66 -0
  113. pycontrails/utils/iteration.py +13 -0
  114. pycontrails/utils/json.py +187 -0
  115. pycontrails/utils/temp.py +50 -0
  116. pycontrails/utils/types.py +163 -0
  117. pycontrails-0.58.0.dist-info/METADATA +180 -0
  118. pycontrails-0.58.0.dist-info/RECORD +122 -0
  119. pycontrails-0.58.0.dist-info/WHEEL +6 -0
  120. pycontrails-0.58.0.dist-info/licenses/LICENSE +178 -0
  121. pycontrails-0.58.0.dist-info/licenses/NOTICE +43 -0
  122. pycontrails-0.58.0.dist-info/top_level.txt +3 -0
@@ -0,0 +1,525 @@
1
+ """Support for calculating operational limits of the PS model."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import numpy as np
6
+ import numpy.typing as npt
7
+ import scipy.optimize
8
+
9
+ from pycontrails.core import flight
10
+ from pycontrails.models.ps_model.ps_aircraft_params import PSAircraftEngineParams
11
+ from pycontrails.physics import constants, jet, units
12
+ from pycontrails.utils.types import ArrayOrFloat
13
+
14
+ # ------------------------
15
+ # Operational speed limits
16
+ # ------------------------
17
+
18
+
19
+ def max_mach_number_by_altitude(
20
+ altitude_ft: ArrayOrFloat,
21
+ air_pressure: ArrayOrFloat,
22
+ max_mach_num: float,
23
+ p_i_max: float,
24
+ p_inf_co: float,
25
+ *,
26
+ atm_speed_limit: bool = True,
27
+ buffer: float = 0.02,
28
+ ) -> ArrayOrFloat:
29
+ """
30
+ Calculate maximum permitted Mach number at a given altitude.
31
+
32
+ Parameters
33
+ ----------
34
+ altitude_ft : ArrayOrFloat
35
+ Waypoint altitude, [:math: `ft`]
36
+ air_pressure: ArrayOrFloat
37
+ Pressure altitude at each waypoint, [:math:`Pa`]
38
+ max_mach_num: float
39
+ Maximum permitted operational Mach number of the aircraft type.
40
+ p_i_max : float
41
+ Maximum permitted operational impact pressure of the aircraft type, [:math:`Pa`]
42
+ p_inf_co: float
43
+ Crossover pressure altitude, [:math:`Pa`]
44
+ atm_speed_limit: bool
45
+ Apply air traffic management speed limit of 250 knots below 10,000 feet
46
+ buffer: float
47
+ Additional buffer for maximum permitted Mach number.
48
+
49
+ Returns
50
+ -------
51
+ ArrayOrFloat
52
+ Maximum permitted Mach number at a given altitude for each waypoint.
53
+
54
+ Notes
55
+ -----
56
+ Below 10,000 ft, the ATM speed limit of 250 knots (``p_i = 10510 Pa``) is imposed. Below the
57
+ crossover altitude, the maximum operational speed is limited by the maximum permitted impact
58
+ pressure. Above the crossover altitude, the maximum operational speed is determined by the
59
+ maximum permitted Mach number of the aircraft type.
60
+ """
61
+ if atm_speed_limit:
62
+ p_i_max = np.where(altitude_ft < 10000.0, 10510.0, p_i_max) # type: ignore[assignment]
63
+
64
+ return (
65
+ np.where( # type: ignore[return-value]
66
+ air_pressure > p_inf_co,
67
+ 2.0**0.5
68
+ * ((1.0 + (2.0 / constants.kappa) * (p_i_max / air_pressure)) ** 0.5 - 1.0) ** 0.5,
69
+ max_mach_num,
70
+ )
71
+ + buffer
72
+ )
73
+
74
+
75
+ # ------------------------------
76
+ # Thrust requirements and limits
77
+ # ------------------------------
78
+
79
+
80
+ def required_thrust_coefficient(
81
+ c_lift: ArrayOrFloat,
82
+ c_drag: ArrayOrFloat,
83
+ true_airspeed: ArrayOrFloat,
84
+ *,
85
+ rocd: ArrayOrFloat = 300.0, # type: ignore[assignment]
86
+ ) -> ArrayOrFloat:
87
+ r"""
88
+ Calculate required thrust coefficient to fly the stated true airspeed and climb rate.
89
+
90
+ Parameters
91
+ ----------
92
+ c_lift : ArrayOrFloat
93
+ Lift coefficient
94
+ c_drag : ArrayOrFloat
95
+ Total airframe drag coefficient
96
+ true_airspeed : ArrayOrFloat
97
+ True airspeed, [:math:`m \ s^{-1}`]
98
+ rocd : ArrayOrFloat
99
+ Rate of climb and descent over segment, [:math:`ft min^{-1}`]
100
+
101
+ Returns
102
+ -------
103
+ ArrayOrFloat
104
+ Required thrust coefficient to fly the stated true airspeed and climb rate
105
+
106
+ Notes
107
+ -----
108
+ The maximum "useful" operational altitude is being deemed to have been reached when the
109
+ achievable climb rate drops to about 300 ft/min.
110
+ """
111
+ dh_dt = units.ft_to_m(rocd) / 60.0
112
+ return c_lift * ((c_drag / c_lift) + (dh_dt / true_airspeed))
113
+
114
+
115
+ def max_available_thrust_coefficient(
116
+ air_temperature: ArrayOrFloat,
117
+ mach_number: ArrayOrFloat,
118
+ c_t_eta_b: ArrayOrFloat,
119
+ atyp_param: PSAircraftEngineParams,
120
+ *,
121
+ buffer: float = 0.20,
122
+ ) -> ArrayOrFloat:
123
+ """
124
+ Calculate maximum available thrust coefficient.
125
+
126
+ Parameters
127
+ ----------
128
+ air_temperature : ArrayOrFloat
129
+ Ambient temperature at each waypoint, [:math:`K`]
130
+ mach_number : ArrayOrFloat
131
+ Mach number at each waypoint.
132
+ c_t_eta_b : ArrayOrFloat
133
+ Thrust coefficient at maximum overall propulsion efficiency for a given Mach Number.
134
+ atyp_param : PSAircraftEngineParams
135
+ Extracted aircraft and engine parameters.
136
+ buffer : float, optional
137
+ Additional buffer for maximum throttle parameter `tr_max`. The default value recommended by
138
+ Ian Poll is 0.2, which increases the maximum throttle parameter by 20%.
139
+
140
+ Returns
141
+ -------
142
+ ArrayOrFloat
143
+ Maximum available thrust coefficient that can be supplied by the engines.
144
+ """
145
+ tr_max = _normalised_max_throttle_parameter(
146
+ air_temperature,
147
+ mach_number,
148
+ atyp_param.tet_mcc,
149
+ atyp_param.tr_ec,
150
+ atyp_param.m_ec,
151
+ buffer=buffer,
152
+ )
153
+ c_t_max_over_c_t_eta_b = 1.0 + 2.5 * (tr_max - 1.0)
154
+ return c_t_max_over_c_t_eta_b * c_t_eta_b
155
+
156
+
157
+ def get_excess_thrust_available(
158
+ mach_number: ArrayOrFloat,
159
+ air_temperature: ArrayOrFloat,
160
+ air_pressure: ArrayOrFloat,
161
+ aircraft_mass: ArrayOrFloat,
162
+ theta: ArrayOrFloat,
163
+ atyp_param: PSAircraftEngineParams,
164
+ ) -> ArrayOrFloat:
165
+ r"""
166
+ Calculate the excess thrust coefficient available at specified operation condition.
167
+
168
+ Parameters
169
+ ----------
170
+ mach_number : ArrayOrFloat
171
+ Mach number at each waypoint
172
+ air_temperature : ArrayOrFloat
173
+ Ambient temperature at each waypoint, [:math:`K`]
174
+ air_pressure : ArrayOrFloat
175
+ Ambient pressure, [:math:`Pa`]
176
+ aircraft_mass : ArrayOrFloat
177
+ Aircraft mass at each waypoint, [:math:`kg`]
178
+ theta : ArrayOrFloat
179
+ Climb (positive value) or descent (negative value) angle, [:math:`\deg`]
180
+ atyp_param : PSAircraftEngineParams
181
+ Extracted aircraft and engine parameters.
182
+
183
+ Returns
184
+ -------
185
+ ArrayOrFloat
186
+ The difference between the maximum rated thrust coefficient and the thrust coefficient
187
+ required to maintain the current mach_number.
188
+ """
189
+ from pycontrails.models.ps_model.ps_model import (
190
+ airframe_drag_coefficient,
191
+ lift_coefficient,
192
+ oswald_efficiency_factor,
193
+ reynolds_number,
194
+ skin_friction_coefficient,
195
+ thrust_coefficient_at_max_efficiency,
196
+ wave_drag_coefficient,
197
+ zero_lift_drag_coefficient,
198
+ )
199
+
200
+ rn = reynolds_number(atyp_param.wing_surface_area, mach_number, air_temperature, air_pressure)
201
+ if isinstance(rn, float):
202
+ if rn <= 0.0:
203
+ return np.nan
204
+ else:
205
+ rn[rn <= 0.0] = np.nan
206
+
207
+ c_lift = lift_coefficient(
208
+ atyp_param.wing_surface_area, aircraft_mass, air_pressure, mach_number, theta
209
+ )
210
+
211
+ c_f = skin_friction_coefficient(rn)
212
+ c_drag_0 = zero_lift_drag_coefficient(c_f, atyp_param.psi_0)
213
+ e_ls = oswald_efficiency_factor(c_drag_0, atyp_param)
214
+ c_drag_w = wave_drag_coefficient(mach_number, c_lift, atyp_param)
215
+ c_drag = airframe_drag_coefficient(
216
+ c_drag_0, c_drag_w, c_lift, e_ls, atyp_param.wing_aspect_ratio
217
+ )
218
+
219
+ tas = units.mach_number_to_tas(mach_number, air_temperature)
220
+ req_thrust_coeff = required_thrust_coefficient(c_lift, c_drag, tas) # type: ignore[type-var]
221
+
222
+ c_t_eta_b = thrust_coefficient_at_max_efficiency(
223
+ mach_number, atyp_param.m_des, atyp_param.c_t_des
224
+ )
225
+ max_thrust_coeff = max_available_thrust_coefficient(
226
+ air_temperature, mach_number, c_t_eta_b, atyp_param
227
+ )
228
+
229
+ return max_thrust_coeff - req_thrust_coeff # type: ignore[return-value]
230
+
231
+
232
+ def _normalised_max_throttle_parameter(
233
+ air_temperature: ArrayOrFloat,
234
+ mach_number: ArrayOrFloat,
235
+ tet_mcc: float,
236
+ tr_ec: float,
237
+ m_ec: float,
238
+ *,
239
+ buffer: float = 0.20,
240
+ ) -> ArrayOrFloat:
241
+ """
242
+ Calculate normalised maximum throttle parameter.
243
+
244
+ Parameters
245
+ ----------
246
+ air_temperature : ArrayOrFloat
247
+ Ambient temperature at each waypoint, [:math:`K`]
248
+ mach_number : ArrayOrFloat
249
+ Mach number at each waypoint
250
+ tet_mcc : float
251
+ Turbine entry temperature at maximum continuous climb rating, [:math:`K`]
252
+ tr_ec : float
253
+ Engine characteristic ratio of total turbine-entry-temperature to the total freestream
254
+ temperature for maximum overall efficiency.
255
+ m_ec : float
256
+ Engine characteristic Mach number associated with `tr_ec`.
257
+ buffer : float, optional
258
+ Additional buffer for maximum throttle parameter. The default value recommended by Ian Poll
259
+ is 0.2, which increases the maximum throttle parameter by 20%. This affects the maximum
260
+ available thrust coefficient calculated downstream.
261
+
262
+ Returns
263
+ -------
264
+ ArrayOrFloat
265
+ Normalised maximum throttle parameter, `tr_max`.
266
+
267
+ Notes
268
+ -----
269
+ The normalised throttle parameter is the ratio of the total temperature of the gas at turbine
270
+ entry to the freestream total temperature, normalised with its value for maximum engine
271
+ overall efficiency at the same freestream Mach number.
272
+ """
273
+ return (
274
+ (tet_mcc / air_temperature)
275
+ / (tr_ec * (1.0 - 0.53 * (mach_number - m_ec) ** 2) * (1.0 + 0.2 * mach_number**2))
276
+ * (1.0 + buffer)
277
+ )
278
+
279
+
280
+ # --------------------
281
+ # Aircraft mass limits
282
+ # --------------------
283
+
284
+
285
+ def max_allowable_aircraft_mass(
286
+ air_pressure: ArrayOrFloat,
287
+ mach_number: ArrayOrFloat,
288
+ mach_num_des: float,
289
+ c_l_do: float,
290
+ wing_surface_area: float,
291
+ amass_mtow: float,
292
+ ) -> ArrayOrFloat:
293
+ """
294
+ Calculate maximum allowable aircraft mass for a given altitude and mach number.
295
+
296
+ Parameters
297
+ ----------
298
+ air_pressure : ArrayOrFloat
299
+ Ambient pressure, [:math:`Pa`]
300
+ mach_number : ArrayOrFloat
301
+ Mach number at each waypoint
302
+ mach_num_des : float
303
+ Design optimum Mach number where the fuel mass flow rate is at a minimum.
304
+ c_l_do : float
305
+ Design optimum lift coefficient.
306
+ wing_surface_area : float
307
+ Aircraft wing surface area, [:math:`m^2`]
308
+ amass_mtow: float
309
+ Aircraft maximum take-off weight, [:math:`kg`]
310
+
311
+ Returns
312
+ -------
313
+ ArrayOrFloat
314
+ Maximum allowable aircraft mass, [:math:`kg`]
315
+ """
316
+ c_l_maxu = max_usable_lift_coefficient(mach_number, mach_num_des, c_l_do)
317
+ amass_max = (1.0 / constants.g) * (
318
+ c_l_maxu * 0.5 * constants.kappa * air_pressure * (mach_number**2) * wing_surface_area
319
+ )
320
+ return np.minimum(amass_max, amass_mtow)
321
+
322
+
323
+ def max_usable_lift_coefficient(
324
+ mach_number: ArrayOrFloat, mach_num_des: float, c_l_do: float
325
+ ) -> ArrayOrFloat:
326
+ """
327
+ Calculate maximum usable lift coefficient.
328
+
329
+ Parameters
330
+ ----------
331
+ mach_number : ArrayOrFloat
332
+ Mach number at each waypoint
333
+ mach_num_des : float
334
+ Design optimum Mach number where the fuel mass flow rate is at a minimum.
335
+ c_l_do : float
336
+ Design optimum lift coefficient.
337
+
338
+ Returns
339
+ -------
340
+ ArrayOrFloat
341
+ Maximum usable lift coefficient.
342
+ """
343
+ m_over_m_des = mach_number / mach_num_des
344
+ c_l_maxu_over_c_l_do = np.where(
345
+ m_over_m_des < 0.70,
346
+ 1.8 + 0.160 * m_over_m_des - 1.085 * m_over_m_des**2,
347
+ 13.272 - 42.262 * m_over_m_des + 49.883 * m_over_m_des**2 - 19.683 * m_over_m_des**3,
348
+ )
349
+ return c_l_maxu_over_c_l_do * c_l_do # type: ignore[return-value]
350
+
351
+
352
+ def minimum_mach_num(
353
+ air_pressure: ArrayOrFloat,
354
+ aircraft_mass: ArrayOrFloat,
355
+ atyp_param: PSAircraftEngineParams,
356
+ ) -> ArrayOrFloat:
357
+ """
358
+ Calculate minimum mach number to avoid stall.
359
+
360
+ Parameters
361
+ ----------
362
+ air_pressure : ArrayOrFloat
363
+ Ambient pressure, [:math:`Pa`]
364
+ aircraft_mass : ArrayOrFloat
365
+ Aircraft mass at each waypoint, [:math:`kg`]
366
+ atyp_param : PSAircraftEngineParams
367
+ Extracted aircraft and engine parameters.
368
+
369
+ Returns
370
+ -------
371
+ ArrayOrFloat
372
+ Minimum mach number to avoid stall.
373
+ """
374
+
375
+ def excess_mass(
376
+ mach_number: ArrayOrFloat,
377
+ air_pressure: ArrayOrFloat,
378
+ aircraft_mass: ArrayOrFloat,
379
+ mach_num_des: float,
380
+ c_l_do: float,
381
+ wing_surface_area: float,
382
+ ) -> ArrayOrFloat:
383
+ amass_max = max_allowable_aircraft_mass(
384
+ air_pressure,
385
+ mach_number,
386
+ mach_num_des,
387
+ c_l_do,
388
+ wing_surface_area,
389
+ 1e10, # clipped to this value which we want to ignore
390
+ )
391
+ return amass_max - aircraft_mass
392
+
393
+ return scipy.optimize.newton(
394
+ excess_mass,
395
+ args=(
396
+ air_pressure,
397
+ aircraft_mass,
398
+ atyp_param.m_des,
399
+ atyp_param.c_l_do,
400
+ atyp_param.wing_surface_area,
401
+ ),
402
+ x0=np.full_like(air_pressure, 0.4),
403
+ x1=np.full_like(air_pressure, 0.5),
404
+ tol=1e-4,
405
+ )
406
+
407
+
408
+ def maximum_mach_num(
409
+ altitude_ft: ArrayOrFloat,
410
+ air_pressure: ArrayOrFloat,
411
+ aircraft_mass: ArrayOrFloat,
412
+ air_temperature: ArrayOrFloat,
413
+ theta: ArrayOrFloat,
414
+ atyp_param: PSAircraftEngineParams,
415
+ ) -> ArrayOrFloat:
416
+ r"""
417
+ Return the maximum mach number at the current operating conditions.
418
+
419
+ The value returned will be the lesser of the maximum operational mach
420
+ number of the aircraft or the mach number obtainable at maximum thrust
421
+
422
+ Parameters
423
+ ----------
424
+ altitude_ft : ArrayOrFloat
425
+ Altitude, [:math:`ft`]
426
+ air_pressure : ArrayOrFloat
427
+ Ambient pressure, [:math:`Pa`]
428
+ aircraft_mass : ArrayOrFloat
429
+ Aircraft mass at each waypoint, [:math:`kg`]
430
+ air_temperature : ArrayOrFloat
431
+ Array of ambient temperature, [:math: `K`]
432
+ theta : ArrayOrFloat
433
+ Climb (positive value) or descent (negative value) angle, [:math:`\deg`]
434
+ atyp_param : PSAircraftEngineParams
435
+ Extracted aircraft and engine parameters.
436
+
437
+ Returns
438
+ -------
439
+ ArrayOrFloat
440
+ Maximum mach number given thrust limiations.
441
+ """
442
+ # Max speed ignoring thrust limits
443
+ mach_num_op_lim = max_mach_number_by_altitude(
444
+ altitude_ft,
445
+ air_pressure,
446
+ atyp_param.max_mach_num,
447
+ atyp_param.p_i_max,
448
+ atyp_param.p_inf_co,
449
+ )
450
+
451
+ return scipy.optimize.newton(
452
+ func=get_excess_thrust_available,
453
+ args=(air_temperature, air_pressure, aircraft_mass, theta, atyp_param),
454
+ x0=mach_num_op_lim,
455
+ x1=mach_num_op_lim - 0.01,
456
+ tol=1e-4,
457
+ ).clip(max=mach_num_op_lim)
458
+
459
+
460
+ # ----------------
461
+ # Fuel flow limits
462
+ # ----------------
463
+
464
+
465
+ def fuel_flow_idle(
466
+ fuel_flow_idle_sls: float, altitude_ft: ArrayOrFloat
467
+ ) -> npt.NDArray[np.floating]:
468
+ r"""Calculate minimum fuel mass flow rate at flight idle conditions.
469
+
470
+ Parameters
471
+ ----------
472
+ fuel_flow_idle_sls : float
473
+ Fuel mass flow rate under engine idle and sea level static conditions, [:math:`kg \ s^{-1}`]
474
+ altitude_ft : ArrayOrFloat
475
+ Waypoint altitude, [:math: `ft`]
476
+
477
+ Returns
478
+ -------
479
+ npt.NDArray[np.floating]
480
+ Fuel mass flow rate at flight idle conditions, [:math:`kg \ s^{-1}`]
481
+ """
482
+ x = altitude_ft / 10000.0
483
+ return fuel_flow_idle_sls * (1.0 - 0.178 * x + 0.0085 * x**2) # type: ignore[return-value]
484
+
485
+
486
+ def max_fuel_flow(
487
+ air_temperature: ArrayOrFloat,
488
+ air_pressure: ArrayOrFloat,
489
+ mach_number: ArrayOrFloat,
490
+ fuel_flow_max_sls: float,
491
+ flight_phase: npt.NDArray[np.uint8] | flight.FlightPhase,
492
+ ) -> npt.NDArray[np.floating]:
493
+ r"""Correct maximum fuel mass flow rate that can be supplied by the engine.
494
+
495
+ Parameters
496
+ ----------
497
+ air_temperature : ArrayOrFloat
498
+ Ambient temperature at each waypoint, [:math:`K`]
499
+ air_pressure : ArrayOrFloat
500
+ Ambient pressure, [:math:`Pa`]
501
+ mach_number : ArrayOrFloat
502
+ Mach number at each waypoint
503
+ fuel_flow_max_sls : float
504
+ Fuel mass flow rate at take-off and sea level static conditions, [:math:`kg \ s^{-1}`]
505
+ flight_phase : npt.NDArray[np.uint8] | flight.FlightPhase
506
+ Phase state of each waypoint.
507
+
508
+ Returns
509
+ -------
510
+ npt.NDArray[np.floating]
511
+ Maximum allowable fuel mass flow rate, [:math:`kg \ s^{-1}`]
512
+ """
513
+ ff_max = jet.equivalent_fuel_flow_rate_at_cruise(
514
+ fuel_flow_max_sls,
515
+ air_temperature / constants.T_msl,
516
+ air_pressure / constants.p_surface,
517
+ mach_number,
518
+ )
519
+
520
+ # Account for descent conditions
521
+ # Assume `max_fuel_flow` at descent is not more than 30% of fuel_flow_max_sls
522
+ # We need this assumption because PTF files are not available in the PS model.
523
+ descent = flight_phase == flight.FlightPhase.DESCENT
524
+ ff_max[descent] = 0.3 * fuel_flow_max_sls
525
+ return ff_max
@@ -0,0 +1,69 @@
1
+ ICAO,Manufacturer,Type,Year_of_first_flight,n_engine,winglets,WV,MTOM_kg,MLM_kg,MZFM_kg,OEM_i_kg,MPM_i_kg,MZFM_MTOM,OEM_i_MTOM,MPM_i_MTOM,Sref_m2,span_m,bf_m,delta_2,cos_sweep,AR,psi_0,Xo,wing_constant,j_2,j_1,CL_do,etaL_D_do,nominal_F00_ISA_kn,mf_max_T_O_SLS_kg_s,mf_idle_SLS_kg_s,M_des,CT_des,eta_1,eta_2,Mec,Tec,FL_max,MMO,pi_max_pa,pinf_co_pa,nominal_opr,nominal_bpr,nominal_fpr
2
+ A20N,Airbus,A320-NEO,2014,2,yes,54,79000,66919,63644,43644,20000,0.794936709,0.551898734,0.243037975,122.4,35.1,3.59,0.02092207,0.906307767,10.06544118,7.519168898,0.956139347,0.786244088,0.872610625,0.075611461,0.597752236,6.437505219,255.7834783,1.771291826,0.179714609,0.7527,0.030225318,0.363162533,0.38526913,0.787080092,6.248203519,410,0.82,20882.78822,37618.41516,34.13434783,11.63652174,1.65
3
+ A21N,Airbus,A321-NEO,2016,2,yes,52,93500,77809,73982,48482,25500,0.780748663,0.513368984,0.267379679,122.4,35.27,3.95,0.025084952,0.906307767,10.16317729,8.080988052,0.973612104,0.776932809,0.873049689,0.077052255,0.626442739,6.502543201,255.7834783,1.771291826,0.179714609,0.7527,0.032774858,0.379556514,0.38526913,0.787080092,6.202228431,391.0104987,0.82,20882.78822,37618.41516,34.13434783,11.63652174,1.65
4
+ A306,Airbus,A300B4-600R,1983,2,no,0,170500,139777,130000,88565,46990,0.762463343,0.50568915,0.256774194,260,44.84,5.64,0.031641495,0.882947568,7.733175385,7.803846371,1.014875092,0.721487903,0.871400617,0.076160146,0.519478424,5.296827535,524.8533333,5.078666667,0.424,0.7527,0.030658862,0.364210924,0.537766667,0.683259556,5.336387723,410,0.82,20882.78822,37618.41516,31.52666667,4.933333333,1.65
5
+ A30B,Airbus,A300B4-200,1973,2,no,6,165000,135333,126000,88505,37495,0.751515152,0.536393939,0.215121212,260,44.83,5.64,0.031655613,0.882947568,7.729726538,8.774193537,1.036099444,0.711780698,0.86836702,0.07391802,0.548381029,4.318482734,466.2,4.8029,0.4,0.7527,0.034997635,0.321789379,0.54535,0.674344,4.93205278,390,0.82,20882.78822,37618.41516,26.47,4.6,1.65
6
+ A310,Airbus,A310-200,1982,2,no,8,138600,120682,111136,79186,31950,0.808080808,0.571479076,0.236601732,219,43.89,5.64,0.033026081,0.882947568,8.796036986,8.375562451,1.013898087,0.743809599,0.868659927,0.073287068,0.557549017,5.65582168,443.525,4.2895,0.3842,0.772,0.032940786,0.383837958,0.53568125,0.685649,5.373550789,410,0.84,21865.62405,37237.40235,26.3725,5.025,1.65
7
+ A313,Airbus,A310-300,1982,2,no,0,150000,124000,114500,78590,35910,0.753333333,0.51598,0.237353333,219,43.89,5.64,0.033026081,0.882947568,8.796036986,8.212622174,1.024582936,0.737571745,0.869516104,0.074562862,0.563576336,5.602548625,480.258,4.5104,0.3946,0.772,0.032853327,0.375278919,0.5369325,0.68421856,5.364267817,410,0.84,21865.62405,37237.40235,28.184,4.97,1.65
8
+ A318,Airbus,A318-100,2002,2,no,5,68000,56667,53667,38740,14927,0.779411765,0.570852941,0.208558824,122.4,34.1,3.95,0.026835855,0.906307767,9.500081699,7.471444005,0.995441823,0.753958954,0.870956053,0.075008678,0.563947374,5.333478382,199.2533333,2.060666667,0.211333333,0.7527,0.030936248,0.340355901,0.532458333,0.689288889,6.031933509,410,0.82,20882.78822,37618.41516,25.43333333,5.166666667,1.65
9
+ A319,Airbus,A319-100,1995,2,no,6,73500,61857,57393,39776,17617,0.795918367,0.54047619,0.255442177,122.4,34.1,3.95,0.026835855,0.906307767,9.500081699,7.700920319,0.995030706,0.754823537,0.870775437,0.074774133,0.568723265,5.098135499,212.4783333,1.987166667,0.212,0.7527,0.031550436,0.328,0.521633125,0.70104451,5.849202578,410,0.82,20882.78822,37618.41516,25.33833333,5.6425,1.65
10
+ A320,Airbus,A320-200,1987,2,no,0,73500,64875,61200,41295,19905,0.823129252,0.561142857,0.261986395,122.4,34.1,3.95,0.026835855,0.906307767,9.500081699,8.395287612,1.006597506,0.749584382,0.868903458,0.073191605,0.59039895,5.259100576,224.638,2.1462,0.2239,0.7527,0.034652548,0.358,0.5218265,0.70084087,5.588929572,410,0.82,20882.78822,37618.41516,26.909,5.634,1.65
11
+ A321,Airbus,A321-100,1993,2,no,8,89000,74313,70313,46908,23405,0.803370787,0.52647191,0.276898876,122.4,34.15,3.95,0.02675733,0.906307767,9.527961601,8.631216449,1.023748365,0.740171309,0.869023229,0.074059188,0.606338494,4.98823425,269.3142857,2.690571429,0.246285714,0.7527,0.0358593,0.342780897,0.52832,0.693868454,5.741120348,391.0006562,0.82,20882.78822,37618.41516,31.16285714,5.348571429,1.65
12
+ A332,Airbus,A330-200,1992,2,no,52,233000,181333,168593,116874,51719,0.729613734,0.501459227,0.228154506,361.6,60.3,5.64,0.017496597,0.868631486,10.05555863,6.691783708,0.986539447,0.762475042,0.872047153,0.076050268,0.528141489,6.875896605,609.465,5.93725,0.4895,0.786475,0.02499242,0.37,0.535055625,0.68636059,5.728484511,410,0.86,22875.41229,36864.52979,34.20375,5.0525,1.65
13
+ A333,Airbus,A330-300,1992,2,no,52,233000,183526,171842,119965,51877,0.751072961,0.515587983,0.235484979,361.6,60.3,5.64,0.017496597,0.868631486,10.05555863,6.899510103,0.989985236,0.76102049,0.871552208,0.075532661,0.535352593,7.128484765,604.4625,5.839875,0.49225,0.786475,0.025831756,0.391045891,0.534117188,0.687423438,5.727838461,410,0.86,22875.41229,36864.52979,33.67251837,5.09375,1.65
14
+ A338,Airbus,A330-800,2018,2,no,,242000,186000,174769,132000,42769,0.719008264,0.545454545,0.173553719,374,64,5.64,0.015532031,0.866025375,10.95187166,6.212990529,0.958877916,0.780583541,0.873631599,0.077578309,0.530216374,8.328327417,655.6,4.956,0.482,0.786,0.022900369,0.400414909,0.44525,0.7634,6.246060604,414.5,0.86,22875.41229,36864.52979,45.4,9,1.65
15
+ A339,Airbus,A330-900,2017,2,no,,242000,191000,179667,133667,46000,0.747933884,0.55785124,0.190082645,374,64,5.64,0.015532031,0.866025375,10.95187166,6.46325095,0.96246813,0.779169206,0.873192286,0.076918011,0.539469135,8.110705591,655.6,4.956,0.482,0.786,0.023887738,0.399788387,0.44525,0.7634,6.232485988,414.5,0.86,22875.41229,36864.52979,45.4,9,1.65
16
+ A342,Airbus,A340-200,1991,4,no,1,257000,182000,170000,125242,44758,0.657587549,0.487322957,0.170264591,361.6,60.3,5.64,0.017496597,0.868631486,10.05555863,7.076588203,0.994839196,0.759754196,0.872370296,0.076725978,0.551202388,6.689573974,579.4666667,5.516,0.4824,0.786475,0.026833302,0.367,0.497575,0.724576,5.643739289,415,0.86,22875.41229,36864.52979,29.95,6.7,1.65
17
+ A343,Airbus,A340-300,1991,4,no,1,257000,189895,178579,125242,53337,0.677042802,0.487322957,0.189719844,361.6,60.3,5.64,0.017496597,0.868631486,10.05555863,7.383954096,1.000285382,0.7573768,0.871649368,0.076010212,0.561474717,6.610070249,579.4666667,5.516,0.4824,0.786475,0.028082741,0.372580342,0.497575,0.724576,5.663601105,415,0.86,22875.41229,36864.52979,29.95,6.7,1.65
18
+ A345,Airbus,A340-500,2002,4,no,1,372000,241875,226750,170370,56380,0.61827957,0.457983871,0.160295699,437.3,63.45,5.64,0.015802469,0.856267054,9.206271438,6.730844314,0.984937415,0.761952208,0.873638932,0.078182371,0.511999654,6.777298015,1036.4,8.786666667,0.92,0.796125,0.024513506,0.361959064,0.479375,0.74,5.668646964,414.5013123,0.86,22875.41229,36864.52979,36.17666667,7.5,1.65
19
+ A346,Airbus,A340-600,2001,4,no,1,368000,260800,246800,176364,70436,0.66576087,0.47925,0.18651087,437.3,63.45,5.64,0.015802469,0.856267054,9.206271438,7.056855481,0.990652069,0.759481269,0.872973519,0.077394212,0.523156024,6.815977225,1050.8,8.96,0.92,0.796125,0.025814567,0.37517065,0.479375,0.74,5.68183304,415,0.86,22875.41229,36864.52979,36.67,7.5,1.65
20
+ A359,Airbus,A350-900,2013,2,no,9,275000,206500,194550,142800,51750,0.711636364,0.533090909,0.178545455,445,64.75,5.96,0.016945054,0.848048064,9.421488764,6.140290359,0.962361567,0.791413177,0.873943906,0.078227432,0.493332851,8.125436058,758,5.638,0.582,0.82025,0.022496843,0.404691496,0.4450225,0.76353184,6.122466226,431.0006562,0.89,24441.49186,36319.05391,41.095,9.01,1.65
21
+ A35K,Airbus,A350-1000,2016,2,yes,2,316000,235500,222500,155000,67500,0.705696203,0.493670886,0.212025316,465,64.75,5.96,0.016945054,0.848048064,9.016263441,6.183084792,0.966883665,0.788899107,0.87362679,0.077787748,0.499564827,8.147693431,873.4,7.014,0.65,0.82025,0.022347631,0.399824282,0.46709,0.74925344,6.172981137,414.5,0.89,24441.49186,36319.05391,48.57,8.04,1.65
22
+ A388,Airbus,A380-800,2005,4,no,2,569000,391308,367000,270148,96852,0.643233743,0.483304042,0.159929701,845,79.8,7.142,0.016020051,0.866025375,7.536142012,6.132045576,0.966638255,0.794400187,0.875962464,0.081840299,0.446446426,7.498481785,1350.653333,10.56933333,1.072,0.82025,0.021624953,0.398677354,0.470199167,0.746999716,5.869080111,431.0006562,0.89,24441.49186,36319.05391,38.07666667,7.903333333,1.65
23
+ B37M,Boeing,B737 MAX 7,2018,2,yes,,80285,64977,61847,42606,19241,0.783620851,0.523547363,0.260073488,121.875,33.26,3.76,0.02556002,0.906307767,9.076739282,7.585063721,0.975506932,0.778868312,0.872091922,0.075686978,0.572742665,6.295944315,247.6,2.0025,0.189,0.763285024,0.030537405,0.379940115,0.458445,0.75520576,6.283950827,410,0.82,20882.78822,37618.41516,40.14,8.42,1.65
24
+ B38M,Boeing,B737 MAX 8/8-200,2016,2,yes,,82644,68552,65196,43831.6505,21364.3495,0.798025265,0.545375345,0.25264992,121.875,33.26,3.76,0.02556002,0.906307767,9.076739282,7.869374698,0.97906074,0.77729995,0.871570728,0.075098953,0.581003295,6.209094863,247.6,2.0025,0.189,0.763285024,0.031631133,0.382601025,0.458445,0.75520576,6.256185757,410,0.82,20882.78822,37618.41516,40.14,8.42,1.65
25
+ B39M,Boeing,B737 MAX 9,2017,2,yes,,88314,71864,68507,44735.68,23771.32,0.803802342,0.567373236,0.236429105,121.875,33.26,3.76,0.02556002,0.906307767,9.076739282,8.05844544,0.994198601,0.76872365,0.87201018,0.076256786,0.598926212,6.239926908,247.6,2.0025,0.189,0.763285024,0.033089092,0.39018692,0.458445,0.75520576,6.236986266,410,0.82,20882.78822,37618.41516,40.14,8.42,1.65
26
+ B3XM,Boeing,B737 MAX 10,2018,2,yes,,89765,74087,70730,46120,24610,0.787946304,0.513785997,0.274160307,121.875,33.26,3.76,0.02556002,0.906307767,9.076739282,8.179,0.995847683,0.767985398,0.871784191,0.076029992,0.606768804,6.187944799,247.6,2.0025,0.189,0.763285024,0.033556498,0.39018692,0.458445,0.75520576,6.237935869,410,0.82,20882.78822,37618.41516,40.14,8.42,1.65
27
+ B712,Boeing,B717-200,1998,2,no,HGW,54884,47970,44452,30833,13619,0.83058815,0.566121274,0.264466876,92.75,28.4,3.4,0.028664947,0.906307767,8.69606469,8.722339782,1.035797278,0.684750239,0.867306999,0.07298002,0.593541399,4.555779693,179.025,1.8155,0.201,0.7,0.037603724,0.350583851,0.545179375,0.67454851,5.998301413,370.9973753,0.82,20882.78822,37618.41516,30.4725,4.6075,1.65
28
+ B722,Boeing,727-200,1967,2,no,0,83820,71600,64350,45062,19288,0.758291577,0.529587211,0.228704366,157.9,32.92,3.76,0.026090718,0.848048064,6.863371754,7.901954881,1.057801221,0.686729187,0.86502235,0.07205027,0.499213735,3.689723246,203.75625,3.4058625,0.41835,0.77,0.03284992,0.286,0.626595938,0.556514178,4.631875613,420,0.9,24977.42649,36140.62533,16.539375,1.02875,1.65
29
+ B732,Boeing,B737-200,1967,2,no,5,52390,46131,41731,28243,13488,0.822523382,0.517751479,0.304771903,99,28.35,3.76,0.035180302,0.906307767,8.118409091,8.406144658,1.040134437,0.677684157,0.866573271,0.072538149,0.55647915,3.340772824,137.0738462,2.302092308,0.280215385,0.7,0.035879744,0.26934358,0.626585,0.556532787,4.655496203,370,0.82,20882.78822,37618.41516,16.59230769,1.029230769,1.65
30
+ B733,Boeing,B737-300,1984,2,no,3,61236,51982,48081,32616,15465,0.788882357,0.537330982,0.251551375,102,28.9,3.76,0.033854001,0.906307767,8.188333333,9.200303497,1.023913881,0.715234635,0.867001262,0.072169037,0.577795554,4.096979487,187.3,2.014,0.234,0.728575,0.038442568,0.322802793,0.533975,0.687584,5.504887402,390,0.82,20882.78822,37618.41516,23.335,5.1,1.65
31
+ B734,Boeing,B737-400,1988,2,no,6,68039,55792,52465,33416,19049,0.779993827,0.494466409,0.285527418,102.5,28.9,3.76,0.033854001,0.906307767,8.148390244,8.898192984,1.032441891,0.710077823,0.868386618,0.073800023,0.579192045,4.13010135,190.1266667,2.054666667,0.236,0.728575,0.037719014,0.318517837,0.533975,0.687584,5.587042978,370,0.82,20882.78822,37618.41516,23.63333333,5.1,1.65
32
+ B735,Boeing,B737-500,1989,2,no,3,60555,49895,46538,31312,15226,0.76779787,0.517083643,0.250714227,103.7,28.9,3.76,0.033854001,0.906307767,8.054098361,8.33451025,1.009337993,0.721164574,0.869653399,0.074113442,0.550008118,4.05463838,187.3,2.014,0.234,0.728575,0.034586216,0.301940508,0.533975,0.687584,5.694014409,370,0.82,20882.78822,37618.41516,23.335,5.1,1.65
33
+ B736,Boeing,B737-600,1997,2,no,3,65544,54827,51634,36378,15256,0.792383742,0.555016477,0.237367265,124.6,34.3,3.76,0.024033523,0.906307767,9.442134831,7.424658581,0.99420637,0.75916017,0.871081977,0.0751116,0.56354659,5.269028449,189.9709091,1.880909091,0.197454545,0.757525,0.030955608,0.335074122,0.527356818,0.69491914,5.900578607,410,0.82,20882.78822,37618.41516,23.16272727,5.390909091,1.65
34
+ B737,Boeing,B737-700,1997,2,no,3,70080,58241,54839,37648,17191,0.787699772,0.537214612,0.25048516,124.6,34.3,3.76,0.024033523,0.906307767,9.442134831,7.610623423,0.997092665,0.757625964,0.870727093,0.074802808,0.567363946,5.021956077,214.1278261,2.175826087,0.209652174,0.757525,0.031490511,0.323004185,0.530809783,0.691125898,5.90211253,410,0.82,20882.78822,37618.41516,25.6326087,5.239130435,1.65
35
+ B738,Boeing,B737-800,1997,2,no,3,79016,65665,62037,41413,20624,0.780715298,0.524109041,0.256606257,124.6,34.3,3.76,0.024033523,0.906307767,9.442134831,8.181516743,1.00523362,0.753742328,0.86950188,0.073769983,0.581267312,4.983308444,233.3695652,2.432434783,0.218695652,0.757525,0.033462541,0.332681166,0.533381522,0.688252824,5.90333496,410,0.82,20882.78822,37618.41516,27.74869565,5.126086957,1.65
36
+ B739,Boeing,B737-900ER,2006,2,no,2,85139,68856,65227,44677,20550,0.795416906,0.524741893,0.270675014,124.6,34.32,3.76,0.024005521,0.906307767,9.453149278,7.92834468,1.013309441,0.748758647,0.870784513,0.075460257,0.585041361,5.003070394,233.3695652,2.432434783,0.218695652,0.757525,0.032950004,0.326763054,0.533381522,0.688252824,6.102506148,410,0.82,20882.78822,37618.41516,27.74869565,5.126086957,1.65
37
+ B742,Boeing,B747-200B,1971,4,no,4,371900,269660,238780,173032,65748,0.642054316,0.473164829,0.168889486,511,59.64,6.5,0.023756444,0.793353296,6.960723288,7.019056156,1.038495569,0.69161267,0.867976442,0.073665148,0.45831945,5.337545419,882.3333333,9.1104,0.89784,0.81,0.025930712,0.338481202,0.541406667,0.679024462,4.612144185,450,0.9,24977.42649,36140.62533,24.73333333,4.773333333,1.65
38
+ B743,Boeing,B747-300,1980,4,no,0,377800,258060,243363,176533,66830,0.642218105,0.462731604,0.179486501,511,59.64,6.5,0.023756444,0.782608111,6.960723288,6.881751548,1.041627795,0.68253174,0.867287749,0.073197605,0.452943745,5.374951837,898.8126316,9.187157895,0.909452632,0.81,0.025344181,0.337122346,0.541757895,0.678611479,5.0506812,450,0.9,24977.42649,36140.62533,25.81736842,4.757894737,1.65
39
+ B744,Boeing,B747-400,1985,4,no,5,396894,275603,244184,179174,65010,0.620001814,0.450387257,0.169614557,547,64.44,6.5,0.020349121,0.793353296,7.591432541,6.688263979,1.029069691,0.698340832,0.868929586,0.074170378,0.464992693,6.027234116,1021.254118,9.786509804,0.822909804,0.81,0.024511914,0.355811516,0.537298284,0.683798564,5.296210572,450,0.92,26070.46918,35788.4714,30.57901961,4.953921569,1.65
40
+ B748,Boeing,B747-8F,2010,4,no,1,442253,345638,329308,197131,132177,0.743587946,0.445742595,0.297845351,594,68.4,6.5,0.018061113,0.793353296,7.876363636,6.248755182,0.997894651,0.732488325,0.872320594,0.076747175,0.457551278,7.386886339,1199.22,9.808,0.87,0.8299,0.022440249,0.395291631,0.46765875,0.74884564,5.888619001,421.0006562,0.9,24977.42649,36140.62533,42.975,8.015,1.65
41
+ B752,Boeing,B757-200,1982,2,no,4,113400,90890,83820,59740,24080,0.735890653,0.547619048,0.188271605,189,38.06,3.76,0.019519474,0.906307767,7.664357672,7.102482242,0.985678149,0.770287681,0.873576345,0.078107881,0.496548327,5.358463362,357.962,3.6404,0.3454,0.772,0.027960973,0.347178893,0.54209675,0.678212322,5.37738391,420,0.86,22875.41229,36864.52979,26.909,4.743,1.65
42
+ B753,Boeing,B757-300,1998,2,no,2,122470,101610,95260,64455,30805,0.777904793,0.527312811,0.250591982,189,38.06,3.76,0.019519474,0.906307767,7.664357672,7.593716886,1.005262025,0.759572707,0.87301803,0.077746352,0.522123205,5.260668861,357.962,3.6404,0.3454,0.772,0.030631737,0.355109179,0.54209675,0.678212322,5.884200369,430,0.86,22875.41229,36864.52979,26.909,4.743,1.65
43
+ B762,Boeing,B767-200ER,1984,2,no,6,179169,128820,116347,82285,34062,0.658227707,0.459772617,0.19845509,283.3,47.57,5.03,0.022361435,0.852640133,7.987662902,6.962665875,1.012922549,0.718636663,0.871373991,0.076077449,0.50014418,5.891145984,504.4066667,4.8587,0.407266667,0.772,0.027161252,0.367680713,0.537596042,0.683456066,5.407506184,430,0.86,22875.41229,36864.52979,30.22716667,4.940833333,1.65
44
+ B763,Boeing,B767-300,1995,2,no,2,158758,140614,129955,87856,42099,0.795544162,0.542139609,0.253404553,283.3,47.57,5.03,0.022361435,0.852640133,7.987662902,6.296852184,0.988567215,0.730450667,0.872804122,0.077119108,0.469638583,6.001519547,504.4066667,4.8587,0.407266667,0.772,0.02403592,0.353,0.537596042,0.683456066,5.537312075,431.0006562,0.86,22875.41229,36864.52979,30.22716667,4.940833333,1.65
45
+ B764,Boeing,B767-400ER,1999,2,no,1,204116,158757,149685,103510,46175,0.733333007,0.505335202,0.227997805,283.3,51.92,5.03,0.018771397,0.852640133,9.515306742,7.202171898,1.015950634,0.72271456,0.869996123,0.074730057,0.543871305,6.148190272,512.7957895,4.861157895,0.399794737,0.772,0.027844828,0.361414229,0.533975,0.687584,5.831334305,450,0.86,22875.41229,36864.52979,30.55605263,5.1,1.65
46
+ B772,Boeing,B777-200,1994,2,no,6,286900,203922.6667,192735,135692.6667,57042.33333,0.679783897,0.47263855,0.207145347,427.8,60.93,6.2,0.020708613,0.851726902,8.678038569,6.461822217,0.987569999,0.767369197,0.873764241,0.078399473,0.495253823,6.781321287,781.2292857,6.885785714,0.5735,0.8106,0.024180523,0.367,0.490319375,0.730970427,5.71612393,431.0006562,0.89,24441.49186,36319.05391,37.69964286,7.018928571,1.65
47
+ B773,Boeing,B777-300,1997,2,no,4,299370,237680,224530,159300,65230,0.750008351,0.533019341,0.21698901,427.8,60.93,6.2,0.020708613,0.851726902,8.678038569,7.06941142,1.002684301,0.759514113,0.872187708,0.076713703,0.51471757,6.864081938,744.7577778,6.869444444,0.561,0.8106,0.026557394,0.393961604,0.507218472,0.715573354,5.802646414,431.0006562,0.89,24441.49186,36319.05391,36.31444444,6.276111111,1.65
48
+ B77L,Boeing,B777-200LR,2005,2,no,1,347450,223168,209106,145150,63956,0.601833357,0.417757951,0.184075407,427.8,64.8,6.2,0.018308947,0.851726902,9.81542777,6.503715019,0.985544142,0.772137202,0.873492551,0.077988704,0.519417863,7.585117015,1006.5,9.01,0.75,0.8106,0.02389309,0.386398306,0.4859725,0.73464544,5.820183704,431.0006562,0.89,24441.49186,36319.05391,40.985,7.21,1.65
49
+ B77W,Boeing,B777-300ER,2002,2,no,1,351530,251290,237683,167829,69854,0.676110147,0.4773988,0.198711348,427.8,64.8,6.2,0.018308947,0.851726902,9.81542777,7.159075436,0.997868415,0.76653828,0.872013573,0.076372489,0.541566421,7.183146325,1027.8,9.38,0.76,0.8106,0.026449404,0.388746118,0.48893,0.73215776,5.59316908,431.0006562,0.89,24441.49186,36319.05391,42.24,7.08,1.65
50
+ B788,Boeing,B787-8,2009,2,no,1,227930,172365,161025,120000,41025,0.706466898,0.516417321,0.190049577,377,60.12,5.77,0.018422293,0.846193133,9.587306101,6.382579903,0.968083144,0.783757191,0.873178246,0.077083447,0.508399177,8.025698576,633.0491892,4.822891892,0.453081081,0.815425,0.023810747,0.411614512,0.445062466,0.763508702,6.062664522,431.0006562,0.9,24977.42649,36140.62533,42.93635135,9.008243243,1.65
51
+ B789,Boeing,B787-9,2013,2,no,1,254011,192776,181436,129000,52436,0.714287964,0.507261497,0.207026467,377,60.12,5.77,0.018422293,0.846193133,9.587306101,6.477888019,0.968258434,0.783684365,0.873156144,0.077053182,0.508801657,8.027179776,633.0491892,4.822891892,0.453081081,0.815425,0.023856026,0.412147079,0.445062466,0.763508702,6.129298314,431.0334646,0.9,24977.42649,36140.62533,42.93635135,9.008243243,1.65
52
+ B78X,Boeing,B787-10,2017,2,no,,254011,201848,192776,135500,57276,0.758927763,0.533441465,0.225486298,377,60.12,5.77,0.018422293,0.846193133,9.587306101,6.607025807,0.970886833,0.78231171,0.872881338,0.076703182,0.512787007,7.704002339,688.56,5.332568421,0.474731579,0.815425,0.024318041,0.400356131,0.448435,0.76152064,6.188500149,411,0.9,24977.42649,36140.62533,46.44,8.86,1.65
53
+ BCS1,Airbus,A220-100,2013,2,yes,,60781,52844,50802,35702,15100,0.805959099,0.579490301,0.226468798,115,32.5,3.505,0.023261586,0.898794024,9.184782609,7.341279884,0.960595004,0.776436689,0.872616965,0.075848076,0.575972879,6.185990497,200.8,1.438,0.148,0.753623188,0.030392966,0.364818967,0.3931525,0.78523744,6.230436775,410,0.82,20882.78822,37618.41516,36.1,11.29,1.65
54
+ BCS3,Airbus,A220-200,2015,2,yes,,70896,61008,58060,39360,18700,0.818946062,0.523047845,0.295898217,115,32.5,3.505,0.023261586,0.898794024,9.184782609,7.724262518,0.963925925,0.775119863,0.872128778,0.075195994,0.585019236,6.055724131,200.8,1.438,0.148,0.753623188,0.031581624,0.365365479,0.3931525,0.78523744,6.261141077,410,0.82,20882.78822,37618.41516,36.1,11.29,1.65
55
+ CRJ9,Bombardier,CRJ-9,1999,2,yes,0,38329,33345,32092,21845,10247,0.837277257,0.557019489,0.280257768,69,22.62,2.69,0.028284555,0.898794024,7.415426087,7.940977915,1.011391814,0.736978861,0.869436756,0.073972647,0.549943744,4.185393752,120.9433333,1.326366667,0.129766667,0.7527,0.034336494,0.304067923,0.5332925,0.68835296,5.960740978,410,0.85,22367.12483,37049.99171,23.44833333,5.13,1.65
56
+ DC93,Boeing,DC-9-32,1967,2,no,0,48988,44906,39463,25789,13674,0.805564628,0.526435045,0.279129583,93,28.44,3.35,0.027749836,0.913545439,8.697135484,7.952009382,1.029517002,0.718504638,0.868319059,0.073625769,0.565164551,3.47919413,130.48,2.134,0.2732,0.7334,0.034308395,0.2565,0.626643333,0.556433529,4.641949038,370,0.84,21865.62405,37237.40235,16.31,1.026666667,1.65
57
+ E135,Embraer,EMB-135LR,1995,2,no,0,20000,18500,16000,11501,4499,0.79995,0.575,0.22495,51.18,20.04,2.25,0.025211553,0.923879516,7.846846424,8.018356069,1.012322431,0.708748302,0.869299248,0.073869708,0.562009635,3.431268437,66.1,0.7178,0.0898,0.70445,0.036968374,0.27276541,0.5405725,0.68000224,5.917521821,370,0.78,18996.45555,38407.92089,17.22,4.81,1.65
58
+ E145,Embraer,EMB-145LR,1995,2,no,0,22000,19300,17900,12114,5786,0.813636364,0.550636364,0.263,51.18,20.04,2.25,0.025211553,0.923879516,7.846846424,8.379769784,1.017505025,0.706378777,0.868482629,0.073274618,0.569734872,3.597812118,74.32,0.8244,0.095,0.70445,0.038245748,0.292084412,0.54262,0.67759456,5.917909369,370,0.78,18996.45555,38407.92089,19.06,4.72,1.65
59
+ E170,Embraer,EMB-170LR,2002,2,yes,0,37200,32800,29600,20500,9100,0.801075269,0.556451613,0.244623656,72.72,25.3,3.15,0.031003453,0.923879516,8.802117712,8.103,1.005217924,0.744171061,0.869283909,0.073532873,0.598468911,4.066065719,120.114,1.31516,0.12908,0.7334,0.035430036,0.283999174,0.5332925,0.68835296,6.056766771,410,0.82,20882.78822,37618.41516,23.314,5.13,1.65
60
+ E190,Embraer,EMB-190STD,2004,2,yes,,47790,43000,40800,27900,12900,0.853735091,0.583804143,0.269930948,86,27.71,2.74,0.019555011,0.923879516,8.928419767,7.898386381,0.99968373,0.769679725,0.870246567,0.074352897,0.594043088,4.6941615,167.4,1.74,0.176,0.757525,0.033846101,0.310223835,0.5342025,0.68732704,6.07089511,410,0.82,20882.78822,37618.41516,27.3,5.09,1.65
61
+ E195,Embraer,EMB-195STD,2004,2,yes,0,48790,45000,42500,28700,13800,0.871080139,0.588235294,0.282844845,92.53,27.73,3,0.023408456,0.923879516,8.310309089,8.12816248,1.003277121,0.765946572,0.870141166,0.074388188,0.583581105,4.471913613,161.9811765,1.671294118,0.172823529,0.757525,0.034908937,0.310281044,0.5342025,0.68732704,6.07089511,410,0.82,20882.78822,37618.41516,26.53529412,5.09,1.65
62
+ E290,Embraer,E190-E2,2016,2,no,,56400,49050,46700,33000,13700,0.828014184,0.585106383,0.242907801,110,33.72,3,0.0158306,0.923879516,10.33671273,6.992079637,0.949032729,0.805612509,0.873781408,0.077556026,0.57787765,6.546016199,185.58,1.3,0.14,0.758,0.029180534,0.367869793,0.3861,0.786904,6.267767387,410,0.82,20882.78822,37618.41516,33.27,11.6,1.65
63
+ E295,Embraer,E195-E2,2017,2,no,,61500,54000,51850,35750,16100,0.843089431,0.581300813,0.261788618,110,35.12,3,0.014593635,0.923879516,11.21285818,7.518186583,0.955695668,0.804622027,0.872687085,0.075726997,0.613335059,6.348908893,200.6,1.42,0.14,0.758,0.031226955,0.360286236,0.39156,0.78564064,6.281663673,410,0.82,20882.78822,37618.41516,35.76,11.36,1.65
64
+ E75L,Embraer,E170-200 (long wing),2002,2,yes,,40370,34100,32000,21800,10200,0.542234332,0.542234332,0.25043349,83,25,3,0.0288,0.923879516,7.530120482,7.971,1.001508411,0.741368946,0.870818124,0.075084185,0.556390672,3.87871406,120.114,1.31516,0.12908,0.733,0.034519925,0.283998994,0.5332925,0.68835296,6.057293054,410,0.82,20882.78822,37618.41516,23.314,5.13,1.65
65
+ E75S,Embraer,E170-200 (short wing),2002,2,yes,,40370,34100,32000,21800,10200,0.542234332,0.542234332,0.25043349,83,25,3,0.0288,0.923879516,7.530120482,7.845214774,0.999386883,0.742337704,0.871132376,0.075370291,0.552407435,3.91652483,120.114,1.31516,0.12908,0.733,0.033926186,0.283867353,0.5332925,0.68835296,6.057293054,410,0.82,20882.78822,37618.41516,23.314,5.13,1.65
66
+ GLF5,Gulfstream,G-550,1995,2,no,0,41277,34156,24721,21909,2812,0.571432032,0.530779853,0.040652179,105.56,28.5,2.5,0.015389351,0.906307767,7.694676014,6.702319588,0.99471301,0.76525366,0.872752056,0.077203567,0.508157359,5.5011112,137.54,1.494,0.166,0.772,0.029344031,0.367,0.5578625,0.658856,5.849906518,510,0.885,24176.14834,36408.88368,24.95,4.05,1.65
67
+ MD82,Boeing,MD-82,1981,2,no,0,67812,58967,55338,35369,19969,0.816050257,0.521574353,0.294475904,112.3,32.85,3.35,0.020799307,0.923879516,9.60928317,8.955934197,1.034594007,0.714688042,0.866072122,0.0718649,0.612313936,3.987672179,185.48,2.621,0.2743,0.72,0.037613802,0.299388919,0.610813125,0.58259779,5.437458322,370,0.84,21865.62405,37237.40235,19.5075,1.7225,1.65
68
+ MD83,Boeing,MD-83,1984,2,no,0,72575,63276,55338,36145,19193,0.762493972,0.498036514,0.264457458,112.3,32.85,3.35,0.020799307,0.923879516,9.60928317,8.85605389,1.046265541,0.708621624,0.866902498,0.073058432,0.62175399,3.897539841,193.04,2.708,0.2688,0.72,0.037907506,0.290478105,0.611325,0.581776,5.567055426,370,0.84,21865.62405,37237.40235,20.27,1.7,1.65
69
+ RJ1H,BAESystems,RJ-100,1987,4,no,0,44225,40142,37421,25640,11781,0.846150367,0.579762578,0.26638779,77.3,26.34,3.5,0.035312994,0.965925819,8.975363519,9.769273679,1.023211827,0.681862045,0.868995494,0.074011851,0.636811428,3.247264845,124,1.4312,0.1812,0.65,0.042741457,0.274318931,0.533975,0.687584,5.677433606,350,0.734,16954.77401,39369.19067,13,5.1,1.65