pycontrails 0.51.0__cp312-cp312-macosx_10_9_x86_64.whl → 0.51.2__cp312-cp312-macosx_10_9_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.
- pycontrails/_version.py +2 -2
- pycontrails/core/flight.py +44 -6
- pycontrails/core/polygon.py +1 -1
- pycontrails/core/rgi_cython.cpython-312-darwin.so +0 -0
- pycontrails/models/cocip/__init__.py +2 -0
- pycontrails/models/cocip/output_formats.py +165 -0
- pycontrails/models/ps_model/ps_aircraft_params.py +19 -3
- pycontrails/models/ps_model/ps_grid.py +21 -21
- pycontrails/models/ps_model/ps_model.py +41 -6
- pycontrails/models/ps_model/ps_operational_limits.py +15 -6
- pycontrails/models/ps_model/static/{ps-aircraft-params-20240417.csv → ps-aircraft-params-20240524.csv} +16 -12
- pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +103 -0
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/METADATA +2 -1
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/RECORD +18 -17
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/LICENSE +0 -0
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/NOTICE +0 -0
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/WHEEL +0 -0
- {pycontrails-0.51.0.dist-info → pycontrails-0.51.2.dist-info}/top_level.txt +0 -0
pycontrails/_version.py
CHANGED
pycontrails/core/flight.py
CHANGED
|
@@ -728,9 +728,17 @@ class Flight(GeoVectorDataset):
|
|
|
728
728
|
"""
|
|
729
729
|
return units.tas_to_mach_number(true_airspeed, air_temperature)
|
|
730
730
|
|
|
731
|
-
def segment_rocd(
|
|
731
|
+
def segment_rocd(
|
|
732
|
+
self,
|
|
733
|
+
air_temperature: None | npt.NDArray[np.float64] = None,
|
|
734
|
+
) -> npt.NDArray[np.float64]:
|
|
732
735
|
"""Calculate the rate of climb and descent (ROCD).
|
|
733
736
|
|
|
737
|
+
Parameters
|
|
738
|
+
----------
|
|
739
|
+
air_temperature: None | npt.NDArray[np.float64]
|
|
740
|
+
Air temperature of each flight waypoint, [:math:`K`]
|
|
741
|
+
|
|
734
742
|
Returns
|
|
735
743
|
-------
|
|
736
744
|
npt.NDArray[np.float64]
|
|
@@ -740,12 +748,13 @@ class Flight(GeoVectorDataset):
|
|
|
740
748
|
--------
|
|
741
749
|
:func:`segment_rocd`
|
|
742
750
|
"""
|
|
743
|
-
return segment_rocd(self.segment_duration(), self.altitude_ft)
|
|
751
|
+
return segment_rocd(self.segment_duration(), self.altitude_ft, air_temperature)
|
|
744
752
|
|
|
745
753
|
def segment_phase(
|
|
746
754
|
self,
|
|
747
755
|
threshold_rocd: float = 250.0,
|
|
748
756
|
min_cruise_altitude_ft: float = 20000.0,
|
|
757
|
+
air_temperature: None | npt.NDArray[np.float64] = None,
|
|
749
758
|
) -> npt.NDArray[np.uint8]:
|
|
750
759
|
"""Identify the phase of flight (climb, cruise, descent) for each segment.
|
|
751
760
|
|
|
@@ -759,6 +768,8 @@ class Flight(GeoVectorDataset):
|
|
|
759
768
|
This is specific for each aircraft type,
|
|
760
769
|
and can be approximated as 50% of the altitude ceiling.
|
|
761
770
|
Defaults to 20000 ft.
|
|
771
|
+
air_temperature: None | npt.NDArray[np.float64]
|
|
772
|
+
Air temperature of each flight waypoint, [:math:`K`]
|
|
762
773
|
|
|
763
774
|
Returns
|
|
764
775
|
-------
|
|
@@ -773,7 +784,7 @@ class Flight(GeoVectorDataset):
|
|
|
773
784
|
:func:`segment_rocd`
|
|
774
785
|
"""
|
|
775
786
|
return segment_phase(
|
|
776
|
-
self.segment_rocd(),
|
|
787
|
+
self.segment_rocd(air_temperature),
|
|
777
788
|
self.altitude_ft,
|
|
778
789
|
threshold_rocd=threshold_rocd,
|
|
779
790
|
min_cruise_altitude_ft=min_cruise_altitude_ft,
|
|
@@ -1952,6 +1963,7 @@ def filter_altitude(
|
|
|
1952
1963
|
altitude_ft: npt.NDArray[np.float64],
|
|
1953
1964
|
kernel_size: int = 17,
|
|
1954
1965
|
cruise_threshold: float = 120,
|
|
1966
|
+
air_temperature: None | npt.NDArray[np.float64] = None,
|
|
1955
1967
|
) -> npt.NDArray[np.float64]:
|
|
1956
1968
|
"""
|
|
1957
1969
|
Filter noisy altitude on a single flight.
|
|
@@ -1971,6 +1983,8 @@ def filter_altitude(
|
|
|
1971
1983
|
Passed also to :func:`scipy.signal.medfilt`
|
|
1972
1984
|
cruise_theshold : int, optional
|
|
1973
1985
|
Minimal length of time, in seconds, for a flight to be in cruise to apply median filter
|
|
1986
|
+
air_temperature: None | npt.NDArray[np.float64]
|
|
1987
|
+
Air temperature of each flight waypoint, [:math:`K`]
|
|
1974
1988
|
|
|
1975
1989
|
Returns
|
|
1976
1990
|
-------
|
|
@@ -2017,7 +2031,7 @@ def filter_altitude(
|
|
|
2017
2031
|
|
|
2018
2032
|
# Find cruise phase in filtered profile
|
|
2019
2033
|
seg_duration = segment_duration(time)
|
|
2020
|
-
seg_rocd = segment_rocd(seg_duration, altitude_filt)
|
|
2034
|
+
seg_rocd = segment_rocd(seg_duration, altitude_filt, air_temperature)
|
|
2021
2035
|
seg_phase = segment_phase(seg_rocd, altitude_filt)
|
|
2022
2036
|
is_cruise = seg_phase == FlightPhase.CRUISE
|
|
2023
2037
|
|
|
@@ -2153,7 +2167,9 @@ def segment_phase(
|
|
|
2153
2167
|
|
|
2154
2168
|
|
|
2155
2169
|
def segment_rocd(
|
|
2156
|
-
segment_duration: npt.NDArray[np.float64],
|
|
2170
|
+
segment_duration: npt.NDArray[np.float64],
|
|
2171
|
+
altitude_ft: npt.NDArray[np.float64],
|
|
2172
|
+
air_temperature: None | npt.NDArray[np.float64] = None,
|
|
2157
2173
|
) -> npt.NDArray[np.float64]:
|
|
2158
2174
|
"""Calculate the rate of climb and descent (ROCD).
|
|
2159
2175
|
|
|
@@ -2165,12 +2181,22 @@ def segment_rocd(
|
|
|
2165
2181
|
See output from :func:`segment_duration`.
|
|
2166
2182
|
altitude_ft: npt.NDArray[np.float64]
|
|
2167
2183
|
Altitude of each waypoint, [:math:`ft`]
|
|
2184
|
+
air_temperature: None | npt.NDArray[np.float64]
|
|
2185
|
+
Air temperature of each flight waypoint, [:math:`K`]
|
|
2168
2186
|
|
|
2169
2187
|
Returns
|
|
2170
2188
|
-------
|
|
2171
2189
|
npt.NDArray[np.float64]
|
|
2172
2190
|
Rate of climb and descent over segment, [:math:`ft min^{-1}`]
|
|
2173
2191
|
|
|
2192
|
+
Notes
|
|
2193
|
+
-----
|
|
2194
|
+
The hydrostatic equation will be used to estimate the ROCD if `air_temperature` is provided.
|
|
2195
|
+
This will improve the accuracy of the estimated ROCD with a temperature correction. The
|
|
2196
|
+
estimated ROCD with the temperature correction are expected to differ by up to +-5% compared to
|
|
2197
|
+
those without the correction. These differences are important when the ROCD estimates are used
|
|
2198
|
+
as inputs to aircraft performance models.
|
|
2199
|
+
|
|
2174
2200
|
See Also
|
|
2175
2201
|
--------
|
|
2176
2202
|
:func:`segment_duration`
|
|
@@ -2181,7 +2207,19 @@ def segment_rocd(
|
|
|
2181
2207
|
out[:-1] = np.diff(altitude_ft) / dt_min[:-1]
|
|
2182
2208
|
out[-1] = np.nan
|
|
2183
2209
|
|
|
2184
|
-
|
|
2210
|
+
if air_temperature is None:
|
|
2211
|
+
return out
|
|
2212
|
+
|
|
2213
|
+
else:
|
|
2214
|
+
altitude_m = units.ft_to_m(altitude_ft)
|
|
2215
|
+
T_isa = units.m_to_T_isa(altitude_m)
|
|
2216
|
+
|
|
2217
|
+
T_correction = np.empty_like(altitude_ft)
|
|
2218
|
+
T_correction[:-1] = (0.5 * (air_temperature[:-1] + air_temperature[1:])) / (
|
|
2219
|
+
0.5 * (T_isa[:-1] + T_isa[1:])
|
|
2220
|
+
)
|
|
2221
|
+
T_correction[-1] = np.nan
|
|
2222
|
+
return T_correction * out
|
|
2185
2223
|
|
|
2186
2224
|
|
|
2187
2225
|
def _resample_to_freq(df: pd.DataFrame, freq: str) -> tuple[pd.DataFrame, pd.DatetimeIndex]:
|
pycontrails/core/polygon.py
CHANGED
|
@@ -354,7 +354,7 @@ def find_multipolygon(
|
|
|
354
354
|
return shapely.MultiPolygon()
|
|
355
355
|
|
|
356
356
|
assert len(hierarchy) == 1
|
|
357
|
-
hierarchy = hierarchy[0]
|
|
357
|
+
hierarchy = hierarchy[0] # type: ignore[index]
|
|
358
358
|
|
|
359
359
|
polygons = _contours_to_polygons(
|
|
360
360
|
contours, # type: ignore[arg-type]
|
|
Binary file
|
|
@@ -4,6 +4,7 @@ from pycontrails.models.cocip.cocip import Cocip
|
|
|
4
4
|
from pycontrails.models.cocip.cocip_params import CocipFlightParams, CocipParams
|
|
5
5
|
from pycontrails.models.cocip.cocip_uncertainty import CocipUncertaintyParams, habit_dirichlet
|
|
6
6
|
from pycontrails.models.cocip.output_formats import (
|
|
7
|
+
compare_cocip_with_goes,
|
|
7
8
|
contrail_flight_summary_statistics,
|
|
8
9
|
contrails_to_hi_res_grid,
|
|
9
10
|
flight_waypoint_summary_statistics,
|
|
@@ -24,4 +25,5 @@ __all__ = [
|
|
|
24
25
|
"longitude_latitude_grid",
|
|
25
26
|
"natural_cirrus_properties_to_hi_res_grid",
|
|
26
27
|
"time_slice_statistics",
|
|
28
|
+
"compare_cocip_with_goes",
|
|
27
29
|
]
|
|
@@ -14,13 +14,17 @@ This module includes functions to produce additional output formats, including t
|
|
|
14
14
|
(6) Increase spatial resolution of natural cirrus properties, required to estimate the
|
|
15
15
|
high-resolution contrail cirrus coverage for (5).
|
|
16
16
|
See :func:`natural_cirrus_properties_to_hi_res_grid`.
|
|
17
|
+
(7) Comparing simulated contrails from CoCiP with GOES satellite imagery.
|
|
18
|
+
See :func:`compare_cocip_with_goes`.
|
|
17
19
|
"""
|
|
18
20
|
|
|
19
21
|
from __future__ import annotations
|
|
20
22
|
|
|
23
|
+
import pathlib
|
|
21
24
|
import warnings
|
|
22
25
|
from collections.abc import Hashable
|
|
23
26
|
|
|
27
|
+
import matplotlib.pyplot as plt
|
|
24
28
|
import numpy as np
|
|
25
29
|
import numpy.typing as npt
|
|
26
30
|
import pandas as pd
|
|
@@ -28,6 +32,7 @@ import xarray as xr
|
|
|
28
32
|
|
|
29
33
|
from pycontrails.core.met import MetDataArray, MetDataset
|
|
30
34
|
from pycontrails.core.vector import GeoVectorDataset, vector_to_lon_lat_grid
|
|
35
|
+
from pycontrails.datalib.goes import GOES, extract_goes_visualization
|
|
31
36
|
from pycontrails.models.cocip.contrail_properties import contrail_edges, plume_mass_per_distance
|
|
32
37
|
from pycontrails.models.cocip.radiative_forcing import albedo
|
|
33
38
|
from pycontrails.models.humidity_scaling import HumidityScaling
|
|
@@ -2077,3 +2082,163 @@ def _repeat_rows_and_columns(
|
|
|
2077
2082
|
|
|
2078
2083
|
# Do not repeat final row and column as they are on the edge
|
|
2079
2084
|
return array_2d_rep[: -(n_reps - 1), : -(n_reps - 1)]
|
|
2085
|
+
|
|
2086
|
+
|
|
2087
|
+
# -----------------------------------------
|
|
2088
|
+
# Compare CoCiP outputs with GOES satellite
|
|
2089
|
+
# -----------------------------------------
|
|
2090
|
+
|
|
2091
|
+
|
|
2092
|
+
def compare_cocip_with_goes(
|
|
2093
|
+
time: np.timedelta64 | pd.Timestamp,
|
|
2094
|
+
flight: GeoVectorDataset | pd.DataFrame,
|
|
2095
|
+
contrail: GeoVectorDataset | pd.DataFrame,
|
|
2096
|
+
*,
|
|
2097
|
+
spatial_bbox: tuple[float, float, float, float] = (-160.0, -80.0, 10.0, 80.0),
|
|
2098
|
+
region: str = "F",
|
|
2099
|
+
path_write_img: pathlib.Path | None = None,
|
|
2100
|
+
) -> None | pathlib.Path:
|
|
2101
|
+
r"""
|
|
2102
|
+
Compare simulated persistent contrails from CoCiP with GOES satellite imagery.
|
|
2103
|
+
|
|
2104
|
+
Parameters
|
|
2105
|
+
----------
|
|
2106
|
+
time : np.timedelta64 | pd.Timestamp
|
|
2107
|
+
Time of GOES satellite image.
|
|
2108
|
+
flight : GeoVectorDataset | pd.DataFrame
|
|
2109
|
+
Flight waypoints.
|
|
2110
|
+
Best to use the returned output :class:`Flight` from
|
|
2111
|
+
:meth:`pycontrails.models.cocip.Cocip.eval`.
|
|
2112
|
+
contrail : GeoVectorDataset | pd.DataFrame,
|
|
2113
|
+
Contrail evolution outputs (:attr:`pycontrails.models.cocip.Cocip.contrail`)
|
|
2114
|
+
set during :meth:`pycontrails.models.cocip.Cocip.eval`.
|
|
2115
|
+
spatial_bbox : tuple[float, float, float, float]
|
|
2116
|
+
Spatial bounding box, ``(lon_min, lat_min, lon_max, lat_max)``, [:math:`\deg`]
|
|
2117
|
+
region : str
|
|
2118
|
+
'F' for full disk (image provided every 10 m), and 'C' for CONUS (image provided every 5 m)
|
|
2119
|
+
path_write_img : None | pathlib.Path
|
|
2120
|
+
File path to save the CoCiP-GOES image.
|
|
2121
|
+
|
|
2122
|
+
Returns
|
|
2123
|
+
-------
|
|
2124
|
+
None | pathlib.Path
|
|
2125
|
+
File path of saved CoCiP-GOES image if ``path_write_img`` is provided.
|
|
2126
|
+
"""
|
|
2127
|
+
|
|
2128
|
+
try:
|
|
2129
|
+
import cartopy.crs as ccrs
|
|
2130
|
+
from cartopy.mpl.ticker import LatitudeFormatter, LongitudeFormatter
|
|
2131
|
+
except ModuleNotFoundError as e:
|
|
2132
|
+
dependencies.raise_module_not_found_error(
|
|
2133
|
+
name="compare_cocip_with_goes function",
|
|
2134
|
+
package_name="cartopy",
|
|
2135
|
+
module_not_found_error=e,
|
|
2136
|
+
pycontrails_optional_package="goes",
|
|
2137
|
+
)
|
|
2138
|
+
|
|
2139
|
+
# Round `time` to nearest GOES image time slice
|
|
2140
|
+
if isinstance(time, np.timedelta64):
|
|
2141
|
+
time = pd.to_datetime(time)
|
|
2142
|
+
|
|
2143
|
+
if region == "F":
|
|
2144
|
+
time = time.round("10min")
|
|
2145
|
+
elif region == "C":
|
|
2146
|
+
time = time.round("5min")
|
|
2147
|
+
else:
|
|
2148
|
+
raise AssertionError("`region` only accepts inputs of `F` (full disk) or `C` (CONUS)")
|
|
2149
|
+
|
|
2150
|
+
_flight = GeoVectorDataset(flight)
|
|
2151
|
+
_contrail = GeoVectorDataset(contrail)
|
|
2152
|
+
|
|
2153
|
+
# Ensure the required columns are included in `flight_waypoints` and `contrails`
|
|
2154
|
+
_flight.ensure_vars(["flight_id", "waypoint"])
|
|
2155
|
+
_contrail.ensure_vars(
|
|
2156
|
+
["flight_id", "waypoint", "sin_a", "cos_a", "width", "tau_contrail", "age_hours"]
|
|
2157
|
+
)
|
|
2158
|
+
|
|
2159
|
+
# Downselect `_flight` only to spatial domain covered by GOES full disk
|
|
2160
|
+
is_in_lon = _flight.dataframe["longitude"].between(spatial_bbox[0], spatial_bbox[2])
|
|
2161
|
+
is_in_lat = _flight.dataframe["latitude"].between(spatial_bbox[1], spatial_bbox[3])
|
|
2162
|
+
is_in_lon_lat = is_in_lon & is_in_lat
|
|
2163
|
+
|
|
2164
|
+
if not np.any(is_in_lon_lat):
|
|
2165
|
+
warnings.warn(
|
|
2166
|
+
"Flight trajectory does not intersect with the defined spatial bounding box or spatial "
|
|
2167
|
+
"domain covered by GOES."
|
|
2168
|
+
)
|
|
2169
|
+
|
|
2170
|
+
_flight = _flight.filter(is_in_lon_lat)
|
|
2171
|
+
|
|
2172
|
+
# Filter `_flight` if time bounds were previously defined.
|
|
2173
|
+
is_before_time = _flight["time"] < time
|
|
2174
|
+
|
|
2175
|
+
if not np.any(is_before_time):
|
|
2176
|
+
warnings.warn("No flight waypoints were recorded before the specified `time`.")
|
|
2177
|
+
|
|
2178
|
+
_flight = _flight.filter(is_before_time)
|
|
2179
|
+
|
|
2180
|
+
# Downselect `_contrail` only to include the filtered flight waypoints
|
|
2181
|
+
is_in_domain = _contrail.dataframe["waypoint"].isin(_flight["waypoint"])
|
|
2182
|
+
|
|
2183
|
+
if not np.any(is_in_domain):
|
|
2184
|
+
warnings.warn(
|
|
2185
|
+
"No persistent contrails were formed within the defined spatial bounding box."
|
|
2186
|
+
)
|
|
2187
|
+
|
|
2188
|
+
_contrail = _contrail.filter(is_in_domain)
|
|
2189
|
+
|
|
2190
|
+
# Download GOES image at `time`
|
|
2191
|
+
goes = GOES(region=region)
|
|
2192
|
+
da = goes.get(time)
|
|
2193
|
+
rgb, transform, extent = extract_goes_visualization(da)
|
|
2194
|
+
bbox = spatial_bbox[0], spatial_bbox[2], spatial_bbox[1], spatial_bbox[3]
|
|
2195
|
+
|
|
2196
|
+
# Calculate optimal figure dimensions
|
|
2197
|
+
d_lon = spatial_bbox[2] - spatial_bbox[0]
|
|
2198
|
+
d_lat = spatial_bbox[3] - spatial_bbox[1]
|
|
2199
|
+
x_dim = 9.99
|
|
2200
|
+
y_dim = x_dim * (d_lat / d_lon)
|
|
2201
|
+
|
|
2202
|
+
# Plot data
|
|
2203
|
+
fig = plt.figure(figsize=(1.2 * x_dim, y_dim))
|
|
2204
|
+
pc = ccrs.PlateCarree()
|
|
2205
|
+
ax = fig.add_subplot(projection=pc, extent=bbox)
|
|
2206
|
+
ax.coastlines() # type: ignore[attr-defined]
|
|
2207
|
+
ax.imshow(rgb, extent=extent, transform=transform)
|
|
2208
|
+
|
|
2209
|
+
ax.set_xticks([spatial_bbox[0], spatial_bbox[2]], crs=ccrs.PlateCarree())
|
|
2210
|
+
ax.set_yticks([spatial_bbox[1], spatial_bbox[3]], crs=ccrs.PlateCarree())
|
|
2211
|
+
lon_formatter = LongitudeFormatter(zero_direction_label=True)
|
|
2212
|
+
lat_formatter = LatitudeFormatter()
|
|
2213
|
+
ax.xaxis.set_major_formatter(lon_formatter)
|
|
2214
|
+
ax.yaxis.set_major_formatter(lat_formatter)
|
|
2215
|
+
|
|
2216
|
+
# Plot flight trajectory up to `time`
|
|
2217
|
+
ax.plot(_flight["longitude"], _flight["latitude"], c="k", linewidth=2.5)
|
|
2218
|
+
plt.legend(["Flight trajectory"])
|
|
2219
|
+
|
|
2220
|
+
# Plot persistent contrails at `time`
|
|
2221
|
+
is_time = (_contrail["time"] == time) & (~np.isnan(_contrail["age_hours"]))
|
|
2222
|
+
im = ax.scatter(
|
|
2223
|
+
_contrail["longitude"][is_time],
|
|
2224
|
+
_contrail["latitude"][is_time],
|
|
2225
|
+
c=_contrail["tau_contrail"][is_time],
|
|
2226
|
+
s=4,
|
|
2227
|
+
cmap="YlOrRd_r",
|
|
2228
|
+
vmin=0,
|
|
2229
|
+
vmax=0.2,
|
|
2230
|
+
)
|
|
2231
|
+
cbar = plt.colorbar(im)
|
|
2232
|
+
cbar.set_label(r"$\tau_{\rm contrail}$")
|
|
2233
|
+
ax.set_title(f"{time}")
|
|
2234
|
+
plt.tight_layout()
|
|
2235
|
+
|
|
2236
|
+
# return output path if `path_write_img` is not None
|
|
2237
|
+
if path_write_img is not None:
|
|
2238
|
+
t_str = time.strftime("%Y%m%d_%H%M%S")
|
|
2239
|
+
file_name = f"goes_{t_str}.png"
|
|
2240
|
+
output_path = path_write_img.joinpath(file_name)
|
|
2241
|
+
plt.savefig(output_path, dpi=150, bbox_inches="tight")
|
|
2242
|
+
plt.close()
|
|
2243
|
+
|
|
2244
|
+
return output_path
|
|
@@ -14,7 +14,7 @@ import pandas as pd
|
|
|
14
14
|
from pycontrails.physics import constants as c
|
|
15
15
|
|
|
16
16
|
#: Path to the Poll-Schumann aircraft parameters CSV file.
|
|
17
|
-
PS_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-aircraft-params-
|
|
17
|
+
PS_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-aircraft-params-20240524.csv"
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -192,8 +192,23 @@ def _row_to_aircraft_engine_params(tup: Any) -> tuple[str, PSAircraftEngineParam
|
|
|
192
192
|
|
|
193
193
|
|
|
194
194
|
@functools.cache
|
|
195
|
-
def load_aircraft_engine_params(
|
|
196
|
-
|
|
195
|
+
def load_aircraft_engine_params(
|
|
196
|
+
engine_deterioration_factor: float = 0.025,
|
|
197
|
+
) -> Mapping[str, PSAircraftEngineParams]:
|
|
198
|
+
"""
|
|
199
|
+
Extract aircraft-engine parameters for each aircraft type supported by the PS model.
|
|
200
|
+
|
|
201
|
+
Parameters
|
|
202
|
+
----------
|
|
203
|
+
engine_deterioration_factor: float
|
|
204
|
+
Account for "in-service" engine deterioration between maintenance cycles.
|
|
205
|
+
Default value reduces `eta_1` by 2.5%, which increases the fuel flow estimates by 2.5%.
|
|
206
|
+
|
|
207
|
+
Returns
|
|
208
|
+
-------
|
|
209
|
+
Mapping[str, PSAircraftEngineParams]
|
|
210
|
+
Aircraft-engine parameters for each aircraft type supported by the PS model.
|
|
211
|
+
"""
|
|
197
212
|
dtypes = {
|
|
198
213
|
"ICAO": object,
|
|
199
214
|
"Manufacturer": object,
|
|
@@ -239,6 +254,7 @@ def load_aircraft_engine_params() -> Mapping[str, PSAircraftEngineParams]:
|
|
|
239
254
|
}
|
|
240
255
|
|
|
241
256
|
df = pd.read_csv(PS_FILE_PATH, dtype=dtypes)
|
|
257
|
+
df["eta_1"] = df["eta_1"] * (1.0 - engine_deterioration_factor)
|
|
242
258
|
|
|
243
259
|
return dict(_row_to_aircraft_engine_params(tup) for tup in df.itertuples(index=False))
|
|
244
260
|
|
|
@@ -83,7 +83,7 @@ class PSGrid(AircraftPerformanceGrid):
|
|
|
83
83
|
from the :attr:`met` attribute of the :class:`PSGrid` instance.
|
|
84
84
|
The aircraft type is taken from ``source.attrs["aircraft_type"]``. If this field
|
|
85
85
|
is not present, ``params["aircraft_type"]`` is used instead. See the
|
|
86
|
-
static CSV file :file:`ps-aircraft-params-
|
|
86
|
+
static CSV file :file:`ps-aircraft-params-20240524.csv` for a list of supported
|
|
87
87
|
aircraft types.
|
|
88
88
|
**params : Any
|
|
89
89
|
Override the default parameters of the :class:`PSGrid` instance.
|
|
@@ -389,32 +389,32 @@ def ps_nominal_grid(
|
|
|
389
389
|
>>> perf.to_dataframe()
|
|
390
390
|
aircraft_mass engine_efficiency fuel_flow
|
|
391
391
|
level
|
|
392
|
-
200.0 58416.
|
|
393
|
-
210.0 61617.
|
|
394
|
-
220.0 64829.702583 0.
|
|
395
|
-
230.0 68026.
|
|
396
|
-
240.0 71187.
|
|
397
|
-
250.0
|
|
398
|
-
260.0
|
|
399
|
-
270.0
|
|
400
|
-
280.0
|
|
401
|
-
290.0
|
|
392
|
+
200.0 58416.230843 0.300958 0.575635
|
|
393
|
+
210.0 61617.676624 0.300958 0.604417
|
|
394
|
+
220.0 64829.702583 0.300958 0.633199
|
|
395
|
+
230.0 68026.415695 0.300958 0.662998
|
|
396
|
+
240.0 71187.897060 0.300958 0.694631
|
|
397
|
+
250.0 71775.399825 0.300824 0.703349
|
|
398
|
+
260.0 71765.716737 0.300363 0.708259
|
|
399
|
+
270.0 71752.405400 0.299671 0.714514
|
|
400
|
+
280.0 71736.129079 0.298823 0.721878
|
|
401
|
+
290.0 71717.392170 0.297875 0.730169
|
|
402
402
|
|
|
403
403
|
>>> # Now compute it for a higher Mach number
|
|
404
404
|
>>> perf = ps_nominal_grid("A320", level=level, mach_number=0.78)
|
|
405
405
|
>>> perf.to_dataframe()
|
|
406
406
|
aircraft_mass engine_efficiency fuel_flow
|
|
407
407
|
level
|
|
408
|
-
200.0
|
|
409
|
-
210.0 60626.062062 0.
|
|
410
|
-
220.0 63818.
|
|
411
|
-
230.0 66993.
|
|
412
|
-
240.0 70129.930503 0.
|
|
413
|
-
250.0
|
|
414
|
-
260.0
|
|
415
|
-
270.0
|
|
416
|
-
280.0
|
|
417
|
-
290.0
|
|
408
|
+
200.0 57941.825236 0.306598 0.596100
|
|
409
|
+
210.0 60626.062062 0.306605 0.621331
|
|
410
|
+
220.0 63818.498306 0.306605 0.650918
|
|
411
|
+
230.0 66993.691517 0.306605 0.681551
|
|
412
|
+
240.0 70129.930503 0.306605 0.714069
|
|
413
|
+
250.0 71703.009059 0.306560 0.732944
|
|
414
|
+
260.0 71690.188652 0.306239 0.739276
|
|
415
|
+
270.0 71673.392089 0.305694 0.747052
|
|
416
|
+
280.0 71653.431321 0.304997 0.755990
|
|
417
|
+
290.0 71630.901315 0.304201 0.765883
|
|
418
418
|
"""
|
|
419
419
|
coords: dict[str, Any] | xrcc.DataArrayCoordinates
|
|
420
420
|
if isinstance(air_temperature, xr.DataArray):
|
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
|
+
import functools
|
|
7
|
+
import pathlib
|
|
6
8
|
from collections.abc import Mapping
|
|
7
9
|
from typing import Any, NoReturn, overload
|
|
8
10
|
|
|
9
11
|
import numpy as np
|
|
10
12
|
import numpy.typing as npt
|
|
13
|
+
import pandas as pd
|
|
11
14
|
from overrides import overrides
|
|
12
15
|
|
|
13
16
|
from pycontrails.core import flight
|
|
@@ -30,6 +33,9 @@ from pycontrails.utils.types import ArrayOrFloat
|
|
|
30
33
|
|
|
31
34
|
# mypy: disable-error-code = "type-var, arg-type"
|
|
32
35
|
|
|
36
|
+
#: Path to the Poll-Schumann aircraft parameters CSV file.
|
|
37
|
+
PS_SYNONYM_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-synonym-list-20240524.csv"
|
|
38
|
+
|
|
33
39
|
|
|
34
40
|
@dataclasses.dataclass
|
|
35
41
|
class PSFlightParams(AircraftPerformanceParams):
|
|
@@ -39,6 +45,13 @@ class PSFlightParams(AircraftPerformanceParams):
|
|
|
39
45
|
#: efficiency to always exceed this value.
|
|
40
46
|
eta_over_eta_b_min: float | None = 0.5
|
|
41
47
|
|
|
48
|
+
#: Account for "in-service" engine deterioration between maintenance cycles.
|
|
49
|
+
#: Default value is set to +2.5% increase in fuel consumption.
|
|
50
|
+
# Reference:
|
|
51
|
+
# Gurrola Arrieta, M.D.J., Botez, R.M. and Lasne, A., 2024. An Engine Deterioration Model for
|
|
52
|
+
# Predicting Fuel Consumption Impact in a Regional Aircraft. Aerospace, 11(6), p.426.
|
|
53
|
+
engine_deterioration_factor: float = 0.025
|
|
54
|
+
|
|
42
55
|
|
|
43
56
|
class PSFlight(AircraftPerformance):
|
|
44
57
|
"""Simulate aircraft performance using Poll-Schumann (PS) model.
|
|
@@ -68,7 +81,10 @@ class PSFlight(AircraftPerformance):
|
|
|
68
81
|
**params_kwargs: Any,
|
|
69
82
|
) -> None:
|
|
70
83
|
super().__init__(met=met, params=params, **params_kwargs)
|
|
71
|
-
self.aircraft_engine_params = load_aircraft_engine_params(
|
|
84
|
+
self.aircraft_engine_params = load_aircraft_engine_params(
|
|
85
|
+
self.params["engine_deterioration_factor"]
|
|
86
|
+
)
|
|
87
|
+
self.synonym_dict = get_aircraft_synonym_dict_ps()
|
|
72
88
|
|
|
73
89
|
def check_aircraft_type_availability(
|
|
74
90
|
self, aircraft_type: str, raise_error: bool = True
|
|
@@ -92,7 +108,7 @@ class PSFlight(AircraftPerformance):
|
|
|
92
108
|
KeyError
|
|
93
109
|
raises KeyError if the aircraft type is not covered by database
|
|
94
110
|
"""
|
|
95
|
-
if aircraft_type in self.aircraft_engine_params:
|
|
111
|
+
if aircraft_type in self.aircraft_engine_params or aircraft_type in self.synonym_dict:
|
|
96
112
|
return True
|
|
97
113
|
if raise_error:
|
|
98
114
|
msg = f"Aircraft type {aircraft_type} not covered by the PS model."
|
|
@@ -125,13 +141,15 @@ class PSFlight(AircraftPerformance):
|
|
|
125
141
|
raise KeyError(msg) from exc
|
|
126
142
|
|
|
127
143
|
try:
|
|
128
|
-
|
|
144
|
+
atyp_ps = self.synonym_dict.get(aircraft_type) or aircraft_type
|
|
145
|
+
aircraft_params = self.aircraft_engine_params[atyp_ps]
|
|
129
146
|
except KeyError as exc:
|
|
130
147
|
msg = f"Aircraft type {aircraft_type} not covered by the PS model."
|
|
131
148
|
raise KeyError(msg) from exc
|
|
132
149
|
|
|
133
150
|
# Set flight attributes based on engine, if they aren't already defined
|
|
134
151
|
self.source.attrs.setdefault("aircraft_performance_model", self.name)
|
|
152
|
+
self.source.attrs.setdefault("aircraft_type_ps", atyp_ps)
|
|
135
153
|
self.source.attrs.setdefault("n_engine", aircraft_params.n_engine)
|
|
136
154
|
|
|
137
155
|
self.source.attrs.setdefault("wingspan", aircraft_params.wing_span)
|
|
@@ -148,7 +166,7 @@ class PSFlight(AircraftPerformance):
|
|
|
148
166
|
|
|
149
167
|
# Run the simulation
|
|
150
168
|
aircraft_performance = self.simulate_fuel_and_performance(
|
|
151
|
-
aircraft_type=
|
|
169
|
+
aircraft_type=atyp_ps,
|
|
152
170
|
altitude_ft=self.source.altitude_ft,
|
|
153
171
|
time=self.source["time"],
|
|
154
172
|
true_airspeed=true_airspeed,
|
|
@@ -242,7 +260,7 @@ class PSFlight(AircraftPerformance):
|
|
|
242
260
|
|
|
243
261
|
elif isinstance(time, np.ndarray):
|
|
244
262
|
dt_sec = flight.segment_duration(time, dtype=altitude_ft.dtype)
|
|
245
|
-
rocd = flight.segment_rocd(dt_sec, altitude_ft)
|
|
263
|
+
rocd = flight.segment_rocd(dt_sec, altitude_ft, air_temperature)
|
|
246
264
|
dv_dt = jet.acceleration(true_airspeed, dt_sec)
|
|
247
265
|
theta = jet.climb_descent_angle(true_airspeed, rocd)
|
|
248
266
|
|
|
@@ -299,7 +317,7 @@ class PSFlight(AircraftPerformance):
|
|
|
299
317
|
|
|
300
318
|
# Flight phase
|
|
301
319
|
segment_duration = flight.segment_duration(time, dtype=altitude_ft.dtype)
|
|
302
|
-
rocd = flight.segment_rocd(segment_duration, altitude_ft)
|
|
320
|
+
rocd = flight.segment_rocd(segment_duration, altitude_ft, air_temperature)
|
|
303
321
|
|
|
304
322
|
if correct_fuel_flow:
|
|
305
323
|
flight_phase = flight.segment_phase(rocd, altitude_ft)
|
|
@@ -980,3 +998,20 @@ def fuel_flow_correction(
|
|
|
980
998
|
descent = flight_phase == flight.FlightPhase.DESCENT
|
|
981
999
|
ff_max[descent] = 0.3 * fuel_flow_max_sls
|
|
982
1000
|
return np.clip(fuel_flow, ff_min, ff_max)
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
@functools.cache
|
|
1004
|
+
def get_aircraft_synonym_dict_ps() -> dict[str, str]:
|
|
1005
|
+
"""Read `ps-synonym-list-20240524.csv` from the static directory.
|
|
1006
|
+
|
|
1007
|
+
Returns
|
|
1008
|
+
-------
|
|
1009
|
+
dict[str, str]
|
|
1010
|
+
Dictionary of the form ``{"icao_aircraft_type": "ps_aircraft_type"}``.
|
|
1011
|
+
"""
|
|
1012
|
+
# get path to static PS synonym list
|
|
1013
|
+
synonym_path = pathlib.Path(__file__).parent / "static" / "ps-synonym-list-20240524.csv"
|
|
1014
|
+
df_atyp_icao_to_ps = pd.read_csv(
|
|
1015
|
+
synonym_path, usecols=["ICAO Aircraft Code", "PS ATYP"], index_col=0
|
|
1016
|
+
)
|
|
1017
|
+
return df_atyp_icao_to_ps.squeeze("columns").to_dict()
|
|
@@ -118,7 +118,7 @@ def max_available_thrust_coefficient(
|
|
|
118
118
|
c_t_eta_b: ArrayOrFloat,
|
|
119
119
|
atyp_param: PSAircraftEngineParams,
|
|
120
120
|
*,
|
|
121
|
-
buffer: float = 0.
|
|
121
|
+
buffer: float = 0.20,
|
|
122
122
|
) -> ArrayOrFloat:
|
|
123
123
|
"""
|
|
124
124
|
Calculate maximum available thrust coefficient.
|
|
@@ -134,8 +134,8 @@ def max_available_thrust_coefficient(
|
|
|
134
134
|
atyp_param : PSAircraftEngineParams
|
|
135
135
|
Extracted aircraft and engine parameters.
|
|
136
136
|
buffer : float, optional
|
|
137
|
-
Additional buffer for maximum
|
|
138
|
-
which increases the maximum
|
|
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
139
|
|
|
140
140
|
Returns
|
|
141
141
|
-------
|
|
@@ -148,9 +148,10 @@ def max_available_thrust_coefficient(
|
|
|
148
148
|
atyp_param.tet_mcc,
|
|
149
149
|
atyp_param.tr_ec,
|
|
150
150
|
atyp_param.m_ec,
|
|
151
|
+
buffer=buffer,
|
|
151
152
|
)
|
|
152
153
|
c_t_max_over_c_t_eta_b = 1.0 + 2.5 * (tr_max - 1.0)
|
|
153
|
-
return c_t_max_over_c_t_eta_b * c_t_eta_b
|
|
154
|
+
return c_t_max_over_c_t_eta_b * c_t_eta_b
|
|
154
155
|
|
|
155
156
|
|
|
156
157
|
def get_excess_thrust_available(
|
|
@@ -234,6 +235,8 @@ def _normalised_max_throttle_parameter(
|
|
|
234
235
|
tet_mcc: float,
|
|
235
236
|
tr_ec: float,
|
|
236
237
|
m_ec: float,
|
|
238
|
+
*,
|
|
239
|
+
buffer: float = 0.20,
|
|
237
240
|
) -> ArrayOrFloat:
|
|
238
241
|
"""
|
|
239
242
|
Calculate normalised maximum throttle parameter.
|
|
@@ -251,6 +254,10 @@ def _normalised_max_throttle_parameter(
|
|
|
251
254
|
temperature for maximum overall efficiency.
|
|
252
255
|
m_ec : float
|
|
253
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.
|
|
254
261
|
|
|
255
262
|
Returns
|
|
256
263
|
-------
|
|
@@ -263,8 +270,10 @@ def _normalised_max_throttle_parameter(
|
|
|
263
270
|
entry to the freestream total temperature, normalised with its value for maximum engine
|
|
264
271
|
overall efficiency at the same freestream Mach number.
|
|
265
272
|
"""
|
|
266
|
-
return (
|
|
267
|
-
|
|
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)
|
|
268
277
|
)
|
|
269
278
|
|
|
270
279
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
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
|
-
|
|
2
|
+
A20N,Airbus,A320-NEO,2014,2,yes,54,79000,66300,62800,43600,19200,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,77300,73000,48000,25000,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
|
|
3
4
|
A306,Airbus,A300B4-600R,1983,2,no,0,170500,140000,130000,86220,43780,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,134000,124000,88505,35495,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
|
|
4
6
|
A310,Airbus,A310-200,1982,2,no,8,138600,122000,112000,79207,32793,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
|
|
5
7
|
A313,Airbus,A310-300,1982,2,no,0,150000,123000,113000,77397,35603,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
|
|
6
8
|
A318,Airbus,A318-100,2002,2,no,5,68000,57500,53000,38818,14182,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
|
|
@@ -18,7 +20,11 @@ A346,Airbus,A340-600,2001,4,no,1,368000,259000,245000,176364,68636,0.66576087,0.
|
|
|
18
20
|
A359,Airbus,A350-900,2013,2,no,9,275000,207000,195700,146600,49100,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
|
|
19
21
|
A35K,Airbus,A350-1000,2016,2,yes,2,316000,236000,223000,156000,67000,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
|
|
20
22
|
A388,Airbus,A380-800,2005,4,no,2,569000,391000,366000,275000,91000,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,66043,62913,42033,20880,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,69308,65952,45072,20880,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,74343,70987,50107,20880,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
|
|
21
26
|
B712,Boeing,B717-200,1998,2,no,HGW,54884,49898,45586,31071,14515,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
|
|
27
|
+
B722,Boeing,727-200,1967,2,no,0,83820,70100,63560,44390,19170,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
|
|
22
28
|
B732,Boeing,B737-200,1967,2,no,5,52390,46720,43092,27125,15967,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
|
|
23
29
|
B733,Boeing,B737-300,1984,2,no,3,61236,51710,48308,32904,15404,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
|
|
24
30
|
B734,Boeing,B737-400,1988,2,no,6,68039,56246,53070,33643,19427,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
|
|
@@ -27,9 +33,6 @@ B736,Boeing,B737-600,1997,2,no,3,65544,55112,51936,36378,15558,0.792383742,0.555
|
|
|
27
33
|
B737,Boeing,B737-700,1997,2,no,3,70080,58604,55202,37648,17554,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
|
|
28
34
|
B738,Boeing,B737-800,1997,2,no,3,79016,66361,61689,41413,20276,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
|
|
29
35
|
B739,Boeing,B737-900ER,2006,2,no,2,85139,71350,67721,44676,23045,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
|
|
30
|
-
B37M,Boeing,B737 MAX 7,2018,2,yes,,80285,66043,62913,42033,20880,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
|
|
31
|
-
B38M,Boeing,B737 MAX 8/8-200,2016,2,yes,,82644,69308,65952,45072,20880,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
|
|
32
|
-
B39M,Boeing,B737 MAX 9,2017,2,yes,,88314,74343,70987,50107,20880,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
|
|
33
36
|
B742,Boeing,B747-200B,1971,4,no,4,371900,285700,238780,175970,62810,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
|
|
34
37
|
B743,Boeing,B747-300,1980,4,no,0,377800,260320,242630,174820,67810,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
|
|
35
38
|
B744,Boeing,B747-400,1985,4,no,5,396894,285764,246075,178756,67319,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
|
|
@@ -39,26 +42,27 @@ B753,Boeing,B757-300,1998,2,no,2,122470,101610,95270,64580,30690,0.777904793,0.5
|
|
|
39
42
|
B762,Boeing,B767-200ER,1984,2,no,6,179169,136078,117934,82377,35557,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
|
|
40
43
|
B763,Boeing,B767-300,1995,2,no,2,158758,136078,126299,86069,40230,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
|
|
41
44
|
B764,Boeing,B767-400ER,1999,2,no,1,204116,158757,149685,103147,46538,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
|
|
42
|
-
B77L,Boeing,B777-200LR,2005,2,no,1,347450,223168,209107,145150,63957,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
|
|
43
45
|
B772,Boeing,B777-200,1994,2,no,6,286900,206350,195030,135600,59430,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
|
|
44
|
-
B77W,Boeing,B777-300ER,2002,2,no,1,351530,251290,237673,167820,69853,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
|
|
45
46
|
B773,Boeing,B777-300,1997,2,no,4,299370,237680,224530,159570,64960,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
|
|
47
|
+
B77L,Boeing,B777-200LR,2005,2,no,1,347450,223168,209107,145150,63957,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
|
|
48
|
+
B77W,Boeing,B777-300ER,2002,2,no,1,351530,251290,237673,167820,69853,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
|
|
46
49
|
B788,Boeing,B787-8,2009,2,no,1,227930,172365,161025,117707,43318,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
|
|
47
50
|
B789,Boeing,B787-9,2013,2,no,1,254011,192777,181437,128850,52587,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
|
|
48
51
|
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
|
|
49
52
|
BCS1,Airbus,A220-100,2013,2,yes,,60781,51029,48987,35222,13765,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
|
|
50
53
|
BCS3,Airbus,A220-200,2015,2,yes,,70896,61008,58060,37082,20978,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
|
|
54
|
+
CRJ9,Bombardier,CRJ-9,1999,2,yes,0,38329,34065,32092,21350,10742,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
|
|
55
|
+
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
|
|
51
56
|
E135,Embraer,EMB-135LR,1995,2,no,0,20000,18500,15999,11500,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
|
|
52
57
|
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
|
|
53
58
|
E170,Embraer,EMB-170LR,2002,2,yes,0,37200,32800,29800,20700,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
|
|
54
59
|
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
|
|
55
60
|
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
|
|
61
|
+
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
|
|
62
|
+
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
|
|
63
|
+
E75L,Embraer,E170-200 (long wing),2002,2,yes,,40370,34100,32000,21890,10110,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
|
|
64
|
+
E75S,Embraer,E170-200 (short wing),2002,2,yes,,40370,34100,32000,21890,10110,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
|
|
65
|
+
GLF5,Gulfstream,G-550,1995,2,no,0,41277,34155,23587,21909,1678,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
|
|
56
66
|
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
|
|
57
67
|
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
|
|
58
|
-
GLF5,Gulfstream,G-550,1995,2,no,0,41277,34155,23587,21909,1678,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
|
|
59
|
-
CRJ9,Bombardier,CRJ-9,1999,2,yes,0,38329,34065,32092,21350,10742,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
|
|
60
|
-
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
|
|
61
68
|
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
|
|
62
|
-
B722,Boeing,727-200,1967,2,no,0,83820,70100,63560,44390,19170,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
|
|
63
|
-
A20N,Airbus,A320-NEO,2014,2,yes,54,79000,66300,62800,43600,19200,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
|
|
64
|
-
A21N,Airbus,A321-NEO,2016,2,yes,52,93500,77300,73000,48000,25000,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
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
ICAO Aircraft Code,PS ATYP
|
|
2
|
+
A178,E190
|
|
3
|
+
A19N,A20N
|
|
4
|
+
A20N,A20N
|
|
5
|
+
A21N,A21N
|
|
6
|
+
A306,A306
|
|
7
|
+
A30B,A30B
|
|
8
|
+
A310,A310
|
|
9
|
+
A313,A313
|
|
10
|
+
A318,A318
|
|
11
|
+
A319,A319
|
|
12
|
+
A320,A320
|
|
13
|
+
A321,A321
|
|
14
|
+
A332,A332
|
|
15
|
+
A333,A333
|
|
16
|
+
A338,A338
|
|
17
|
+
A339,A339
|
|
18
|
+
A342,A342
|
|
19
|
+
A343,A343
|
|
20
|
+
A345,A345
|
|
21
|
+
A346,A346
|
|
22
|
+
A359,A359
|
|
23
|
+
A35K,A35K
|
|
24
|
+
A388,A388
|
|
25
|
+
B37M,B37M
|
|
26
|
+
B38M,B38M
|
|
27
|
+
B39M,B39M
|
|
28
|
+
B701,B752
|
|
29
|
+
B712,B712
|
|
30
|
+
B720,B752
|
|
31
|
+
B721,B752
|
|
32
|
+
B722,B722
|
|
33
|
+
B732,B732
|
|
34
|
+
B733,B733
|
|
35
|
+
B734,B734
|
|
36
|
+
B735,B735
|
|
37
|
+
B736,B736
|
|
38
|
+
B737,B737
|
|
39
|
+
B738,B738
|
|
40
|
+
B739,B739
|
|
41
|
+
B741,B743
|
|
42
|
+
B742,B742
|
|
43
|
+
B743,B743
|
|
44
|
+
B744,B744
|
|
45
|
+
B748,B748
|
|
46
|
+
B74D,B743
|
|
47
|
+
B74R,B743
|
|
48
|
+
B74S,B742
|
|
49
|
+
B752,B752
|
|
50
|
+
B753,B753
|
|
51
|
+
B762,B762
|
|
52
|
+
B763,B763
|
|
53
|
+
B764,B764
|
|
54
|
+
B772,B772
|
|
55
|
+
B773,B773
|
|
56
|
+
B77L,B77L
|
|
57
|
+
B77W,B77W
|
|
58
|
+
B788,B788
|
|
59
|
+
B789,B789
|
|
60
|
+
B78X,B78X
|
|
61
|
+
BCS1,BCS1
|
|
62
|
+
BCS3,BCS3
|
|
63
|
+
BLCF,B77W
|
|
64
|
+
C141,A310
|
|
65
|
+
C17,B764
|
|
66
|
+
C5,A345
|
|
67
|
+
C5M,A345
|
|
68
|
+
C919,A20N
|
|
69
|
+
CRJ7,CRJ9
|
|
70
|
+
CRJ9,CRJ9
|
|
71
|
+
DC91,B712
|
|
72
|
+
DC93,DC93
|
|
73
|
+
E135,E135
|
|
74
|
+
E145,E145
|
|
75
|
+
E170,E170
|
|
76
|
+
E190,E190
|
|
77
|
+
E195,E195
|
|
78
|
+
E290,E290
|
|
79
|
+
E295,E295
|
|
80
|
+
E3CF,B762
|
|
81
|
+
E3TF,B762
|
|
82
|
+
E737,B738
|
|
83
|
+
E75L,E75L
|
|
84
|
+
E75S,E75S
|
|
85
|
+
E767,B763
|
|
86
|
+
GLF5,GLF5
|
|
87
|
+
IL62,A30B
|
|
88
|
+
J328,E135
|
|
89
|
+
KC39,A321
|
|
90
|
+
MC23,A20N
|
|
91
|
+
MD81,MD82
|
|
92
|
+
MD82,MD82
|
|
93
|
+
MD83,MD83
|
|
94
|
+
MD87,MD82
|
|
95
|
+
MD88,MD82
|
|
96
|
+
MD90,MD83
|
|
97
|
+
NIM,B738
|
|
98
|
+
P1,B38M
|
|
99
|
+
P8,B738
|
|
100
|
+
R721,B722
|
|
101
|
+
R722,B722
|
|
102
|
+
RJ1H,RJ1H
|
|
103
|
+
SLCH,A388
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.51.
|
|
3
|
+
Version: 0.51.2
|
|
4
4
|
Summary: Python library for modeling aviation climate impacts
|
|
5
5
|
Author-email: Breakthrough Energy <py@contrails.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -51,6 +51,7 @@ Requires-Dist: pytest >=8.2 ; extra == 'dev'
|
|
|
51
51
|
Requires-Dist: pytest-cov >=2.11 ; extra == 'dev'
|
|
52
52
|
Requires-Dist: requests >=2.25 ; extra == 'dev'
|
|
53
53
|
Requires-Dist: ruff ==0.4.1 ; extra == 'dev'
|
|
54
|
+
Requires-Dist: setuptools ; extra == 'dev'
|
|
54
55
|
Provides-Extra: docs
|
|
55
56
|
Requires-Dist: doc8 >=1.1 ; extra == 'docs'
|
|
56
57
|
Requires-Dist: furo >=2023.3 ; extra == 'docs'
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
pycontrails-0.51.
|
|
2
|
-
pycontrails-0.51.
|
|
3
|
-
pycontrails-0.51.
|
|
4
|
-
pycontrails-0.51.
|
|
5
|
-
pycontrails-0.51.
|
|
6
|
-
pycontrails-0.51.
|
|
7
|
-
pycontrails/_version.py,sha256=
|
|
1
|
+
pycontrails-0.51.2.dist-info/RECORD,,
|
|
2
|
+
pycontrails-0.51.2.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
|
|
3
|
+
pycontrails-0.51.2.dist-info/WHEEL,sha256=KYtn_mzb_QwZSHwPlosUO3fDl70znfUFngLlrLVHeBY,111
|
|
4
|
+
pycontrails-0.51.2.dist-info/NOTICE,sha256=gKI8DcN1WhiXB2SFRKDogcjONldGubTvBxiOYdC4CXU,1926
|
|
5
|
+
pycontrails-0.51.2.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
|
|
6
|
+
pycontrails-0.51.2.dist-info/METADATA,sha256=GrnTFo2vRstZA-G5KqvUe070DENl48rZUYrXVPjA2BM,8409
|
|
7
|
+
pycontrails/_version.py,sha256=NAimol_13XfyyQAJabjsIQxFxJiaGc5BgWOof3jZQM8,413
|
|
8
8
|
pycontrails/__init__.py,sha256=c_Vtz7CvdiVAL8ggluash9-8tGcLO_5Vvu-3_Ie47CE,1985
|
|
9
9
|
pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
pycontrails/core/vector.py,sha256=P61Rv1M040A1SRHmdWVR_RfXcWa6faM330n-9499ilI,71722
|
|
11
11
|
pycontrails/core/models.py,sha256=sipUAH_r0A1TxQ0yBjaPj8WC33Piw34ABHyrmRePfhg,39003
|
|
12
12
|
pycontrails/core/interpolation.py,sha256=FFYdUnTzGnkjoGs-FKsK3Y3nSK5lQI-mpq5HPALZ-y4,25495
|
|
13
13
|
pycontrails/core/fleet.py,sha256=84oTb8RJ3-bPVvZn3O2ljMEZLwJ9Q-E455ZzQJ4QaQU,16075
|
|
14
|
-
pycontrails/core/flight.py,sha256=
|
|
14
|
+
pycontrails/core/flight.py,sha256=jpd1bfdzUzNuuE-7pDraRC5I9kYetSwFUAMRYwMVxzw,83143
|
|
15
15
|
pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
|
|
16
|
-
pycontrails/core/polygon.py,sha256=
|
|
16
|
+
pycontrails/core/polygon.py,sha256=NhoK91oVE2pse1kw2mkkhxxQpJrvBld8ofTMCwNH_h8,18016
|
|
17
17
|
pycontrails/core/datalib.py,sha256=m39gKxdhy9KSBhwWlrzEc5z-tTqPfcs7bPcqSxbU0k0,23971
|
|
18
18
|
pycontrails/core/cache.py,sha256=rCBZiRSVoFkRwf_ay7O-eba2PaYoXdlJSz1znZPuOQk,27957
|
|
19
19
|
pycontrails/core/__init__.py,sha256=4ZE7x1gMa_Q7GcgcWpPP9fQ-sTulCXWmMjsCJ0odakY,840
|
|
@@ -22,7 +22,7 @@ pycontrails/core/met.py,sha256=HORTWNre9rSyOgNnVnVaW0A6jDjU5W5A5s2L89KIZyM,93602
|
|
|
22
22
|
pycontrails/core/aircraft_performance.py,sha256=4yNGfArt741HNFjxpWvEu86BTzie9LaPjC4KH3dXYts,21966
|
|
23
23
|
pycontrails/core/airports.py,sha256=aeyAXVkioIRomrP79UtNrxindL4f1DJyXFaojZCuBBw,6758
|
|
24
24
|
pycontrails/core/met_var.py,sha256=EhrLGdrCAp8cKb-3Whd_ttLMZn4_zLMhE-QyFinESqo,9197
|
|
25
|
-
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=
|
|
25
|
+
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=6UnfsPMG0Lj1NmPbdNIT5OfO8c-j7rZgBV9tWXopP2g,329672
|
|
26
26
|
pycontrails/core/coordinates.py,sha256=vVITA90x0Jx-UQG2XMm3JAKKsIrFUcU861xV-L9czTI,5291
|
|
27
27
|
pycontrails/datalib/goes.py,sha256=Myz53yENqopOOsVT7K-M16SLvoBPPnOg-14fq6DvzdQ,26359
|
|
28
28
|
pycontrails/datalib/__init__.py,sha256=s5b8W6scXgespKZjPcaC-8jyLd3FqZqN0BZccLxaGuE,237
|
|
@@ -74,8 +74,8 @@ pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha2
|
|
|
74
74
|
pycontrails/models/cocip/radiative_forcing.py,sha256=ERuFcYMo0_1iiOricnZ8D4ext23bMnTCeZwg9vd6Vzs,44944
|
|
75
75
|
pycontrails/models/cocip/wind_shear.py,sha256=p8d3iaNzxPA3MoxFEM1ZDKt0aticoD6U9cv0QmbuBzs,3860
|
|
76
76
|
pycontrails/models/cocip/cocip.py,sha256=0ILMcjbgsM00rCXAeo9UkSnUsmvq1XvORhNPI-ReNcM,97591
|
|
77
|
-
pycontrails/models/cocip/output_formats.py,sha256=
|
|
78
|
-
pycontrails/models/cocip/__init__.py,sha256=
|
|
77
|
+
pycontrails/models/cocip/output_formats.py,sha256=e3K-23EvEE2z9PuHNr2OQhwvN8_PYmNmR7Li-dsYZq8,83229
|
|
78
|
+
pycontrails/models/cocip/__init__.py,sha256=jd-9Tq20s1kwQBlxsYfZLi3hlT5MnWOY2XsPazq1fgE,962
|
|
79
79
|
pycontrails/models/cocip/cocip_params.py,sha256=R4bewge3xLgWYbBbGwd8e8r0NlaFx2IaQPZEfiqJZRI,11392
|
|
80
80
|
pycontrails/models/cocip/wake_vortex.py,sha256=i_OF193KK5BCMdVCgK0_4Aqn55f6rnL4WDWEac8um-w,14421
|
|
81
81
|
pycontrails/models/cocip/cocip_uncertainty.py,sha256=4JtlCVFpLBnPRlvyEp9QFpRfHFK9joSTnxe0NJdONG4,11784
|
|
@@ -83,11 +83,12 @@ pycontrails/models/cocip/radiative_heating.py,sha256=YRpwfXgFnf89iuJiIM96q-jbdcM
|
|
|
83
83
|
pycontrails/models/cocip/contrail_properties.py,sha256=tycCxKf8j9GvVYDQBPxjtp6xLll-r00C0XW-w1jGbMI,55594
|
|
84
84
|
pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=kDxFpAIkcqqhGmwXoxv3_cSESj1Ur45GbLJF56IACJs,14573
|
|
85
85
|
pycontrails/models/ps_model/__init__.py,sha256=5L-HympF1gJaZ6xiNkIQJygJhkDxM3-ejS_T2z-83hQ,495
|
|
86
|
-
pycontrails/models/ps_model/ps_model.py,sha256=
|
|
87
|
-
pycontrails/models/ps_model/ps_aircraft_params.py,sha256
|
|
88
|
-
pycontrails/models/ps_model/ps_operational_limits.py,sha256=
|
|
89
|
-
pycontrails/models/ps_model/ps_grid.py,sha256
|
|
90
|
-
pycontrails/models/ps_model/static/ps-
|
|
86
|
+
pycontrails/models/ps_model/ps_model.py,sha256=jOznGL37sWlQWjV2DpwCLDKdvw2U0XQdvQ_jRm4hj_w,33017
|
|
87
|
+
pycontrails/models/ps_model/ps_aircraft_params.py,sha256=-PfT2JC6RckVi_zTDVTqAMyaS-id6I2klUoXoEXreAc,13077
|
|
88
|
+
pycontrails/models/ps_model/ps_operational_limits.py,sha256=_vFJiPqGuZJRzwuY10-z07-7eEyomnpxPm_Js1Cd5So,16832
|
|
89
|
+
pycontrails/models/ps_model/ps_grid.py,sha256=AqZCEytWhrNbyujlJTufI4cxDonkPchGnrB3IvtRID4,18667
|
|
90
|
+
pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv,sha256=ksrpQTHkxSt1Va_R0rHdenEz6DlIs-Sfk1KFBzHKjhk,1038
|
|
91
|
+
pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv,sha256=3eNhSwzut0gon04k2EYKKaXRvQSUlau3yBAbHS0EBao,25784
|
|
91
92
|
pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
|
|
92
93
|
pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
|
|
93
94
|
pycontrails/models/cocipgrid/cocip_grid.py,sha256=wHhScJQNXI1Ax7gNFiXPU_lQiQNk4QLvq-TfnwBqAZU,94108
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|