pycontrails 0.54.7__cp312-cp312-macosx_10_13_x86_64.whl → 0.54.8__cp312-cp312-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.
- pycontrails/_version.py +9 -4
- pycontrails/core/cache.py +4 -0
- pycontrails/core/flightplan.py +10 -2
- pycontrails/core/met.py +12 -7
- pycontrails/core/rgi_cython.cpython-312-darwin.so +0 -0
- pycontrails/core/vector.py +11 -3
- pycontrails/datalib/spire/spire.py +6 -8
- pycontrails/models/cocip/cocip.py +14 -5
- pycontrails/models/cocip/contrail_properties.py +4 -6
- pycontrails/models/cocip/output_formats.py +12 -4
- pycontrails/models/cocip/radiative_forcing.py +2 -8
- pycontrails/models/cocipgrid/cocip_grid.py +11 -11
- pycontrails/models/humidity_scaling/humidity_scaling.py +49 -4
- pycontrails/models/ps_model/ps_aircraft_params.py +1 -1
- pycontrails/models/ps_model/ps_grid.py +22 -22
- pycontrails/models/ps_model/ps_model.py +3 -6
- pycontrails/models/ps_model/static/{ps-aircraft-params-20240524.csv → ps-aircraft-params-20250328.csv} +58 -57
- pycontrails/models/ps_model/static/{ps-synonym-list-20240524.csv → ps-synonym-list-20250328.csv} +1 -0
- pycontrails/models/tau_cirrus.py +1 -0
- pycontrails/physics/jet.py +5 -4
- pycontrails/physics/static/{iata-cargo-load-factors-20241115.csv → iata-cargo-load-factors-20250221.csv} +3 -0
- pycontrails/physics/static/{iata-passenger-load-factors-20241115.csv → iata-passenger-load-factors-20250221.csv} +3 -0
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info}/METADATA +3 -2
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info}/RECORD +28 -28
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info}/WHEEL +2 -1
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info/licenses}/LICENSE +0 -0
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info/licenses}/NOTICE +0 -0
- {pycontrails-0.54.7.dist-info → pycontrails-0.54.8.dist-info}/top_level.txt +0 -0
pycontrails/_version.py
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
# file generated by
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
|
5
|
+
|
|
3
6
|
TYPE_CHECKING = False
|
|
4
7
|
if TYPE_CHECKING:
|
|
5
|
-
from typing import Tuple
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
6
11
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
12
|
else:
|
|
8
13
|
VERSION_TUPLE = object
|
|
@@ -12,5 +17,5 @@ __version__: str
|
|
|
12
17
|
__version_tuple__: VERSION_TUPLE
|
|
13
18
|
version_tuple: VERSION_TUPLE
|
|
14
19
|
|
|
15
|
-
__version__ = version = '0.54.
|
|
16
|
-
__version_tuple__ = version_tuple = (0, 54,
|
|
20
|
+
__version__ = version = '0.54.8'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 54, 8)
|
pycontrails/core/cache.py
CHANGED
|
@@ -266,6 +266,8 @@ class DiskCacheStore(CacheStore):
|
|
|
266
266
|
>>> # put a file directly
|
|
267
267
|
>>> disk_cache.put("README.md", "test/file.md")
|
|
268
268
|
'test/file.md'
|
|
269
|
+
|
|
270
|
+
>>> disk_cache.clear() # cleanup
|
|
269
271
|
"""
|
|
270
272
|
|
|
271
273
|
if not pathlib.Path(data_path).is_file():
|
|
@@ -312,6 +314,8 @@ class DiskCacheStore(CacheStore):
|
|
|
312
314
|
>>> # returns a path
|
|
313
315
|
>>> disk_cache.get("test/file.md")
|
|
314
316
|
'cache/test/file.md'
|
|
317
|
+
|
|
318
|
+
>>> disk_cache.clear() # cleanup
|
|
315
319
|
"""
|
|
316
320
|
return self.path(cache_path)
|
|
317
321
|
|
pycontrails/core/flightplan.py
CHANGED
|
@@ -38,10 +38,13 @@ def to_atc_plan(plan: dict[str, Any]) -> str:
|
|
|
38
38
|
if "second_alt_icao" in plan:
|
|
39
39
|
ret += f" {plan['second_alt_icao']}"
|
|
40
40
|
ret += "\n"
|
|
41
|
-
ret += f"-{plan['other_info']}
|
|
41
|
+
ret += f"-{plan['other_info']}"
|
|
42
42
|
if "supplementary_info" in plan:
|
|
43
|
+
ret += "\n-"
|
|
43
44
|
ret += " ".join([f"{i[0]}/{i[1]}" for i in plan["supplementary_info"].items()])
|
|
44
45
|
|
|
46
|
+
ret += ")"
|
|
47
|
+
|
|
45
48
|
if ret[-1] == "\n":
|
|
46
49
|
ret = ret[:-1]
|
|
47
50
|
|
|
@@ -194,7 +197,12 @@ def parse_atc_plan(atc_plan: str) -> dict[str, str]:
|
|
|
194
197
|
|
|
195
198
|
# Other info
|
|
196
199
|
if len(basic) > 8:
|
|
197
|
-
|
|
200
|
+
info = basic[8]
|
|
201
|
+
idx = info.find("DOF")
|
|
202
|
+
if idx != -1:
|
|
203
|
+
flightplan["departure_date"] = info[idx + 4 : idx + 10]
|
|
204
|
+
|
|
205
|
+
flightplan["other_info"] = info.strip()
|
|
198
206
|
|
|
199
207
|
# Supl. Info
|
|
200
208
|
if len(basic) > 9:
|
pycontrails/core/met.py
CHANGED
|
@@ -2643,19 +2643,24 @@ def downselect(data: XArrayType, bbox: tuple[float, ...]) -> XArrayType:
|
|
|
2643
2643
|
"or length 6 [west, south, min-level, east, north, max-level]"
|
|
2644
2644
|
)
|
|
2645
2645
|
|
|
2646
|
+
if west <= east:
|
|
2647
|
+
# Return a view of the data
|
|
2648
|
+
# If data is lazy, this will not load the data
|
|
2649
|
+
return data.sel(
|
|
2650
|
+
longitude=slice(west, east),
|
|
2651
|
+
latitude=slice(south, north),
|
|
2652
|
+
level=slice(level_min, level_max),
|
|
2653
|
+
)
|
|
2654
|
+
|
|
2655
|
+
# In this case, the bbox spans the antimeridian
|
|
2656
|
+
# If data is lazy, this will load the data (data.where is not lazy AFAIK)
|
|
2646
2657
|
cond = (
|
|
2647
2658
|
(data["latitude"] >= south)
|
|
2648
2659
|
& (data["latitude"] <= north)
|
|
2649
2660
|
& (data["level"] >= level_min)
|
|
2650
2661
|
& (data["level"] <= level_max)
|
|
2662
|
+
& ((data["longitude"] >= west) | (data["longitude"] <= east))
|
|
2651
2663
|
)
|
|
2652
|
-
|
|
2653
|
-
# wrapping longitude
|
|
2654
|
-
if west <= east:
|
|
2655
|
-
cond = cond & (data["longitude"] >= west) & (data["longitude"] <= east)
|
|
2656
|
-
else:
|
|
2657
|
-
cond = cond & ((data["longitude"] >= west) | (data["longitude"] <= east))
|
|
2658
|
-
|
|
2659
2664
|
return data.where(cond, drop=True)
|
|
2660
2665
|
|
|
2661
2666
|
|
|
Binary file
|
pycontrails/core/vector.py
CHANGED
|
@@ -1067,9 +1067,17 @@ class VectorDataset:
|
|
|
1067
1067
|
if out is not marker:
|
|
1068
1068
|
return out
|
|
1069
1069
|
|
|
1070
|
-
|
|
1071
|
-
if
|
|
1072
|
-
|
|
1070
|
+
arr: np.ndarray = self.data.get(key, marker) # type: ignore[arg-type]
|
|
1071
|
+
if arr is not marker:
|
|
1072
|
+
try:
|
|
1073
|
+
vals = np.unique(arr)
|
|
1074
|
+
except TypeError:
|
|
1075
|
+
# A TypeError can occur if the arr has object dtype and contains None
|
|
1076
|
+
# Handle this case by returning None
|
|
1077
|
+
if arr.dtype == object and np.all(arr == None): # noqa: E711
|
|
1078
|
+
return None
|
|
1079
|
+
raise
|
|
1080
|
+
|
|
1073
1081
|
if len(vals) == 1:
|
|
1074
1082
|
return vals[0]
|
|
1075
1083
|
|
|
@@ -75,7 +75,7 @@ class ValidateTrajectoryHandler:
|
|
|
75
75
|
<LINK HERE TO HOSTED REFERENCE EXAMPLE(S)>.
|
|
76
76
|
"""
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
ROCD_THRESHOLD_FPS = 83.25 # 83.25 ft/sec ~= 5000 ft/min
|
|
79
79
|
CRUISE_LOW_ALTITUDE_THRESHOLD_FT = 15000.0 # lowest expected cruise altitude
|
|
80
80
|
INSTANTANEOUS_HIGH_GROUND_SPEED_THRESHOLD_MPS = 350.0 # 350m/sec ~= 780mph ~= 1260kph
|
|
81
81
|
INSTANTANEOUS_LOW_GROUND_SPEED_THRESHOLD_MPS = 45.0 # 45m/sec ~= 100mph ~= 160kph
|
|
@@ -473,12 +473,12 @@ class ValidateTrajectoryHandler:
|
|
|
473
473
|
Evaluate flight altitude profile.
|
|
474
474
|
|
|
475
475
|
Failure modes include:
|
|
476
|
-
|
|
476
|
+
FlightAltitudeProfileError
|
|
477
477
|
1) flight climbs above alt threshold,
|
|
478
478
|
then descends below that threshold one or more times,
|
|
479
479
|
before making final descent to land.
|
|
480
480
|
|
|
481
|
-
|
|
481
|
+
RocdError
|
|
482
482
|
2) rate of instantaneous (between consecutive waypoint) climb or descent is above threshold,
|
|
483
483
|
while aircraft is above the cruise altitude.
|
|
484
484
|
"""
|
|
@@ -488,15 +488,13 @@ class ValidateTrajectoryHandler:
|
|
|
488
488
|
|
|
489
489
|
violations: list[FlightAltitudeProfileError | ROCDError] = []
|
|
490
490
|
|
|
491
|
-
#
|
|
492
|
-
rocd_above_thres =
|
|
493
|
-
self._df["altitude_baro"] >= self.CRUISE_LOW_ALTITUDE_THRESHOLD_FT
|
|
494
|
-
)
|
|
491
|
+
# evaluate ROCD
|
|
492
|
+
rocd_above_thres = self._df["rocd_fps"].abs() >= self.ROCD_THRESHOLD_FPS
|
|
495
493
|
if rocd_above_thres.any():
|
|
496
494
|
msg = (
|
|
497
495
|
"Flight trajectory has rate of climb/descent values "
|
|
498
496
|
"between consecutive waypoints that exceed threshold "
|
|
499
|
-
f"of {self.
|
|
497
|
+
f"of {self.ROCD_THRESHOLD_FPS:.3f}ft/sec. "
|
|
500
498
|
f"Max value found: {self._df['rocd_fps'].abs().max():.3f}ft/sec"
|
|
501
499
|
)
|
|
502
500
|
violations.append(ROCDError(msg))
|
|
@@ -997,14 +997,14 @@ class Cocip(Model):
|
|
|
997
997
|
else:
|
|
998
998
|
f_surv = contrail_properties.ice_particle_survival_fraction(iwc, iwc_1)
|
|
999
999
|
|
|
1000
|
-
|
|
1000
|
+
n_ice_per_m_0 = contrail_properties.initial_ice_particle_number(
|
|
1001
1001
|
nvpm_ei_n=nvpm_ei_n,
|
|
1002
1002
|
fuel_dist=fuel_dist,
|
|
1003
|
-
f_surv=f_surv,
|
|
1004
1003
|
air_temperature=air_temperature,
|
|
1005
1004
|
T_crit_sac=T_critical_sac,
|
|
1006
1005
|
min_ice_particle_number_nvpm_ei_n=self.params["min_ice_particle_number_nvpm_ei_n"],
|
|
1007
1006
|
)
|
|
1007
|
+
n_ice_per_m_1 = n_ice_per_m_0 * f_surv
|
|
1008
1008
|
|
|
1009
1009
|
# Check for persistent initial_contrails
|
|
1010
1010
|
persistent_1 = contrail_properties.initial_persistent(iwc_1, rhi_1)
|
|
@@ -1018,6 +1018,8 @@ class Cocip(Model):
|
|
|
1018
1018
|
self._sac_flight["rho_air_1"] = rho_air_1
|
|
1019
1019
|
self._sac_flight["rhi_1"] = rhi_1
|
|
1020
1020
|
self._sac_flight["iwc_1"] = iwc_1
|
|
1021
|
+
self._sac_flight["f_surv"] = f_surv
|
|
1022
|
+
self._sac_flight["n_ice_per_m_0"] = n_ice_per_m_0
|
|
1021
1023
|
self._sac_flight["n_ice_per_m_1"] = n_ice_per_m_1
|
|
1022
1024
|
self._sac_flight["persistent_1"] = persistent_1
|
|
1023
1025
|
|
|
@@ -1384,7 +1386,13 @@ class Cocip(Model):
|
|
|
1384
1386
|
if verbose_outputs:
|
|
1385
1387
|
sac_cols += ["dT_dz", "ds_dz", "dz_max"]
|
|
1386
1388
|
|
|
1387
|
-
downwash_cols = [
|
|
1389
|
+
downwash_cols = [
|
|
1390
|
+
"rho_air_1",
|
|
1391
|
+
"iwc_1",
|
|
1392
|
+
"f_surv",
|
|
1393
|
+
"n_ice_per_m_0",
|
|
1394
|
+
"n_ice_per_m_1",
|
|
1395
|
+
]
|
|
1388
1396
|
df = pd.concat(
|
|
1389
1397
|
[
|
|
1390
1398
|
self.source.dataframe.set_index(col_idx),
|
|
@@ -2211,8 +2219,6 @@ def calc_contrail_properties(
|
|
|
2211
2219
|
air_temperature += contrail["cumul_heat"]
|
|
2212
2220
|
|
|
2213
2221
|
# get required radiation
|
|
2214
|
-
theta_rad = geo.orbital_position(time)
|
|
2215
|
-
sd0 = geo.solar_constant(theta_rad)
|
|
2216
2222
|
sdr = contrail["sdr"]
|
|
2217
2223
|
rsr = contrail["rsr"]
|
|
2218
2224
|
olr = contrail["olr"]
|
|
@@ -2247,6 +2253,9 @@ def calc_contrail_properties(
|
|
|
2247
2253
|
diffuse_h = contrail_properties.horizontal_diffusivity(ds_dz, depth)
|
|
2248
2254
|
|
|
2249
2255
|
if radiative_heating_effects:
|
|
2256
|
+
# theta_rad has float64 dtype, convert back to float32 if needed
|
|
2257
|
+
theta_rad = geo.orbital_position(time).astype(sdr.dtype, copy=False)
|
|
2258
|
+
sd0 = geo.solar_constant(theta_rad)
|
|
2250
2259
|
heat_rate = radiative_heating.heating_rate(
|
|
2251
2260
|
air_temperature=air_temperature,
|
|
2252
2261
|
rhi=rhi,
|
|
@@ -201,10 +201,9 @@ def iwc_post_wake_vortex(
|
|
|
201
201
|
return np.maximum(iwc - iwc_ad, 0.0)
|
|
202
202
|
|
|
203
203
|
|
|
204
|
-
def
|
|
204
|
+
def initial_ice_particle_number(
|
|
205
205
|
nvpm_ei_n: npt.NDArray[np.floating],
|
|
206
206
|
fuel_dist: npt.NDArray[np.floating],
|
|
207
|
-
f_surv: npt.NDArray[np.floating],
|
|
208
207
|
air_temperature: npt.NDArray[np.floating],
|
|
209
208
|
T_crit_sac: npt.NDArray[np.floating],
|
|
210
209
|
min_ice_particle_number_nvpm_ei_n: float,
|
|
@@ -222,8 +221,6 @@ def ice_particle_number(
|
|
|
222
221
|
black carbon number emissions index, [:math:`kg^{-1}`]
|
|
223
222
|
fuel_dist : npt.NDArray[np.floating]
|
|
224
223
|
fuel consumption of the flight segment per distance traveled, [:math:`kg m^{-1}`]
|
|
225
|
-
f_surv : npt.NDArray[np.floating]
|
|
226
|
-
Fraction of contrail ice particle number that survive the wake vortex phase.
|
|
227
224
|
air_temperature : npt.NDArray[np.floating]
|
|
228
225
|
ambient temperature for each waypoint, [:math:`K`]
|
|
229
226
|
T_crit_sac : npt.NDArray[np.floating]
|
|
@@ -235,11 +232,12 @@ def ice_particle_number(
|
|
|
235
232
|
Returns
|
|
236
233
|
-------
|
|
237
234
|
npt.NDArray[np.floating]
|
|
238
|
-
initial number of ice particles per distance
|
|
235
|
+
The initial number of ice particles per distance before the wake vortex
|
|
236
|
+
phase, [:math:`# m^{-1}`]
|
|
239
237
|
"""
|
|
240
238
|
f_activation = ice_particle_activation_rate(air_temperature, T_crit_sac)
|
|
241
239
|
nvpm_ei_n_activated = nvpm_ei_n * f_activation
|
|
242
|
-
return fuel_dist * np.maximum(nvpm_ei_n_activated, min_ice_particle_number_nvpm_ei_n)
|
|
240
|
+
return fuel_dist * np.maximum(nvpm_ei_n_activated, min_ice_particle_number_nvpm_ei_n)
|
|
243
241
|
|
|
244
242
|
|
|
245
243
|
def ice_particle_activation_rate(
|
|
@@ -1188,10 +1188,18 @@ def meteorological_time_slice_statistics(
|
|
|
1188
1188
|
)
|
|
1189
1189
|
|
|
1190
1190
|
# ISSR: Volume of airspace with RHi > 100% between FL300 and FL450
|
|
1191
|
-
|
|
1192
|
-
rhi =
|
|
1193
|
-
|
|
1194
|
-
|
|
1191
|
+
met_cruise = MetDataset(met.data.sel(level=slice(150, 300)))
|
|
1192
|
+
rhi = humidity_scaling.eval(met_cruise)["rhi"].data
|
|
1193
|
+
|
|
1194
|
+
try:
|
|
1195
|
+
# If the given time is already in the dataset, select the time slice
|
|
1196
|
+
i = rhi.get_index("time").get_loc(time)
|
|
1197
|
+
except KeyError:
|
|
1198
|
+
rhi = rhi.interp(time=time)
|
|
1199
|
+
else:
|
|
1200
|
+
rhi = rhi.isel(time=i)
|
|
1201
|
+
|
|
1202
|
+
is_issr = rhi > 1.0
|
|
1195
1203
|
|
|
1196
1204
|
# Cirrus in a longitude-latitude grid
|
|
1197
1205
|
if cirrus_coverage is None:
|
|
@@ -1104,10 +1104,7 @@ def _contrail_optical_depth_above_contrail_layer(
|
|
|
1104
1104
|
|
|
1105
1105
|
da_surface_area = geo.grid_surface_area(da["longitude"].values, da["latitude"].values)
|
|
1106
1106
|
da = da / da_surface_area
|
|
1107
|
-
|
|
1108
|
-
lon_coords = da["longitude"].values
|
|
1109
|
-
wrap_longitude = (lon_coords[-1] + lon_coords[0] + np.diff(lon_coords)[0]) == 0.0
|
|
1110
|
-
mda = MetDataArray(da, wrap_longitude=wrap_longitude, copy=False)
|
|
1107
|
+
mda = MetDataArray(da)
|
|
1111
1108
|
|
|
1112
1109
|
# Interpolate to contrails_level
|
|
1113
1110
|
contrails_level["tau_contrails_above"] = contrails_level.intersect_met(mda)
|
|
@@ -1133,10 +1130,7 @@ def _rsr_and_olr_with_contrail_overlap(
|
|
|
1133
1130
|
Contrail waypoints at the current altitude layer with `rsr_overlap` and
|
|
1134
1131
|
`olr_overlap` attached.
|
|
1135
1132
|
"""
|
|
1136
|
-
|
|
1137
|
-
lon_coords = delta_rad_t["longitude"].values
|
|
1138
|
-
wrap_longitude = (lon_coords[-1] + lon_coords[0] + np.diff(lon_coords)[0]) == 0.0
|
|
1139
|
-
mds = MetDataset(delta_rad_t, wrap_longitude=wrap_longitude, copy=False)
|
|
1133
|
+
mds = MetDataset(delta_rad_t)
|
|
1140
1134
|
|
|
1141
1135
|
# Interpolate radiation fields to obtain `rsr_overlap` and `olr_overlap`
|
|
1142
1136
|
delta_rsr = contrails_level.intersect_met(mds["rsr"])
|
|
@@ -1488,18 +1488,18 @@ def find_initial_persistent_contrails(
|
|
|
1488
1488
|
)
|
|
1489
1489
|
iwc_1 = contrail_properties.iwc_post_wake_vortex(iwc, iwc_ad)
|
|
1490
1490
|
f_surv = contrail_properties.ice_particle_survival_fraction(iwc, iwc_1)
|
|
1491
|
-
|
|
1491
|
+
n_ice_per_m_0 = contrail_properties.initial_ice_particle_number(
|
|
1492
1492
|
nvpm_ei_n=nvpm_ei_n,
|
|
1493
1493
|
fuel_dist=fuel_dist,
|
|
1494
|
-
f_surv=f_surv,
|
|
1495
1494
|
air_temperature=air_temperature,
|
|
1496
1495
|
T_crit_sac=T_crit_sac,
|
|
1497
1496
|
min_ice_particle_number_nvpm_ei_n=params["min_ice_particle_number_nvpm_ei_n"],
|
|
1498
1497
|
)
|
|
1498
|
+
n_ice_per_m_1 = n_ice_per_m_0 * f_surv
|
|
1499
1499
|
|
|
1500
1500
|
# The logic below corresponds to Cocip._create_downwash_contrail (roughly)
|
|
1501
1501
|
contrail["iwc"] = iwc_1
|
|
1502
|
-
contrail["n_ice_per_m"] =
|
|
1502
|
+
contrail["n_ice_per_m"] = n_ice_per_m_1
|
|
1503
1503
|
|
|
1504
1504
|
# Check for persistent initial_contrails
|
|
1505
1505
|
rhi_1 = contrail["rhi"]
|
|
@@ -2152,18 +2152,18 @@ def result_to_metdataset(
|
|
|
2152
2152
|
size = np.prod(shape)
|
|
2153
2153
|
|
|
2154
2154
|
dtype = result["ef"].dtype if result else np.float32
|
|
2155
|
-
|
|
2156
|
-
|
|
2155
|
+
contrail_age_1d = np.zeros(size, dtype=np.float32)
|
|
2156
|
+
ef_per_m_1d = np.zeros(size, dtype=dtype)
|
|
2157
2157
|
|
|
2158
2158
|
if result:
|
|
2159
2159
|
contrail_idx = result["index"]
|
|
2160
2160
|
# Step 1: Contrail age. Convert from timedelta to float
|
|
2161
|
-
|
|
2161
|
+
contrail_age_1d[contrail_idx] = result["age"] / np.timedelta64(1, "h")
|
|
2162
2162
|
# Step 2: EF
|
|
2163
|
-
|
|
2163
|
+
ef_per_m_1d[contrail_idx] = result["ef"] / nominal_segment_length
|
|
2164
2164
|
|
|
2165
|
-
|
|
2166
|
-
|
|
2165
|
+
contrail_age_4d = contrail_age_1d.reshape(shape)
|
|
2166
|
+
ef_per_m_4d = ef_per_m_1d.reshape(shape)
|
|
2167
2167
|
|
|
2168
2168
|
# Step 3: Dataset dims and attrs
|
|
2169
2169
|
dims = tuple(source.coords)
|
|
@@ -2171,8 +2171,8 @@ def result_to_metdataset(
|
|
|
2171
2171
|
|
|
2172
2172
|
# Step 4: Dataset core variables
|
|
2173
2173
|
data_vars = {
|
|
2174
|
-
"contrail_age": (dims,
|
|
2175
|
-
"ef_per_m": (dims,
|
|
2174
|
+
"contrail_age": (dims, contrail_age_4d, local_attrs["contrail_age"]),
|
|
2175
|
+
"ef_per_m": (dims, ef_per_m_4d, local_attrs["ef_per_m"]),
|
|
2176
2176
|
}
|
|
2177
2177
|
|
|
2178
2178
|
# Step 5: Dataset variables from verbose_dicts
|
|
@@ -321,7 +321,27 @@ class _SigmoidCoefficients:
|
|
|
321
321
|
|
|
322
322
|
|
|
323
323
|
@functools.cache
|
|
324
|
-
def _load_sigmoid_coef(q_method: str | None) -> _SigmoidCoefficients:
|
|
324
|
+
def _load_sigmoid_coef(q_method: str | None, level_type: str) -> _SigmoidCoefficients:
|
|
325
|
+
available = ("pressure", "model")
|
|
326
|
+
if level_type not in available:
|
|
327
|
+
msg = f"Invalid 'level_type' value '{level_type}'. Must be one of {available}."
|
|
328
|
+
raise ValueError(msg)
|
|
329
|
+
|
|
330
|
+
if level_type == "model":
|
|
331
|
+
if q_method is not None:
|
|
332
|
+
msg = "Parameter 'q_method' must be None for model-level data."
|
|
333
|
+
raise ValueError(msg)
|
|
334
|
+
return _SigmoidCoefficients(
|
|
335
|
+
a1=0.026302083473778933,
|
|
336
|
+
a2=0.9651041666272301,
|
|
337
|
+
a3=2.250107435038734,
|
|
338
|
+
a4=36.549393263544914,
|
|
339
|
+
b1=0.489062500000000095,
|
|
340
|
+
b2=2.210937499999999,
|
|
341
|
+
b3=4.182743010484767,
|
|
342
|
+
b4=17.53378893219587,
|
|
343
|
+
)
|
|
344
|
+
|
|
325
345
|
if q_method is None:
|
|
326
346
|
return _SigmoidCoefficients(
|
|
327
347
|
a1=0.062621,
|
|
@@ -347,6 +367,14 @@ def _load_sigmoid_coef(q_method: str | None) -> _SigmoidCoefficients:
|
|
|
347
367
|
raise NotImplementedError(f"Unsupported q_method: {q_method}")
|
|
348
368
|
|
|
349
369
|
|
|
370
|
+
@dataclasses.dataclass
|
|
371
|
+
class ExponentialBoostLatitudeCorrectionParams(models.ModelParams):
|
|
372
|
+
"""Parameters for :class:`ExponentialBoostLatitudeCorrectionHumidityScaling`."""
|
|
373
|
+
|
|
374
|
+
#: The ERA5 vertical level type. Must be one of ``"pressure"`` or ``"model"``.
|
|
375
|
+
level_type: str = "pressure"
|
|
376
|
+
|
|
377
|
+
|
|
350
378
|
class ExponentialBoostLatitudeCorrectionHumidityScaling(HumidityScaling):
|
|
351
379
|
"""Correct RHi values derived from ECMWF ERA5 HRES.
|
|
352
380
|
|
|
@@ -406,12 +434,28 @@ class ExponentialBoostLatitudeCorrectionHumidityScaling(HumidityScaling):
|
|
|
406
434
|
name = "exponential_boost_latitude_customization"
|
|
407
435
|
long_name = "Latitude specific humidity scaling composed with exponential boosting"
|
|
408
436
|
formula = "rhi -> (rhi / rhi_adj) ^ rhi_boost_exponent"
|
|
409
|
-
default_params =
|
|
437
|
+
default_params = ExponentialBoostLatitudeCorrectionParams
|
|
410
438
|
scaler_specific_keys = ("latitude",)
|
|
411
439
|
|
|
440
|
+
def __init__(
|
|
441
|
+
self,
|
|
442
|
+
met: MetDataset | None = None,
|
|
443
|
+
params: dict[str, Any] | None = None,
|
|
444
|
+
**params_kwargs: Any,
|
|
445
|
+
):
|
|
446
|
+
if (params is None or "level_type" not in params) and ("level_type" not in params_kwargs):
|
|
447
|
+
msg = (
|
|
448
|
+
"The default level_type will change from 'pressure' to 'model' "
|
|
449
|
+
"in a future release. To silence this warning, provide a 'level_type' "
|
|
450
|
+
"value when instantiating ExponentialBoostLatitudeCorrectionHumidityScaling."
|
|
451
|
+
)
|
|
452
|
+
warnings.warn(msg, DeprecationWarning)
|
|
453
|
+
super().__init__(met, params, **params_kwargs)
|
|
454
|
+
|
|
412
455
|
def _scale_kwargs(self) -> dict[str, Any]:
|
|
413
456
|
q_method = self.params["interpolation_q_method"]
|
|
414
|
-
|
|
457
|
+
level_type = self.params["level_type"]
|
|
458
|
+
return {**super()._scale_kwargs(), "q_method": q_method, "level_type": level_type}
|
|
415
459
|
|
|
416
460
|
@override
|
|
417
461
|
def scale(
|
|
@@ -423,7 +467,8 @@ class ExponentialBoostLatitudeCorrectionHumidityScaling(HumidityScaling):
|
|
|
423
467
|
) -> tuple[ArrayLike, ArrayLike]:
|
|
424
468
|
# Get sigmoid coefficients
|
|
425
469
|
q_method = kwargs["q_method"]
|
|
426
|
-
|
|
470
|
+
level_type = kwargs["level_type"]
|
|
471
|
+
coef = _load_sigmoid_coef(q_method, level_type)
|
|
427
472
|
|
|
428
473
|
# Use the dtype of specific_humidity to determine the precision of the
|
|
429
474
|
# the calculation. If working with gridded data here, latitude will have
|
|
@@ -16,7 +16,7 @@ from pycontrails.physics import constants as c
|
|
|
16
16
|
from pycontrails.utils.types import ArrayOrFloat
|
|
17
17
|
|
|
18
18
|
#: Path to the Poll-Schumann aircraft parameters CSV file.
|
|
19
|
-
PS_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-aircraft-params-
|
|
19
|
+
PS_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-aircraft-params-20250328.csv"
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -408,35 +408,35 @@ def ps_nominal_grid(
|
|
|
408
408
|
>>> perf.attrs["mach_number"]
|
|
409
409
|
0.753
|
|
410
410
|
|
|
411
|
-
>>> perf.to_dataframe()
|
|
411
|
+
>>> perf.to_dataframe().round({"aircraft_mass": 0, "engine_efficiency": 3, "fuel_flow": 3})
|
|
412
412
|
aircraft_mass engine_efficiency fuel_flow
|
|
413
413
|
level
|
|
414
|
-
200.0
|
|
415
|
-
210.0
|
|
416
|
-
220.0
|
|
417
|
-
230.0
|
|
418
|
-
240.0
|
|
419
|
-
250.0
|
|
420
|
-
260.0
|
|
421
|
-
270.0
|
|
422
|
-
280.0
|
|
423
|
-
290.0
|
|
414
|
+
200.0 58416.0 0.301 0.576
|
|
415
|
+
210.0 61618.0 0.301 0.604
|
|
416
|
+
220.0 64830.0 0.301 0.633
|
|
417
|
+
230.0 68026.0 0.301 0.663
|
|
418
|
+
240.0 71188.0 0.301 0.695
|
|
419
|
+
250.0 71775.0 0.301 0.703
|
|
420
|
+
260.0 71766.0 0.300 0.708
|
|
421
|
+
270.0 71752.0 0.300 0.715
|
|
422
|
+
280.0 71736.0 0.299 0.722
|
|
423
|
+
290.0 71717.0 0.298 0.730
|
|
424
424
|
|
|
425
425
|
>>> # Now compute it for a higher Mach number
|
|
426
426
|
>>> perf = ps_nominal_grid("A320", level=level, mach_number=0.78)
|
|
427
|
-
>>> perf.to_dataframe()
|
|
427
|
+
>>> perf.to_dataframe().round({"aircraft_mass": 0, "engine_efficiency": 3, "fuel_flow": 3})
|
|
428
428
|
aircraft_mass engine_efficiency fuel_flow
|
|
429
429
|
level
|
|
430
|
-
200.0
|
|
431
|
-
210.0
|
|
432
|
-
220.0
|
|
433
|
-
230.0
|
|
434
|
-
240.0
|
|
435
|
-
250.0
|
|
436
|
-
260.0
|
|
437
|
-
270.0
|
|
438
|
-
280.0
|
|
439
|
-
290.0
|
|
430
|
+
200.0 58473.0 0.307 0.601
|
|
431
|
+
210.0 60626.0 0.307 0.621
|
|
432
|
+
220.0 63818.0 0.307 0.651
|
|
433
|
+
230.0 66994.0 0.307 0.682
|
|
434
|
+
240.0 70130.0 0.307 0.714
|
|
435
|
+
250.0 71703.0 0.307 0.733
|
|
436
|
+
260.0 71690.0 0.306 0.739
|
|
437
|
+
270.0 71673.0 0.306 0.747
|
|
438
|
+
280.0 71653.0 0.305 0.756
|
|
439
|
+
290.0 71631.0 0.304 0.766
|
|
440
440
|
"""
|
|
441
441
|
dims, coords, air_pressure, air_temperature = _parse_variables(level, air_temperature)
|
|
442
442
|
|
|
@@ -39,7 +39,7 @@ from pycontrails.utils.types import ArrayOrFloat
|
|
|
39
39
|
# mypy: disable-error-code = "type-var, arg-type"
|
|
40
40
|
|
|
41
41
|
#: Path to the Poll-Schumann aircraft parameters CSV file.
|
|
42
|
-
PS_SYNONYM_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-synonym-list-
|
|
42
|
+
PS_SYNONYM_FILE_PATH = pathlib.Path(__file__).parent / "static" / "ps-synonym-list-20250328.csv"
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@dataclasses.dataclass
|
|
@@ -999,8 +999,5 @@ def get_aircraft_synonym_dict_ps() -> dict[str, str]:
|
|
|
999
999
|
Dictionary of the form ``{"icao_aircraft_type": "ps_aircraft_type"}``.
|
|
1000
1000
|
"""
|
|
1001
1001
|
# get path to static PS synonym list
|
|
1002
|
-
|
|
1003
|
-
df_atyp_icao_to_ps
|
|
1004
|
-
synonym_path, usecols=["ICAO Aircraft Code", "PS ATYP"], index_col=0
|
|
1005
|
-
)
|
|
1006
|
-
return df_atyp_icao_to_ps.squeeze("columns").to_dict()
|
|
1002
|
+
df_atyp_icao_to_ps = pd.read_csv(PS_SYNONYM_FILE_PATH, index_col="ICAO Aircraft Code")
|
|
1003
|
+
return df_atyp_icao_to_ps["PS ATYP"].to_dict()
|
|
@@ -1,68 +1,69 @@
|
|
|
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
|
-
A20N,Airbus,A320-NEO,2014,2,yes,54,79000,
|
|
3
|
-
A21N,Airbus,A321-NEO,2016,2,yes,52,93500,
|
|
4
|
-
A306,Airbus,A300B4-600R,1983,2,no,0,170500,
|
|
5
|
-
A30B,Airbus,A300B4-200,1973,2,no,6,165000,
|
|
6
|
-
A310,Airbus,A310-200,1982,2,no,8,138600,
|
|
7
|
-
A313,Airbus,A310-300,1982,2,no,0,150000,
|
|
8
|
-
A318,Airbus,A318-100,2002,2,no,5,68000,
|
|
9
|
-
A319,Airbus,A319-100,1995,2,no,6,73500,
|
|
10
|
-
A320,Airbus,A320-200,1987,2,no,0,73500,
|
|
11
|
-
A321,Airbus,A321-100,1993,2,no,8,89000,
|
|
12
|
-
A332,Airbus,A330-200,1992,2,no,52,233000,
|
|
13
|
-
A333,Airbus,A330-300,1992,2,no,52,233000,
|
|
14
|
-
A338,Airbus,A330-800,2018,2,no,,242000,186000,
|
|
15
|
-
A339,Airbus,A330-900,2017,2,no,,242000,191000,
|
|
16
|
-
A342,Airbus,A340-200,1991,4,no,1,257000,
|
|
17
|
-
A343,Airbus,A340-300,1991,4,no,1,257000,
|
|
18
|
-
A345,Airbus,A340-500,2002,4,no,1,372000,
|
|
19
|
-
A346,Airbus,A340-600,2001,4,no,1,368000,
|
|
20
|
-
A359,Airbus,A350-900,2013,2,no,9,275000,
|
|
21
|
-
A35K,Airbus,A350-1000,2016,2,yes,2,316000,
|
|
22
|
-
A388,Airbus,A380-800,2005,4,no,2,569000,
|
|
23
|
-
B37M,Boeing,B737 MAX 7,2018,2,yes,,80285,
|
|
24
|
-
B38M,Boeing,B737 MAX 8/8-200,2016,2,yes,,82644,
|
|
25
|
-
B39M,Boeing,B737 MAX 9,2017,2,yes,,88314,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
51
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
|
|
52
|
-
BCS1,Airbus,A220-100,2013,2,yes,,60781,
|
|
53
|
-
BCS3,Airbus,A220-200,2015,2,yes,,70896,61008,58060,
|
|
54
|
-
CRJ9,Bombardier,CRJ-9,1999,2,yes,0,38329,
|
|
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
|
|
55
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
|
|
56
|
-
E135,Embraer,EMB-135LR,1995,2,no,0,20000,18500,
|
|
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
|
|
57
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
|
|
58
|
-
E170,Embraer,EMB-170LR,2002,2,yes,0,37200,32800,
|
|
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
|
|
59
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
|
|
60
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
|
|
61
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
|
|
62
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
|
|
63
|
-
E75L,Embraer,E170-200 (long wing),2002,2,yes,,40370,34100,32000,
|
|
64
|
-
E75S,Embraer,E170-200 (short wing),2002,2,yes,,40370,34100,32000,
|
|
65
|
-
GLF5,Gulfstream,G-550,1995,2,no,0,41277,
|
|
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
|
|
66
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
|
|
67
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
|
|
68
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
|
pycontrails/models/tau_cirrus.py
CHANGED
|
@@ -44,6 +44,7 @@ def tau_cirrus(met: MetDataset) -> xr.DataArray:
|
|
|
44
44
|
----------
|
|
45
45
|
met : MetDataset
|
|
46
46
|
A MetDataset with the following variables:
|
|
47
|
+
|
|
47
48
|
- "air_temperature"
|
|
48
49
|
- "mass_fraction_of_cloud_ice_in_air", "specific_cloud_ice_water_content",
|
|
49
50
|
or "ice_water_mixing_ratio"
|
pycontrails/physics/jet.py
CHANGED
|
@@ -21,8 +21,8 @@ from pycontrails.utils.types import ArrayOrFloat, ArrayScalarLike
|
|
|
21
21
|
|
|
22
22
|
logger = logging.getLogger(__name__)
|
|
23
23
|
_path_to_static = pathlib.Path(__file__).parent / "static"
|
|
24
|
-
PLF_PATH = _path_to_static / "iata-passenger-load-factors-
|
|
25
|
-
CLF_PATH = _path_to_static / "iata-cargo-load-factors-
|
|
24
|
+
PLF_PATH = _path_to_static / "iata-passenger-load-factors-20250221.csv"
|
|
25
|
+
CLF_PATH = _path_to_static / "iata-cargo-load-factors-20250221.csv"
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
# -------------------
|
|
@@ -431,8 +431,9 @@ def aircraft_load_factor(
|
|
|
431
431
|
float
|
|
432
432
|
Passenger/cargo load factor [0 - 1], unitless
|
|
433
433
|
"""
|
|
434
|
-
# If origin airport is provided, use regional load factor
|
|
435
|
-
|
|
434
|
+
# If origin airport is provided, use regional load factor.
|
|
435
|
+
# Otherwise, do not allow empty string and `None` to pass
|
|
436
|
+
if origin_airport_icao:
|
|
436
437
|
first_letter = origin_airport_icao[0]
|
|
437
438
|
region = AIRPORT_TO_REGION.get(first_letter, "Global")
|
|
438
439
|
else:
|
|
@@ -69,3 +69,6 @@ Date,Global,Africa,Asia Pacific,Europe,Latin America,Middle East,North America
|
|
|
69
69
|
15/7/2024,0.444,0.4,0.48,0.496,0.338,0.458,0.382
|
|
70
70
|
15/8/2024,0.44,0.378,0.466,0.501,0.359,0.445,0.387
|
|
71
71
|
15/9/2024,0.456,0.392,0.485,0.525,0.368,0.474,0.389
|
|
72
|
+
15/10/2024,0.473,0.401,0.493,0.555,0.411,0.48,0.411
|
|
73
|
+
15/11/2024,0.49,0.425,0.5,0.576,0.396,0.494,0.438
|
|
74
|
+
15/12/2024,0.473,0.415,0.491,0.567,0.335,0.473,0.421
|
|
@@ -69,3 +69,6 @@ Date,Global,Africa,Asia Pacific,Europe,Latin America,Middle East,North America
|
|
|
69
69
|
15/7/2024,0.86,0.75,0.834,0.882,0.862,0.84,0.889
|
|
70
70
|
15/8/2024,0.862,0.779,0.86,0.879,0.84,0.823,0.871
|
|
71
71
|
15/9/2024,0.836,0.765,0.831,0.865,0.834,0.814,0.824
|
|
72
|
+
15/10/2024,0.839,0.738,0.841,0.862,0.845,0.803,0.832
|
|
73
|
+
15/11/2024,0.834,0.733,0.849,0.853,0.845,0.812,0.81
|
|
74
|
+
15/12/2024,0.84,0.76,0.833,0.865,0.83,0.805,0.85
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.54.
|
|
3
|
+
Version: 0.54.8
|
|
4
4
|
Summary: Python library for modeling aviation climate impacts
|
|
5
5
|
Author-email: "Contrails.org" <py@contrails.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -111,6 +111,7 @@ Provides-Extra: zarr
|
|
|
111
111
|
Requires-Dist: fsspec>=2022.7.1; extra == "zarr"
|
|
112
112
|
Requires-Dist: gcsfs>=2022.7.1; extra == "zarr"
|
|
113
113
|
Requires-Dist: zarr>=2.12; extra == "zarr"
|
|
114
|
+
Dynamic: license-file
|
|
114
115
|
|
|
115
116
|
# pycontrails
|
|
116
117
|
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
pycontrails-0.54.
|
|
2
|
-
pycontrails-0.54.
|
|
3
|
-
pycontrails-0.54.
|
|
4
|
-
pycontrails-0.54.
|
|
5
|
-
pycontrails-0.54.
|
|
6
|
-
pycontrails-0.54.
|
|
7
|
-
pycontrails/_version.py,sha256=
|
|
1
|
+
pycontrails-0.54.8.dist-info/RECORD,,
|
|
2
|
+
pycontrails-0.54.8.dist-info/WHEEL,sha256=VOTLEhUr_HdlZdD_56hyTNo7M_07oW8hIHSzN6qCRFw,138
|
|
3
|
+
pycontrails-0.54.8.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
|
|
4
|
+
pycontrails-0.54.8.dist-info/METADATA,sha256=RmMykD8fNfp0FkT9-7ZQKcrfKNVtrfQYj9WKJGdRMqM,9131
|
|
5
|
+
pycontrails-0.54.8.dist-info/licenses/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
|
|
6
|
+
pycontrails-0.54.8.dist-info/licenses/NOTICE,sha256=fiBPdjYibMpDzf8hqcn7TvAQ-yeK10q_Nqq24DnskYg,1962
|
|
7
|
+
pycontrails/_version.py,sha256=toc4afFEmuid8E3AkMqVXqnNfmxWW94KE_GHaPTt9lg,513
|
|
8
8
|
pycontrails/__init__.py,sha256=9ypSB2fKZlKghTvSrjWo6OHm5qfASwiTIvlMew3Olu4,2037
|
|
9
9
|
pycontrails/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
pycontrails/core/vector.py,sha256=
|
|
10
|
+
pycontrails/core/vector.py,sha256=N-3VhPaUEyFSJWjplMKFcv9GLvEqAibKn1zqJWuNZQU,73601
|
|
11
11
|
pycontrails/core/models.py,sha256=iuGy9pQU-OI-AqPQyROxshSn2LbLcKNjXQcMEZw2IzA,42340
|
|
12
12
|
pycontrails/core/interpolation.py,sha256=wovjj3TAf3xonVxjarclpvZLyLq6N7wZQQXsI9hT3YA,25713
|
|
13
13
|
pycontrails/core/fleet.py,sha256=0hi_N4R93St-7iD29SE0EnadpBEl_p9lSGtDwpWvGkk,16704
|
|
14
14
|
pycontrails/core/flight.py,sha256=QZTGeZVnZ14UUWHSqgCSU49g_EGQZel-hzKwm_9dcFY,80653
|
|
15
15
|
pycontrails/core/fuel.py,sha256=kJZ3P1lPm1L6rdPREM55XQ-VfJ_pt35cP4sO2Nnvmjs,4332
|
|
16
16
|
pycontrails/core/polygon.py,sha256=EmfHPj0e58whsHvR-3YvDgMWkvMFgp_BgwaoG8IZ4n0,18044
|
|
17
|
-
pycontrails/core/cache.py,sha256=
|
|
17
|
+
pycontrails/core/cache.py,sha256=IIyx726zN7JzNSKV0JJDksMI9OhCLdnJShmBVStRqzI,28154
|
|
18
18
|
pycontrails/core/__init__.py,sha256=p0O09HxdeXU0X5Z3zrHMlTfXa92YumT3fJ8wJBI5ido,856
|
|
19
|
-
pycontrails/core/flightplan.py,sha256=
|
|
20
|
-
pycontrails/core/met.py,sha256=
|
|
19
|
+
pycontrails/core/flightplan.py,sha256=xgyYLi36OlNKtIFuOHaifcDM6XMBYTyMQlXAtfd-6Js,7519
|
|
20
|
+
pycontrails/core/met.py,sha256=4XQAJrKWBN0SZQSeBpMUnkLn87vYpn2VMiY3dQyFRIw,103992
|
|
21
21
|
pycontrails/core/aircraft_performance.py,sha256=ww5YBZkCPiUxRZERI5bUmxBeiF6rIrS2AsZyv8mVjvE,27400
|
|
22
22
|
pycontrails/core/airports.py,sha256=ubYo-WvxKPd_dUcADx6yew9Tqh1a4VJDgX7aFqLYwB8,6775
|
|
23
23
|
pycontrails/core/met_var.py,sha256=lAbp3cko_rzMk_u0kq-F27sUXUxUKikUvCNycwp9ILY,12020
|
|
24
|
-
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=
|
|
24
|
+
pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=ZCzYKX3-KRF66CLOyBNyzB-XaqpB5ifd-5HJipGZxjE,309272
|
|
25
25
|
pycontrails/core/coordinates.py,sha256=0ySsHtqTon7GMbuwmmxMbI92j3ueMteJZh4xxNm5zto,5391
|
|
26
26
|
pycontrails/datalib/goes.py,sha256=mCEuDYdt1GIBA-sbDq5LdC6ZRvWJ28uaaBTnsXE4syc,26555
|
|
27
27
|
pycontrails/datalib/landsat.py,sha256=r6366rEF7fOA7mT5KySCPGJplgGE5LvBw5fMqk-U1oM,19697
|
|
@@ -45,7 +45,7 @@ pycontrails/datalib/_leo_utils/static/bq_roi_query.sql,sha256=xq6-tJyz0-bUwW0KjQ
|
|
|
45
45
|
pycontrails/datalib/gfs/gfs.py,sha256=3tFiR7IObHcFmhGOdb-SJ7QQJSk6tF_6qkyi-pLrIdE,22393
|
|
46
46
|
pycontrails/datalib/gfs/variables.py,sha256=4ALR4zhYW8tQVlNVHrd0CK8oRNSe_2OkW3ELeaImtAI,3135
|
|
47
47
|
pycontrails/datalib/gfs/__init__.py,sha256=pXNjb9cJC6ngpuCnoHnmVZ2RHzbHZ0AlsyGvgcdcl2E,684
|
|
48
|
-
pycontrails/datalib/spire/spire.py,sha256=
|
|
48
|
+
pycontrails/datalib/spire/spire.py,sha256=h25BVgSr7E71Ox3-y9WgqFvp-54L08yzb2Ou-iMl7wM,24242
|
|
49
49
|
pycontrails/datalib/spire/__init__.py,sha256=3-My8yQItS6PL0DqXgNaltLqvN6T7nbnNnLD-sy7kt4,186
|
|
50
50
|
pycontrails/datalib/spire/exceptions.py,sha256=U0V_nZTLhxJwrzldvU9PdESx8-zLddRH3FmzkJyFyrI,1714
|
|
51
51
|
pycontrails/ext/synthetic_flight.py,sha256=ByuJDfpuK5WaGMj41wflfzH6zwI1nejVcQXC4JoMvSI,16795
|
|
@@ -59,7 +59,7 @@ pycontrails/utils/temp.py,sha256=lGU0b_R8ze4yKlsOusHIIBaoNFBrmrB3vBjgHRlfcXk,110
|
|
|
59
59
|
pycontrails/utils/json.py,sha256=oTiO8xh603esfBGaGVmA5eUzR0NhAqNpQCegMMgnSbg,5896
|
|
60
60
|
pycontrails/utils/dependencies.py,sha256=ATP45xYdUbIyGFzgbOe5SbokMytvB84TcexUEFnEUZE,2559
|
|
61
61
|
pycontrails/models/pcc.py,sha256=0Qdl4u8PmUEpNYd398glTChkbTwsh83wYPt0Bmi8qd8,11068
|
|
62
|
-
pycontrails/models/tau_cirrus.py,sha256=
|
|
62
|
+
pycontrails/models/tau_cirrus.py,sha256=2Z4egt-QFprkyITRgtarA5alOTTQRQbjzgmSqE49_1g,5778
|
|
63
63
|
pycontrails/models/__init__.py,sha256=dQTOLQb7RdUdUwslt5se__5y_ymbInBexQmNrmAeOdE,33
|
|
64
64
|
pycontrails/models/issr.py,sha256=AYLYLHxtG8je5UG6x1zLV0ul89MJPqe5Xk0oWIyZ7b0,7378
|
|
65
65
|
pycontrails/models/sac.py,sha256=lV1Or0AaLxuS1Zo5V8h5c1fkSKC-hKEgiFm7bmmusWw,15946
|
|
@@ -78,36 +78,36 @@ pycontrails/models/apcemm/inputs.py,sha256=88GylkiaymEW_XZeFxLsICI9wV6kl8wVYsuyT
|
|
|
78
78
|
pycontrails/models/apcemm/utils.py,sha256=Ex6EqXin6yoJv2WWhBotSzhjzUlFNZm2MDgL4CvvX6E,17082
|
|
79
79
|
pycontrails/models/apcemm/apcemm.py,sha256=rKvIaEsqtLbZ5h4o4EOY4Ge4-HdPn2X4M1lEUFDvr68,39975
|
|
80
80
|
pycontrails/models/apcemm/static/apcemm_yaml_template.yaml,sha256=uAZkc57OUvDMjgX6F5f6hgDh3Hgg1NbHWRUFSiv0DEI,6745
|
|
81
|
-
pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=
|
|
81
|
+
pycontrails/models/humidity_scaling/humidity_scaling.py,sha256=ntNnhqo-lLvuQ6ntApDAtalZF6vmF8bK0PKUgmIye8c,38579
|
|
82
82
|
pycontrails/models/humidity_scaling/__init__.py,sha256=nqsab_j9BCwMbTfCn4BjXMdhItlvNKkgUJ9-lb8RyIo,1119
|
|
83
83
|
pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq,sha256=tfYhbafF9Z-gGCg6VQ1YBlOaK_01e65Dc6s9b-hQ6Zo,286375
|
|
84
84
|
pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq,sha256=pShCvNUo0NYtAHhT9IBRuj38X9jejdlKfv-ZoOKmtKI,35943
|
|
85
|
-
pycontrails/models/cocip/radiative_forcing.py,sha256=
|
|
85
|
+
pycontrails/models/cocip/radiative_forcing.py,sha256=A-k3V7Cb9tXvCpne3CsQpWIKDR9ZD4k8Jf3z6FfSkA0,44650
|
|
86
86
|
pycontrails/models/cocip/wind_shear.py,sha256=m6ZlWjORfI-lI-D74Z_dIMOHnK4FDYmkb0S6vSpKTO8,3868
|
|
87
|
-
pycontrails/models/cocip/cocip.py,sha256=
|
|
88
|
-
pycontrails/models/cocip/output_formats.py,sha256=
|
|
87
|
+
pycontrails/models/cocip/cocip.py,sha256=uSorvK_AgAceTaeN8AqSiT4jqZO1lsqmewuLW2U02K4,104095
|
|
88
|
+
pycontrails/models/cocip/output_formats.py,sha256=cvuliaxhUBRZKBGkGkVOeV4-CN7IVAeZ2tIwXqHmUKw,83948
|
|
89
89
|
pycontrails/models/cocip/__init__.py,sha256=CWrkNd6S3ZJq04pjTc2W22sVAJeJD3bJJRy_zLW8Kkc,962
|
|
90
90
|
pycontrails/models/cocip/cocip_params.py,sha256=34_F7mXyJpSfek7iRhLVj6JaZeSoFmfcxx2WmmZN42Q,12534
|
|
91
91
|
pycontrails/models/cocip/wake_vortex.py,sha256=YmOuv_oWJ9-fmTx9PVHr6gsXwex0qzLhvoZIJNB9rsk,14515
|
|
92
92
|
pycontrails/models/cocip/cocip_uncertainty.py,sha256=XFWYIEVcmbOO9bP7BMdQXbCiQa0OSvfyr71CWtNON6E,12237
|
|
93
93
|
pycontrails/models/cocip/radiative_heating.py,sha256=1U4SQWwogtyQ2u6J996kAHP0OfpZ3hH2_x4Cyt3Cy8U,18984
|
|
94
|
-
pycontrails/models/cocip/contrail_properties.py,sha256=
|
|
94
|
+
pycontrails/models/cocip/contrail_properties.py,sha256=qdvFykCYBee17G1jDklzyoeYWDMzoOXCP-A6p9P_4sE,56053
|
|
95
95
|
pycontrails/models/cocip/unterstrasser_wake_vortex.py,sha256=edMHuWKzFN1P4EMWC2HRv5ZS_rUI7Q5Nw3LsYkrI0mE,18936
|
|
96
96
|
pycontrails/models/ps_model/__init__.py,sha256=Fuum5Rq8ya8qkvbeq2wh6NDo-42RCRnK1Y-2syYy0Ck,553
|
|
97
|
-
pycontrails/models/ps_model/ps_model.py,sha256=
|
|
98
|
-
pycontrails/models/ps_model/ps_aircraft_params.py,sha256=
|
|
97
|
+
pycontrails/models/ps_model/ps_model.py,sha256=U_xWn1b5CxmatvRSuGegfI-ANXscYq2s_7IROyK1p84,32131
|
|
98
|
+
pycontrails/models/ps_model/ps_aircraft_params.py,sha256=I2nBkdnRo9YGMn-0k35ooYpzPNJkHyEH5cU3K-Cz8b0,13350
|
|
99
99
|
pycontrails/models/ps_model/ps_operational_limits.py,sha256=XwMHO8yu8EZUWtxRgjRKwxmCrmKGoHO7Ob6nlfkrthI,16441
|
|
100
|
-
pycontrails/models/ps_model/ps_grid.py,sha256=
|
|
101
|
-
pycontrails/models/ps_model/static/ps-
|
|
102
|
-
pycontrails/models/ps_model/static/ps-
|
|
100
|
+
pycontrails/models/ps_model/ps_grid.py,sha256=rBsCEQkGY4cTf57spF0sqCfOo4oC4auE8ngS_mcl0VM,26207
|
|
101
|
+
pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv,sha256=LUYuWozE8fv4ZxuPhQIyVi0Kz4aYGyRjPcH5bSl4oNs,26185
|
|
102
|
+
pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv,sha256=phtrf0m-UYQ7gjoKtIIwINzftTSNd-Bwe9CPen_Gvc8,1048
|
|
103
103
|
pycontrails/models/cocipgrid/cocip_grid_params.py,sha256=l4vBPrOKCJDz5Y1uMjmOGVyUcSWgfZtFWbjW968OPz8,5875
|
|
104
104
|
pycontrails/models/cocipgrid/__init__.py,sha256=ar6bF_8Pusbb-myujz_q5ntFylQTNH8yiM8fxP7Zk30,262
|
|
105
|
-
pycontrails/models/cocipgrid/cocip_grid.py,sha256=
|
|
105
|
+
pycontrails/models/cocipgrid/cocip_grid.py,sha256=di6LDHCPqOzuTAK0xB_Re8NLLd8HK-c1sFSIW9MSKFk,91387
|
|
106
106
|
pycontrails/physics/geo.py,sha256=5THIXgpaHBQdSYWLgtK4mV_8e1hWW9XeTsSHOShFMeA,36323
|
|
107
107
|
pycontrails/physics/units.py,sha256=BC0e0l_pDeijqN179tXl8eX_Qpw8d17MVujBu1SV3IE,12293
|
|
108
108
|
pycontrails/physics/constants.py,sha256=xWy7OkDOJNM6umq5dYiuzwG0aTEl5aECLxEpg3Z2SBQ,3202
|
|
109
109
|
pycontrails/physics/__init__.py,sha256=_1eWbEy6evEWdfJCEkwDiSdpiDNzNWEPVqaPekHyhwU,44
|
|
110
110
|
pycontrails/physics/thermo.py,sha256=sWGpKa12daSpqZYNgyXd8Ii5nfA_1Mm5mMbnM5GsW-E,12787
|
|
111
|
-
pycontrails/physics/jet.py,sha256=
|
|
112
|
-
pycontrails/physics/static/iata-cargo-load-factors-
|
|
113
|
-
pycontrails/physics/static/iata-passenger-load-factors-
|
|
111
|
+
pycontrails/physics/jet.py,sha256=Je1d3vgbBEaVIAL1WZ3C-4p2f9fy9dWOjP5vFVsGGh8,30358
|
|
112
|
+
pycontrails/physics/static/iata-cargo-load-factors-20250221.csv,sha256=ixsnQk1DyGxHMo0pDy4aOoQIwgOyrGfhMRPumEwPMBc,3841
|
|
113
|
+
pycontrails/physics/static/iata-passenger-load-factors-20250221.csv,sha256=Q2olRIqUpbOaavvM5ikG8m1v1YQAN3KLNHeFDPvM53Q,3835
|
|
File without changes
|
|
File without changes
|
|
File without changes
|