pycontrails 0.54.3__cp313-cp313-win_amd64.whl → 0.54.4__cp313-cp313-win_amd64.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/__init__.py +2 -2
- pycontrails/_version.py +2 -2
- pycontrails/core/__init__.py +1 -1
- pycontrails/core/aircraft_performance.py +58 -58
- pycontrails/core/cache.py +7 -7
- pycontrails/core/fleet.py +25 -21
- pycontrails/core/flight.py +213 -301
- pycontrails/core/interpolation.py +56 -56
- pycontrails/core/met.py +48 -39
- pycontrails/core/models.py +25 -11
- pycontrails/core/polygon.py +15 -15
- pycontrails/core/rgi_cython.cp313-win_amd64.pyd +0 -0
- pycontrails/core/vector.py +22 -22
- pycontrails/datalib/_met_utils/metsource.py +8 -5
- pycontrails/datalib/ecmwf/__init__.py +14 -14
- pycontrails/datalib/ecmwf/common.py +1 -1
- pycontrails/datalib/ecmwf/era5.py +7 -7
- pycontrails/datalib/ecmwf/hres.py +3 -3
- pycontrails/datalib/ecmwf/ifs.py +1 -1
- pycontrails/datalib/gfs/__init__.py +6 -6
- pycontrails/datalib/gfs/gfs.py +2 -2
- pycontrails/datalib/goes.py +5 -5
- pycontrails/ext/empirical_grid.py +1 -1
- pycontrails/models/apcemm/apcemm.py +3 -3
- pycontrails/models/cocip/__init__.py +2 -2
- pycontrails/models/cocip/cocip.py +15 -15
- pycontrails/models/cocip/cocip_params.py +2 -11
- pycontrails/models/cocip/cocip_uncertainty.py +24 -18
- pycontrails/models/cocip/contrail_properties.py +331 -316
- pycontrails/models/cocip/output_formats.py +53 -53
- pycontrails/models/cocip/radiative_forcing.py +135 -131
- pycontrails/models/cocip/radiative_heating.py +135 -135
- pycontrails/models/cocip/unterstrasser_wake_vortex.py +90 -87
- pycontrails/models/cocip/wake_vortex.py +92 -92
- pycontrails/models/cocip/wind_shear.py +8 -8
- pycontrails/models/cocipgrid/cocip_grid.py +93 -87
- pycontrails/models/dry_advection.py +10 -5
- pycontrails/models/emissions/__init__.py +2 -2
- pycontrails/models/emissions/black_carbon.py +108 -108
- pycontrails/models/emissions/emissions.py +85 -85
- pycontrails/models/emissions/ffm2.py +35 -35
- pycontrails/models/humidity_scaling/humidity_scaling.py +23 -23
- pycontrails/models/ps_model/__init__.py +1 -1
- pycontrails/models/ps_model/ps_aircraft_params.py +8 -4
- pycontrails/models/ps_model/ps_grid.py +74 -64
- pycontrails/models/ps_model/ps_model.py +14 -14
- pycontrails/models/ps_model/ps_operational_limits.py +20 -18
- pycontrails/models/tau_cirrus.py +8 -1
- pycontrails/physics/geo.py +67 -67
- pycontrails/physics/jet.py +79 -79
- pycontrails/physics/units.py +14 -14
- pycontrails/utils/json.py +1 -2
- pycontrails/utils/types.py +12 -7
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/METADATA +2 -2
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/NOTICE +1 -1
- pycontrails-0.54.4.dist-info/RECORD +111 -0
- pycontrails-0.54.3.dist-info/RECORD +0 -111
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/LICENSE +0 -0
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/WHEEL +0 -0
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/top_level.txt +0 -0
|
@@ -14,29 +14,29 @@ from pycontrails.utils.types import ArrayScalarLike
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def mass_emissions_index_fox(
|
|
17
|
-
air_pressure: npt.NDArray[np.
|
|
18
|
-
air_temperature: npt.NDArray[np.
|
|
19
|
-
true_airspeed: npt.NDArray[np.
|
|
20
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
21
|
-
thrust_setting: npt.NDArray[np.
|
|
17
|
+
air_pressure: npt.NDArray[np.floating],
|
|
18
|
+
air_temperature: npt.NDArray[np.floating],
|
|
19
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
20
|
+
fuel_flow_per_engine: npt.NDArray[np.floating],
|
|
21
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
22
22
|
pressure_ratio: float,
|
|
23
23
|
*,
|
|
24
24
|
comp_efficiency: float = 0.9,
|
|
25
|
-
) -> npt.NDArray[np.
|
|
25
|
+
) -> npt.NDArray[np.floating]:
|
|
26
26
|
r"""
|
|
27
27
|
Calculate the black carbon mass emissions index using the Formation and Oxidation Method (FOX).
|
|
28
28
|
|
|
29
29
|
Parameters
|
|
30
30
|
----------
|
|
31
|
-
air_pressure: npt.NDArray[np.
|
|
31
|
+
air_pressure: npt.NDArray[np.floating]
|
|
32
32
|
Pressure altitude at each waypoint, [:math:`Pa`]
|
|
33
|
-
air_temperature: npt.NDArray[np.
|
|
33
|
+
air_temperature: npt.NDArray[np.floating]
|
|
34
34
|
Ambient temperature for each waypoint, [:math:`K`]
|
|
35
|
-
true_airspeed: npt.NDArray[np.
|
|
35
|
+
true_airspeed: npt.NDArray[np.floating]
|
|
36
36
|
True airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
37
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
37
|
+
fuel_flow_per_engine: npt.NDArray[np.floating]
|
|
38
38
|
Fuel mass flow rate per engine, [:math:`kg s^{-1}`]
|
|
39
|
-
thrust_setting: npt.NDArray[np.
|
|
39
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
40
40
|
Engine thrust setting, which is the fuel mass flow rate divided by
|
|
41
41
|
the maximum fuel mass flow rate
|
|
42
42
|
pressure_ratio: float
|
|
@@ -46,7 +46,7 @@ def mass_emissions_index_fox(
|
|
|
46
46
|
|
|
47
47
|
Returns
|
|
48
48
|
-------
|
|
49
|
-
npt.NDArray[np.
|
|
49
|
+
npt.NDArray[np.floating]
|
|
50
50
|
Black carbon mass emissions index, [:math:`mg \ kg_{fuel}^{-1}`]
|
|
51
51
|
|
|
52
52
|
References
|
|
@@ -102,10 +102,10 @@ def flame_temperature(t_3: ArrayScalarLike) -> ArrayScalarLike:
|
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
def bc_mass_concentration_fox(
|
|
105
|
-
fuel_flow: npt.NDArray[np.
|
|
106
|
-
t_fl: npt.NDArray[np.
|
|
107
|
-
afr: npt.NDArray[np.
|
|
108
|
-
) -> npt.NDArray[np.
|
|
105
|
+
fuel_flow: npt.NDArray[np.floating],
|
|
106
|
+
t_fl: npt.NDArray[np.floating] | float,
|
|
107
|
+
afr: npt.NDArray[np.floating] | float,
|
|
108
|
+
) -> npt.NDArray[np.floating]:
|
|
109
109
|
"""Calculate the black carbon mass concentration for ground conditions (``c_bc_ref``).
|
|
110
110
|
|
|
111
111
|
This quantity is computed at the instrument sampling point without correcting
|
|
@@ -113,30 +113,30 @@ def bc_mass_concentration_fox(
|
|
|
113
113
|
|
|
114
114
|
Parameters
|
|
115
115
|
----------
|
|
116
|
-
fuel_flow: npt.NDArray[np.
|
|
116
|
+
fuel_flow: npt.NDArray[np.floating]
|
|
117
117
|
Fuel mass flow rate, [:math:`kg s^{-1}`]
|
|
118
|
-
t_fl: npt.NDArray[np.
|
|
118
|
+
t_fl: npt.NDArray[np.floating] | float
|
|
119
119
|
Flame temperature at the combustion chamber, [:math:`K`]
|
|
120
|
-
afr: npt.NDArray[np.
|
|
120
|
+
afr: npt.NDArray[np.floating] | float
|
|
121
121
|
Air-to-fuel ratio
|
|
122
122
|
|
|
123
123
|
Returns
|
|
124
124
|
-------
|
|
125
|
-
npt.NDArray[np.
|
|
125
|
+
npt.NDArray[np.floating]:
|
|
126
126
|
Black carbon mass concentration for ground conditions, [:math:`mg m^{-3}`]
|
|
127
127
|
"""
|
|
128
128
|
return fuel_flow * (356 * np.exp(-6390 / t_fl) - 608 * afr * np.exp(-19778 / t_fl))
|
|
129
129
|
|
|
130
130
|
|
|
131
131
|
def bc_mass_concentration_cruise_fox(
|
|
132
|
-
c_bc_ref: npt.NDArray[np.
|
|
133
|
-
t_fl_cru: npt.NDArray[np.
|
|
134
|
-
t_fl_ref: npt.NDArray[np.
|
|
135
|
-
p_3_cru: npt.NDArray[np.
|
|
136
|
-
p_3_ref: npt.NDArray[np.
|
|
137
|
-
afr_cru: npt.NDArray[np.
|
|
138
|
-
afr_ref: npt.NDArray[np.
|
|
139
|
-
) -> npt.NDArray[np.
|
|
132
|
+
c_bc_ref: npt.NDArray[np.floating],
|
|
133
|
+
t_fl_cru: npt.NDArray[np.floating],
|
|
134
|
+
t_fl_ref: npt.NDArray[np.floating] | float,
|
|
135
|
+
p_3_cru: npt.NDArray[np.floating],
|
|
136
|
+
p_3_ref: npt.NDArray[np.floating] | float,
|
|
137
|
+
afr_cru: npt.NDArray[np.floating],
|
|
138
|
+
afr_ref: npt.NDArray[np.floating] | float,
|
|
139
|
+
) -> npt.NDArray[np.floating]:
|
|
140
140
|
"""Calculate the black carbon mass concentration for cruise conditions (``c_bc_cru``).
|
|
141
141
|
|
|
142
142
|
This quantity is computed at the instrument sampling point without correcting
|
|
@@ -144,24 +144,24 @@ def bc_mass_concentration_cruise_fox(
|
|
|
144
144
|
|
|
145
145
|
Parameters
|
|
146
146
|
----------
|
|
147
|
-
c_bc_ref: npt.NDArray[np.
|
|
147
|
+
c_bc_ref: npt.NDArray[np.floating]
|
|
148
148
|
Black carbon mass concentration at reference conditions, [:math:`mg m^{-3}`]
|
|
149
|
-
t_fl_cru: npt.NDArray[np.
|
|
149
|
+
t_fl_cru: npt.NDArray[np.floating]
|
|
150
150
|
Flame temperature at cruise conditions, [:math:`K`]
|
|
151
|
-
t_fl_ref: npt.NDArray[np.
|
|
151
|
+
t_fl_ref: npt.NDArray[np.floating] | float
|
|
152
152
|
Flame temperature at reference conditions, [:math:`K`]
|
|
153
|
-
p_3_cru: npt.NDArray[np.
|
|
153
|
+
p_3_cru: npt.NDArray[np.floating]
|
|
154
154
|
Combustor inlet pressure at cruise conditions, [:math:`Pa`]
|
|
155
|
-
p_3_ref: npt.NDArray[np.
|
|
155
|
+
p_3_ref: npt.NDArray[np.floating] | float
|
|
156
156
|
Combustor inlet pressure at reference conditions, [:math:`Pa`]
|
|
157
|
-
afr_cru: npt.NDArray[np.
|
|
157
|
+
afr_cru: npt.NDArray[np.floating]
|
|
158
158
|
Air-to-fuel ratio at cruise conditions
|
|
159
|
-
afr_ref: npt.NDArray[np.
|
|
159
|
+
afr_ref: npt.NDArray[np.floating] | float
|
|
160
160
|
Air-to-fuel ratio at reference conditions
|
|
161
161
|
|
|
162
162
|
Returns
|
|
163
163
|
-------
|
|
164
|
-
npt.NDArray[np.
|
|
164
|
+
npt.NDArray[np.floating]:
|
|
165
165
|
Black carbon mass concentration for cruise conditions, [:math:`mg m^{-3}`]
|
|
166
166
|
"""
|
|
167
167
|
scaling_factor = dopelheuer_lecht_scaling_factor(
|
|
@@ -176,33 +176,33 @@ def bc_mass_concentration_cruise_fox(
|
|
|
176
176
|
|
|
177
177
|
|
|
178
178
|
def dopelheuer_lecht_scaling_factor(
|
|
179
|
-
t_fl_cru: npt.NDArray[np.
|
|
180
|
-
t_fl_ref: npt.NDArray[np.
|
|
181
|
-
p_3_cru: npt.NDArray[np.
|
|
182
|
-
p_3_ref: npt.NDArray[np.
|
|
183
|
-
afr_cru: npt.NDArray[np.
|
|
184
|
-
afr_ref: npt.NDArray[np.
|
|
185
|
-
) -> npt.NDArray[np.
|
|
179
|
+
t_fl_cru: npt.NDArray[np.floating],
|
|
180
|
+
t_fl_ref: npt.NDArray[np.floating] | float,
|
|
181
|
+
p_3_cru: npt.NDArray[np.floating],
|
|
182
|
+
p_3_ref: npt.NDArray[np.floating] | float,
|
|
183
|
+
afr_cru: npt.NDArray[np.floating],
|
|
184
|
+
afr_ref: npt.NDArray[np.floating] | float,
|
|
185
|
+
) -> npt.NDArray[np.floating]:
|
|
186
186
|
"""Estimate scaling factor to convert the reference BC mass concentration from ground to cruise.
|
|
187
187
|
|
|
188
188
|
Parameters
|
|
189
189
|
----------
|
|
190
|
-
t_fl_cru: npt.NDArray[np.
|
|
190
|
+
t_fl_cru: npt.NDArray[np.floating]
|
|
191
191
|
Flame temperature at cruise conditions, [:math:`K`]
|
|
192
|
-
t_fl_ref: npt.NDArray[np.
|
|
192
|
+
t_fl_ref: npt.NDArray[np.floating] | float
|
|
193
193
|
Flame temperature at reference conditions, [:math:`K`]
|
|
194
|
-
p_3_cru: npt.NDArray[np.
|
|
194
|
+
p_3_cru: npt.NDArray[np.floating]
|
|
195
195
|
Combustor inlet pressure at cruise conditions, [:math:`Pa`]
|
|
196
|
-
p_3_ref: npt.NDArray[np.
|
|
196
|
+
p_3_ref: npt.NDArray[np.floating] | float
|
|
197
197
|
Combustor inlet pressure at reference conditions, [:math:`Pa`]
|
|
198
|
-
afr_cru: npt.NDArray[np.
|
|
198
|
+
afr_cru: npt.NDArray[np.floating]
|
|
199
199
|
Air-to-fuel ratio at cruise conditions
|
|
200
|
-
afr_ref: npt.NDArray[np.
|
|
200
|
+
afr_ref: npt.NDArray[np.floating] | float
|
|
201
201
|
Air-to-fuel ratio at reference conditions
|
|
202
202
|
|
|
203
203
|
Returns
|
|
204
204
|
-------
|
|
205
|
-
npt.NDArray[np.
|
|
205
|
+
npt.NDArray[np.floating]
|
|
206
206
|
Dopelheuer & Lecht scaling factor
|
|
207
207
|
|
|
208
208
|
References
|
|
@@ -219,17 +219,17 @@ def dopelheuer_lecht_scaling_factor(
|
|
|
219
219
|
|
|
220
220
|
|
|
221
221
|
def mass_emissions_index_imfox(
|
|
222
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
223
|
-
thrust_setting: npt.NDArray[np.
|
|
222
|
+
fuel_flow_per_engine: npt.NDArray[np.floating],
|
|
223
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
224
224
|
fuel_hydrogen: float,
|
|
225
|
-
) -> npt.NDArray[np.
|
|
225
|
+
) -> npt.NDArray[np.floating]:
|
|
226
226
|
r"""Calculate the BC mass EI using the "Improved" Formation and Oxidation Method (ImFOX).
|
|
227
227
|
|
|
228
228
|
Parameters
|
|
229
229
|
----------
|
|
230
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
230
|
+
fuel_flow_per_engine: npt.NDArray[np.floating]
|
|
231
231
|
Fuel mass flow rate per engine, [:math:`kg s^{-1}`]
|
|
232
|
-
thrust_setting: npt.NDArray[np.
|
|
232
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
233
233
|
Engine thrust setting, which is the fuel mass flow rate divided by the
|
|
234
234
|
maximum fuel mass flow rate
|
|
235
235
|
fuel_hydrogen: float
|
|
@@ -237,7 +237,7 @@ def mass_emissions_index_imfox(
|
|
|
237
237
|
|
|
238
238
|
Returns
|
|
239
239
|
-------
|
|
240
|
-
npt.NDArray[np.
|
|
240
|
+
npt.NDArray[np.floating]
|
|
241
241
|
Black carbon mass emissions index, [:math:`mg \ kg_{fuel}^{-1}`]
|
|
242
242
|
|
|
243
243
|
References
|
|
@@ -253,20 +253,20 @@ def mass_emissions_index_imfox(
|
|
|
253
253
|
return bc_mass_emissions_index(c_bc_cru, q_exhaust_cru)
|
|
254
254
|
|
|
255
255
|
|
|
256
|
-
def air_to_fuel_ratio_imfox(thrust_setting: npt.NDArray[np.
|
|
256
|
+
def air_to_fuel_ratio_imfox(thrust_setting: npt.NDArray[np.floating]) -> npt.NDArray[np.floating]:
|
|
257
257
|
"""Calculate the air-to-fuel ratio at cruise conditions via Abrahamson's method.
|
|
258
258
|
|
|
259
259
|
See Eq. (11) in :cite:`abrahamsonPredictiveModelDevelopment2016`.
|
|
260
260
|
|
|
261
261
|
Parameters
|
|
262
262
|
----------
|
|
263
|
-
thrust_setting: npt.NDArray[np.
|
|
263
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
264
264
|
Engine thrust setting, which is the fuel mass flow rate divided by
|
|
265
265
|
the maximum fuel mass flow rate
|
|
266
266
|
|
|
267
267
|
Returns
|
|
268
268
|
-------
|
|
269
|
-
npt.NDArray[np.
|
|
269
|
+
npt.NDArray[np.floating]
|
|
270
270
|
Air-to-fuel ratio at cruise conditions
|
|
271
271
|
|
|
272
272
|
References
|
|
@@ -276,19 +276,19 @@ def air_to_fuel_ratio_imfox(thrust_setting: npt.NDArray[np.float64]) -> npt.NDAr
|
|
|
276
276
|
return 55.4 - 30.8 * thrust_setting
|
|
277
277
|
|
|
278
278
|
|
|
279
|
-
def turbine_inlet_temperature_imfox(afr: npt.NDArray[np.
|
|
279
|
+
def turbine_inlet_temperature_imfox(afr: npt.NDArray[np.floating]) -> npt.NDArray[np.floating]:
|
|
280
280
|
"""Calculate the turbine inlet temperature using Abrahamson's method.
|
|
281
281
|
|
|
282
282
|
See Eq. (13) in :cite:`abrahamsonPredictiveModelDevelopment2016`.
|
|
283
283
|
|
|
284
284
|
Parameters
|
|
285
285
|
----------
|
|
286
|
-
afr: npt.NDArray[np.
|
|
286
|
+
afr: npt.NDArray[np.floating]
|
|
287
287
|
air-to-fuel ratio at cruise conditions
|
|
288
288
|
|
|
289
289
|
Returns
|
|
290
290
|
-------
|
|
291
|
-
npt.NDArray[np.
|
|
291
|
+
npt.NDArray[np.floating]
|
|
292
292
|
turbine inlet temperature, [:math:`K`]
|
|
293
293
|
|
|
294
294
|
References
|
|
@@ -299,11 +299,11 @@ def turbine_inlet_temperature_imfox(afr: npt.NDArray[np.float64]) -> npt.NDArray
|
|
|
299
299
|
|
|
300
300
|
|
|
301
301
|
def bc_mass_concentration_imfox(
|
|
302
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
303
|
-
afr: npt.NDArray[np.
|
|
304
|
-
t_4: npt.NDArray[np.
|
|
302
|
+
fuel_flow_per_engine: npt.NDArray[np.floating],
|
|
303
|
+
afr: npt.NDArray[np.floating],
|
|
304
|
+
t_4: npt.NDArray[np.floating],
|
|
305
305
|
fuel_hydrogen: float,
|
|
306
|
-
) -> npt.NDArray[np.
|
|
306
|
+
) -> npt.NDArray[np.floating]:
|
|
307
307
|
"""Calculate the BC mass concentration for ground and cruise conditions with ImFOX methodology.
|
|
308
308
|
|
|
309
309
|
This quantity is computed at the instrument sampling point without
|
|
@@ -311,18 +311,18 @@ def bc_mass_concentration_imfox(
|
|
|
311
311
|
|
|
312
312
|
Parameters
|
|
313
313
|
----------
|
|
314
|
-
fuel_flow_per_engine: npt.NDArray[np.
|
|
314
|
+
fuel_flow_per_engine: npt.NDArray[np.floating]
|
|
315
315
|
fuel mass flow rate per engine, [:math:`kg s^{-1}`]
|
|
316
|
-
afr: npt.NDArray[np.
|
|
316
|
+
afr: npt.NDArray[np.floating]
|
|
317
317
|
air-to-fuel ratio
|
|
318
|
-
t_4: npt.NDArray[np.
|
|
318
|
+
t_4: npt.NDArray[np.floating]
|
|
319
319
|
turbine inlet temperature, [:math:`K`]
|
|
320
320
|
fuel_hydrogen: float
|
|
321
321
|
percentage of hydrogen mass content in the fuel (13.8% for conventional Jet A-1 fuel)
|
|
322
322
|
|
|
323
323
|
Returns
|
|
324
324
|
-------
|
|
325
|
-
npt.NDArray[np.
|
|
325
|
+
npt.NDArray[np.floating]
|
|
326
326
|
Black carbon mass concentration, [:math:`mg m^{-3}`]
|
|
327
327
|
"""
|
|
328
328
|
exp_term = np.exp(13.6 - fuel_hydrogen)
|
|
@@ -336,18 +336,18 @@ def bc_mass_concentration_imfox(
|
|
|
336
336
|
# ---------------------------------------------------------
|
|
337
337
|
|
|
338
338
|
|
|
339
|
-
def exhaust_gas_volume_per_kg_fuel(afr: npt.NDArray[np.
|
|
339
|
+
def exhaust_gas_volume_per_kg_fuel(afr: npt.NDArray[np.floating]) -> npt.NDArray[np.floating]:
|
|
340
340
|
"""
|
|
341
341
|
Calculate the volume of exhaust gas per mass of fuel burnt.
|
|
342
342
|
|
|
343
343
|
Parameters
|
|
344
344
|
----------
|
|
345
|
-
afr: npt.NDArray[np.
|
|
345
|
+
afr: npt.NDArray[np.floating]
|
|
346
346
|
Air-to-fuel ratio
|
|
347
347
|
|
|
348
348
|
Returns
|
|
349
349
|
-------
|
|
350
|
-
npt.NDArray[np.
|
|
350
|
+
npt.NDArray[np.floating]
|
|
351
351
|
Volume of exhaust gas per mass of fuel burnt, [:math:`m^{3}/kg_{fuel}`]
|
|
352
352
|
|
|
353
353
|
References
|
|
@@ -358,21 +358,21 @@ def exhaust_gas_volume_per_kg_fuel(afr: npt.NDArray[np.float64]) -> npt.NDArray[
|
|
|
358
358
|
|
|
359
359
|
|
|
360
360
|
def bc_mass_emissions_index(
|
|
361
|
-
c_bc: npt.NDArray[np.
|
|
362
|
-
) -> npt.NDArray[np.
|
|
361
|
+
c_bc: npt.NDArray[np.floating], q_exhaust: npt.NDArray[np.floating]
|
|
362
|
+
) -> npt.NDArray[np.floating]:
|
|
363
363
|
"""
|
|
364
364
|
Calculate the black carbon mass emissions index.
|
|
365
365
|
|
|
366
366
|
Parameters
|
|
367
367
|
----------
|
|
368
|
-
c_bc: npt.NDArray[np.
|
|
368
|
+
c_bc: npt.NDArray[np.floating]
|
|
369
369
|
Black carbon mass concentration, [:math:`mg m^{-3}`]
|
|
370
|
-
q_exhaust: npt.NDArray[np.
|
|
370
|
+
q_exhaust: npt.NDArray[np.floating]
|
|
371
371
|
Volume of exhaust gas per mass of fuel burnt, [:math:`m^{3}/kg_{fuel}`]
|
|
372
372
|
|
|
373
373
|
Returns
|
|
374
374
|
-------
|
|
375
|
-
npt.NDArray[np.
|
|
375
|
+
npt.NDArray[np.floating]
|
|
376
376
|
Black carbon mass emissions index, [:math:`mg/kg_{fuel}`]
|
|
377
377
|
|
|
378
378
|
References
|
|
@@ -388,17 +388,17 @@ def bc_mass_emissions_index(
|
|
|
388
388
|
|
|
389
389
|
|
|
390
390
|
def geometric_mean_diameter_sac(
|
|
391
|
-
air_pressure: npt.NDArray[np.
|
|
392
|
-
air_temperature: npt.NDArray[np.
|
|
393
|
-
true_airspeed: npt.NDArray[np.
|
|
394
|
-
thrust_setting: npt.NDArray[np.
|
|
391
|
+
air_pressure: npt.NDArray[np.floating],
|
|
392
|
+
air_temperature: npt.NDArray[np.floating],
|
|
393
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
394
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
395
395
|
pressure_ratio: float,
|
|
396
396
|
q_fuel: float,
|
|
397
397
|
*,
|
|
398
398
|
comp_efficiency: float = 0.9,
|
|
399
399
|
delta_loss: float = 5.75,
|
|
400
400
|
cruise: bool = True,
|
|
401
|
-
) -> npt.NDArray[np.
|
|
401
|
+
) -> npt.NDArray[np.floating]:
|
|
402
402
|
r"""Calculate the BC GMD for singular annular combustor (SAC) engines.
|
|
403
403
|
|
|
404
404
|
The BC (black carbon) GMD (geometric mean diameter) is estimated using
|
|
@@ -407,13 +407,13 @@ def geometric_mean_diameter_sac(
|
|
|
407
407
|
|
|
408
408
|
Parameters
|
|
409
409
|
----------
|
|
410
|
-
air_pressure: npt.NDArray[np.
|
|
410
|
+
air_pressure: npt.NDArray[np.floating]
|
|
411
411
|
Pressure altitude at each waypoint, [:math:`Pa`]
|
|
412
|
-
air_temperature: npt.NDArray[np.
|
|
412
|
+
air_temperature: npt.NDArray[np.floating]
|
|
413
413
|
Ambient temperature for each waypoint, [:math:`K`]
|
|
414
|
-
true_airspeed: npt.NDArray[np.
|
|
414
|
+
true_airspeed: npt.NDArray[np.floating]
|
|
415
415
|
True airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
416
|
-
thrust_setting: npt.NDArray[np.
|
|
416
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
417
417
|
Engine thrust setting, which is the fuel mass flow rate divided by the
|
|
418
418
|
maximum fuel mass flow rate
|
|
419
419
|
pressure_ratio: float
|
|
@@ -429,7 +429,7 @@ def geometric_mean_diameter_sac(
|
|
|
429
429
|
|
|
430
430
|
Returns
|
|
431
431
|
-------
|
|
432
|
-
npt.NDArray[np.
|
|
432
|
+
npt.NDArray[np.floating]
|
|
433
433
|
black carbon geometric mean diameter, [:math:`nm`]
|
|
434
434
|
|
|
435
435
|
References
|
|
@@ -450,15 +450,15 @@ def geometric_mean_diameter_sac(
|
|
|
450
450
|
|
|
451
451
|
|
|
452
452
|
def number_emissions_index_fractal_aggregates(
|
|
453
|
-
nvpm_ei_m: npt.NDArray[np.
|
|
454
|
-
gmd: npt.NDArray[np.
|
|
453
|
+
nvpm_ei_m: npt.NDArray[np.floating],
|
|
454
|
+
gmd: npt.NDArray[np.floating],
|
|
455
455
|
*,
|
|
456
|
-
gsd: float | npt.NDArray[np.
|
|
456
|
+
gsd: float | npt.NDArray[np.floating] = 1.80,
|
|
457
457
|
rho_bc: float = 1770,
|
|
458
458
|
k_tem: float = 1.621e-5,
|
|
459
459
|
d_tem: float = 0.39,
|
|
460
460
|
d_fm: float = 2.76,
|
|
461
|
-
) -> npt.NDArray[np.
|
|
461
|
+
) -> npt.NDArray[np.floating]:
|
|
462
462
|
"""
|
|
463
463
|
Estimate the black carbon number emission index using the fractal aggregates (FA) model.
|
|
464
464
|
|
|
@@ -467,9 +467,9 @@ def number_emissions_index_fractal_aggregates(
|
|
|
467
467
|
|
|
468
468
|
Parameters
|
|
469
469
|
----------
|
|
470
|
-
nvpm_ei_m: npt.NDArray[np.
|
|
470
|
+
nvpm_ei_m: npt.NDArray[np.floating]
|
|
471
471
|
Black carbon mass emissions index, [:math:`kg/kg_{fuel}`]
|
|
472
|
-
gmd: npt.NDArray[np.
|
|
472
|
+
gmd: npt.NDArray[np.floating]
|
|
473
473
|
Black carbon geometric mean diameter, [:math:`m`]
|
|
474
474
|
gsd: float
|
|
475
475
|
Black carbon geometric standard deviation (assumed to be 1.80)
|
|
@@ -484,7 +484,7 @@ def number_emissions_index_fractal_aggregates(
|
|
|
484
484
|
|
|
485
485
|
Returns
|
|
486
486
|
-------
|
|
487
|
-
npt.NDArray[np.
|
|
487
|
+
npt.NDArray[np.floating]
|
|
488
488
|
Black carbon number emissions index, [:math:`kg_{fuel}^{-1}`]
|
|
489
489
|
|
|
490
490
|
References
|
|
@@ -506,9 +506,9 @@ def number_emissions_index_fractal_aggregates(
|
|
|
506
506
|
|
|
507
507
|
|
|
508
508
|
def nvpm_number_ei_pct_reduction_due_to_saf(
|
|
509
|
-
hydrogen_content: float | npt.NDArray[np.
|
|
510
|
-
thrust_setting: npt.NDArray[np.
|
|
511
|
-
) -> npt.NDArray[np.
|
|
509
|
+
hydrogen_content: float | npt.NDArray[np.floating],
|
|
510
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
511
|
+
) -> npt.NDArray[np.floating]:
|
|
512
512
|
"""
|
|
513
513
|
Adjust nvPM number emissions index to account for the effects of sustainable aviation fuels.
|
|
514
514
|
|
|
@@ -516,13 +516,13 @@ def nvpm_number_ei_pct_reduction_due_to_saf(
|
|
|
516
516
|
----------
|
|
517
517
|
hydrogen_content: float
|
|
518
518
|
The percentage of hydrogen mass content in the fuel.
|
|
519
|
-
thrust_setting: npt.NDArray[np.
|
|
519
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
520
520
|
Engine thrust setting, where the equivalent fuel mass flow rate per engine at
|
|
521
521
|
sea level, :math:`[0 - 1]`.
|
|
522
522
|
|
|
523
523
|
Returns
|
|
524
524
|
-------
|
|
525
|
-
npt.NDArray[np.
|
|
525
|
+
npt.NDArray[np.floating]
|
|
526
526
|
Percentage reduction in nvPM number emissions index
|
|
527
527
|
|
|
528
528
|
References
|
|
@@ -537,9 +537,9 @@ def nvpm_number_ei_pct_reduction_due_to_saf(
|
|
|
537
537
|
|
|
538
538
|
|
|
539
539
|
def nvpm_mass_ei_pct_reduction_due_to_saf(
|
|
540
|
-
hydrogen_content: float | npt.NDArray[np.
|
|
541
|
-
thrust_setting: npt.NDArray[np.
|
|
542
|
-
) -> npt.NDArray[np.
|
|
540
|
+
hydrogen_content: float | npt.NDArray[np.floating],
|
|
541
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
542
|
+
) -> npt.NDArray[np.floating]:
|
|
543
543
|
"""
|
|
544
544
|
Adjust nvPM mass emissions index to account for the effects of sustainable aviation fuels.
|
|
545
545
|
|
|
@@ -550,13 +550,13 @@ def nvpm_mass_ei_pct_reduction_due_to_saf(
|
|
|
550
550
|
----------
|
|
551
551
|
hydrogen_content: float
|
|
552
552
|
The percentage of hydrogen mass content in the fuel.
|
|
553
|
-
thrust_setting: npt.NDArray[np.
|
|
553
|
+
thrust_setting: npt.NDArray[np.floating]
|
|
554
554
|
Engine thrust setting, where the equivalent fuel mass flow rate per engine at
|
|
555
555
|
sea level, :math:`[0 - 1]`.
|
|
556
556
|
|
|
557
557
|
Returns
|
|
558
558
|
-------
|
|
559
|
-
npt.NDArray[np.
|
|
559
|
+
npt.NDArray[np.floating]
|
|
560
560
|
Percentage reduction in nvPM number emissions index
|
|
561
561
|
|
|
562
562
|
References
|
|
@@ -571,12 +571,12 @@ def nvpm_mass_ei_pct_reduction_due_to_saf(
|
|
|
571
571
|
|
|
572
572
|
|
|
573
573
|
def _template_saf_reduction(
|
|
574
|
-
hydrogen_content: float | npt.NDArray[np.
|
|
575
|
-
thrust_setting: npt.NDArray[np.
|
|
574
|
+
hydrogen_content: float | npt.NDArray[np.floating],
|
|
575
|
+
thrust_setting: npt.NDArray[np.floating],
|
|
576
576
|
a0: float,
|
|
577
577
|
a1: float,
|
|
578
578
|
a2: float,
|
|
579
|
-
) -> npt.NDArray[np.
|
|
579
|
+
) -> npt.NDArray[np.floating]:
|
|
580
580
|
# Thrust setting cannot be computed when engine data is not provided in
|
|
581
581
|
# the ICAO EDB, so set default to 45% thrust.
|
|
582
582
|
thrust_setting = np.nan_to_num(thrust_setting, nan=0.45)
|