pycontrails 0.51.0__cp312-cp312-macosx_11_0_arm64.whl → 0.51.2__cp312-cp312-macosx_11_0_arm64.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 CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.51.0'
16
- __version_tuple__ = version_tuple = (0, 51, 0)
15
+ __version__ = version = '0.51.2'
16
+ __version_tuple__ = version_tuple = (0, 51, 2)
@@ -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(self) -> npt.NDArray[np.float64]:
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], altitude_ft: 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
- return out
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]:
@@ -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]
@@ -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-20240417.csv"
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() -> Mapping[str, PSAircraftEngineParams]:
196
- """Extract aircraft-engine parameters for each aircraft type supported by the PS model."""
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-20231117.csv` for a list of supported
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.230844 0.308675 0.561244
393
- 210.0 61617.676623 0.308675 0.589307
394
- 220.0 64829.702583 0.308675 0.617369
395
- 230.0 68026.415693 0.308675 0.646423
396
- 240.0 71187.897058 0.308675 0.677265
397
- 250.0 71818.514829 0.308542 0.686129
398
- 260.0 71809.073819 0.308073 0.690896
399
- 270.0 71796.095265 0.307367 0.696978
400
- 280.0 71780.225852 0.306500 0.704144
401
- 290.0 71761.957365 0.305529 0.712217
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 57857.463750 0.314462 0.580472
409
- 210.0 60626.062062 0.314467 0.605797
410
- 220.0 63818.498305 0.314467 0.634645
411
- 230.0 66993.691515 0.314467 0.664512
412
- 240.0 70129.930503 0.314467 0.696217
413
- 250.0 71747.933832 0.314423 0.714997
414
- 260.0 71735.433936 0.314098 0.721147
415
- 270.0 71719.057287 0.313542 0.728711
416
- 280.0 71699.595538 0.312830 0.737412
417
- 290.0 71677.628782 0.312016 0.747045
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
- aircraft_params = self.aircraft_engine_params[aircraft_type]
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=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.10,
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 available thrust coefficient. The default value is 0.05,
138
- which increases the maximum available thrust coefficient by 5%.
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 * (1.0 + buffer)
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 (tet_mcc / air_temperature) / (
267
- tr_ec * (1.0 - 0.53 * (mach_number - m_ec) ** 2) * (1.0 + 0.2 * mach_number**2)
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
- 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
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.0
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.0.dist-info/RECORD,,
2
- pycontrails-0.51.0.dist-info/LICENSE,sha256=gJ-h7SFFD1mCfR6a7HILvEtodDT6Iig8bLXdgqR6ucA,10175
3
- pycontrails-0.51.0.dist-info/WHEEL,sha256=Vo9YTsjXxZ5SWdH4n69oS5jU3YTIi3eHk0n-aUcTtlw,110
4
- pycontrails-0.51.0.dist-info/NOTICE,sha256=gKI8DcN1WhiXB2SFRKDogcjONldGubTvBxiOYdC4CXU,1926
5
- pycontrails-0.51.0.dist-info/top_level.txt,sha256=Z8J1R_AiBAyCVjNw6jYLdrA68PrQqTg0t3_Yek_IZ0Q,29
6
- pycontrails-0.51.0.dist-info/METADATA,sha256=ffNiyz3UxTW2Snj6wwHdKIse5R-GTWYebWi6Gx3ZJ3Y,8366
7
- pycontrails/_version.py,sha256=PduUz-IZe7h3dOvDzyQFqtIuB8bpKtQaiE1lK2u0IVU,413
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=Vo9YTsjXxZ5SWdH4n69oS5jU3YTIi3eHk0n-aUcTtlw,110
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=tkR7p8ry5Gxd6Das-84Ny3ClXApwbcVFiqkfihy63T4,81467
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=bLddqnsaA7XVXFcEVXR3V1tVIu5qQ8sxPUjFbwt0lO8,17993
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=XU80xYu0IlCBHq5ntvJ9coHs6EP19713iUwSQREn0NE,311920
25
+ pycontrails/core/rgi_cython.cpython-312-darwin.so,sha256=EGz5ohnMAcq862l05JR5p9Q4YX0mRsEM3a70mYvzMxI,311920
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=d9naGliEEVuk2ER0KZEY5R2FHQZIY5NcP6PamlHcBM0,77149
78
- pycontrails/models/cocip/__init__.py,sha256=7Wy_CnmVqg_Gpg2UhIlisJOJ3naL6c5BBzTSJqdbiM4,902
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=BQ_RUoCS8GYPEUN1QazJhhflAMpUCmyCTZ3iwA8HTbg,31494
87
- pycontrails/models/ps_model/ps_aircraft_params.py,sha256=jiGs9O7UJ_RK0U8P8KvLqegtt6Oyw3WFgfEtIse0Vbs,12551
88
- pycontrails/models/ps_model/ps_operational_limits.py,sha256=7vcki7xdO_1nW_U-Wn2sRhJAu3Fa4G7oX3I0H_7LbvQ,16460
89
- pycontrails/models/ps_model/ps_grid.py,sha256=-QFJe009mhc7-556nDS5VHQT6A9RMkGDbhSUSzomNnM,18667
90
- pycontrails/models/ps_model/static/ps-aircraft-params-20240417.csv,sha256=vQocaWcsp46lezumd_9yFtLpwlGfAzJ6RT5VymC1fHo,24342
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