pycontrails 0.54.3__cp312-cp312-macosx_11_0_arm64.whl → 0.54.5__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/__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 +54 -29
- pycontrails/core/flight.py +218 -301
- pycontrails/core/interpolation.py +63 -60
- pycontrails/core/met.py +193 -125
- pycontrails/core/models.py +27 -13
- pycontrails/core/polygon.py +15 -15
- pycontrails/core/rgi_cython.cpython-312-darwin.so +0 -0
- pycontrails/core/vector.py +119 -96
- 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 +5 -5
- pycontrails/models/apcemm/utils.py +1 -1
- pycontrails/models/cocip/__init__.py +2 -2
- pycontrails/models/cocip/cocip.py +23 -24
- 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 +37 -96
- pycontrails/models/dry_advection.py +60 -19
- pycontrails/models/emissions/__init__.py +2 -2
- pycontrails/models/emissions/black_carbon.py +108 -108
- pycontrails/models/emissions/emissions.py +87 -87
- pycontrails/models/emissions/ffm2.py +35 -35
- pycontrails/models/humidity_scaling/humidity_scaling.py +23 -23
- pycontrails/models/issr.py +2 -2
- 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 +76 -66
- pycontrails/models/ps_model/ps_model.py +16 -16
- 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.5.dist-info}/METADATA +2 -2
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.5.dist-info}/NOTICE +1 -1
- pycontrails-0.54.5.dist-info/RECORD +111 -0
- pycontrails-0.54.3.dist-info/RECORD +0 -111
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.5.dist-info}/LICENSE +0 -0
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.5.dist-info}/WHEEL +0 -0
- {pycontrails-0.54.3.dist-info → pycontrails-0.54.5.dist-info}/top_level.txt +0 -0
|
@@ -31,43 +31,43 @@ from pycontrails.physics import constants, thermo
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def max_downward_displacement(
|
|
34
|
-
wingspan: npt.NDArray[np.
|
|
35
|
-
true_airspeed: npt.NDArray[np.
|
|
36
|
-
aircraft_mass: npt.NDArray[np.
|
|
37
|
-
air_temperature: npt.NDArray[np.
|
|
38
|
-
dT_dz: npt.NDArray[np.
|
|
39
|
-
ds_dz: npt.NDArray[np.
|
|
40
|
-
air_pressure: npt.NDArray[np.
|
|
34
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
35
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
36
|
+
aircraft_mass: npt.NDArray[np.floating] | float,
|
|
37
|
+
air_temperature: npt.NDArray[np.floating],
|
|
38
|
+
dT_dz: npt.NDArray[np.floating],
|
|
39
|
+
ds_dz: npt.NDArray[np.floating],
|
|
40
|
+
air_pressure: npt.NDArray[np.floating],
|
|
41
41
|
effective_vertical_resolution: float,
|
|
42
|
-
wind_shear_enhancement_exponent: float | npt.NDArray[np.
|
|
43
|
-
) -> npt.NDArray[np.
|
|
42
|
+
wind_shear_enhancement_exponent: float | npt.NDArray[np.floating],
|
|
43
|
+
) -> npt.NDArray[np.floating]:
|
|
44
44
|
"""
|
|
45
45
|
Calculate the maximum contrail downward displacement after the wake vortex phase.
|
|
46
46
|
|
|
47
47
|
Parameters
|
|
48
48
|
----------
|
|
49
|
-
wingspan : npt.NDArray[np.
|
|
49
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
50
50
|
aircraft wingspan, [:math:`m`]
|
|
51
|
-
true_airspeed : npt.NDArray[np.
|
|
51
|
+
true_airspeed : npt.NDArray[np.floating]
|
|
52
52
|
true airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
53
|
-
aircraft_mass : npt.NDArray[np.
|
|
53
|
+
aircraft_mass : npt.NDArray[np.floating] | float
|
|
54
54
|
aircraft mass for each waypoint, [:math:`kg`]
|
|
55
|
-
air_temperature : npt.NDArray[np.
|
|
55
|
+
air_temperature : npt.NDArray[np.floating]
|
|
56
56
|
ambient temperature for each waypoint, [:math:`K`]
|
|
57
|
-
dT_dz : npt.NDArray[np.
|
|
57
|
+
dT_dz : npt.NDArray[np.floating]
|
|
58
58
|
potential temperature gradient, [:math:`K m^{-1}`]
|
|
59
|
-
ds_dz : npt.NDArray[np.
|
|
59
|
+
ds_dz : npt.NDArray[np.floating]
|
|
60
60
|
Difference in wind speed over dz in the atmosphere, [:math:`m s^{-1} / m`]
|
|
61
|
-
air_pressure : npt.NDArray[np.
|
|
61
|
+
air_pressure : npt.NDArray[np.floating]
|
|
62
62
|
pressure altitude at each waypoint, [:math:`Pa`]
|
|
63
63
|
effective_vertical_resolution: float
|
|
64
64
|
Passed through to :func:`wind_shear.wind_shear_enhancement_factor`, [:math:`m`]
|
|
65
|
-
wind_shear_enhancement_exponent: npt.NDArray[np.
|
|
65
|
+
wind_shear_enhancement_exponent: npt.NDArray[np.floating] | float
|
|
66
66
|
Passed through to :func:`wind_shear.wind_shear_enhancement_factor`
|
|
67
67
|
|
|
68
68
|
Returns
|
|
69
69
|
-------
|
|
70
|
-
npt.NDArray[np.
|
|
70
|
+
npt.NDArray[np.floating]
|
|
71
71
|
Max contrail downward displacement after the wake vortex phase, [:math:`m`]
|
|
72
72
|
|
|
73
73
|
References
|
|
@@ -107,28 +107,28 @@ def max_downward_displacement(
|
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
def effective_time_scale(
|
|
110
|
-
wingspan: npt.NDArray[np.
|
|
111
|
-
true_airspeed: npt.NDArray[np.
|
|
112
|
-
aircraft_mass: npt.NDArray[np.
|
|
113
|
-
rho_air: npt.NDArray[np.
|
|
114
|
-
) -> npt.NDArray[np.
|
|
110
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
111
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
112
|
+
aircraft_mass: npt.NDArray[np.floating] | float,
|
|
113
|
+
rho_air: npt.NDArray[np.floating],
|
|
114
|
+
) -> npt.NDArray[np.floating]:
|
|
115
115
|
r"""
|
|
116
116
|
Calculate the effective time scale of the wake vortex.
|
|
117
117
|
|
|
118
118
|
Parameters
|
|
119
119
|
----------
|
|
120
|
-
wingspan : npt.NDArray[np.
|
|
120
|
+
wingspan : npt.NDArray[np.floating]
|
|
121
121
|
aircraft wingspan, [:math:`m`]
|
|
122
|
-
true_airspeed : npt.NDArray[np.
|
|
122
|
+
true_airspeed : npt.NDArray[np.floating]
|
|
123
123
|
true airspeed for each waypoint, [:math:`m \ s^{-1}`]
|
|
124
|
-
aircraft_mass : npt.NDArray[np.
|
|
124
|
+
aircraft_mass : npt.NDArray[np.floating]
|
|
125
125
|
aircraft mass for each waypoint, [:math:`kg`]
|
|
126
|
-
rho_air : npt.NDArray[np.
|
|
126
|
+
rho_air : npt.NDArray[np.floating]
|
|
127
127
|
density of air for each waypoint, [:math:`kg \ m^{-3}`]
|
|
128
128
|
|
|
129
129
|
Returns
|
|
130
130
|
-------
|
|
131
|
-
npt.NDArray[np.
|
|
131
|
+
npt.NDArray[np.floating]
|
|
132
132
|
Wake vortex effective time scale, [:math:`s`]
|
|
133
133
|
|
|
134
134
|
Notes
|
|
@@ -144,31 +144,31 @@ def effective_time_scale(
|
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
def downward_displacement_strongly_stratified(
|
|
147
|
-
wingspan: npt.NDArray[np.
|
|
148
|
-
true_airspeed: npt.NDArray[np.
|
|
149
|
-
aircraft_mass: npt.NDArray[np.
|
|
150
|
-
rho_air: npt.NDArray[np.
|
|
151
|
-
n_bv: npt.NDArray[np.
|
|
152
|
-
) -> npt.NDArray[np.
|
|
147
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
148
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
149
|
+
aircraft_mass: npt.NDArray[np.floating] | float,
|
|
150
|
+
rho_air: npt.NDArray[np.floating],
|
|
151
|
+
n_bv: npt.NDArray[np.floating],
|
|
152
|
+
) -> npt.NDArray[np.floating]:
|
|
153
153
|
"""
|
|
154
154
|
Calculate the maximum contrail downward displacement under strongly stratified conditions.
|
|
155
155
|
|
|
156
156
|
Parameters
|
|
157
157
|
----------
|
|
158
|
-
wingspan : npt.NDArray[np.
|
|
158
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
159
159
|
aircraft wingspan, [:math:`m`]
|
|
160
|
-
true_airspeed : npt.NDArray[np.
|
|
160
|
+
true_airspeed : npt.NDArray[np.floating]
|
|
161
161
|
true airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
162
|
-
aircraft_mass : npt.NDArray[np.
|
|
162
|
+
aircraft_mass : npt.NDArray[np.floating] | float
|
|
163
163
|
aircraft mass for each waypoint, [:math:`kg`]
|
|
164
|
-
rho_air : npt.NDArray[np.
|
|
164
|
+
rho_air : npt.NDArray[np.floating]
|
|
165
165
|
density of air for each waypoint, [:math:`kg m^{-3}`]
|
|
166
|
-
n_bv : npt.NDArray[np.
|
|
166
|
+
n_bv : npt.NDArray[np.floating]
|
|
167
167
|
Brunt-Vaisaila frequency, [:math:`s^{-1}`]
|
|
168
168
|
|
|
169
169
|
Returns
|
|
170
170
|
-------
|
|
171
|
-
npt.NDArray[np.
|
|
171
|
+
npt.NDArray[np.floating]
|
|
172
172
|
Maximum contrail downward displacement, strongly stratified conditions, [:math:`m`]
|
|
173
173
|
|
|
174
174
|
Notes
|
|
@@ -184,46 +184,46 @@ def downward_displacement_strongly_stratified(
|
|
|
184
184
|
|
|
185
185
|
|
|
186
186
|
def downward_displacement_weakly_stratified(
|
|
187
|
-
wingspan: npt.NDArray[np.
|
|
188
|
-
true_airspeed: npt.NDArray[np.
|
|
189
|
-
aircraft_mass: npt.NDArray[np.
|
|
190
|
-
rho_air: npt.NDArray[np.
|
|
191
|
-
n_bv: npt.NDArray[np.
|
|
192
|
-
dz_max_strong: npt.NDArray[np.
|
|
193
|
-
ds_dz: npt.NDArray[np.
|
|
194
|
-
t_0: npt.NDArray[np.
|
|
187
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
188
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
189
|
+
aircraft_mass: npt.NDArray[np.floating] | float,
|
|
190
|
+
rho_air: npt.NDArray[np.floating],
|
|
191
|
+
n_bv: npt.NDArray[np.floating],
|
|
192
|
+
dz_max_strong: npt.NDArray[np.floating],
|
|
193
|
+
ds_dz: npt.NDArray[np.floating],
|
|
194
|
+
t_0: npt.NDArray[np.floating],
|
|
195
195
|
effective_vertical_resolution: float,
|
|
196
|
-
wind_shear_enhancement_exponent: npt.NDArray[np.
|
|
197
|
-
) -> npt.NDArray[np.
|
|
196
|
+
wind_shear_enhancement_exponent: npt.NDArray[np.floating] | float,
|
|
197
|
+
) -> npt.NDArray[np.floating]:
|
|
198
198
|
"""
|
|
199
199
|
Calculate the maximum contrail downward displacement under weakly/stably stratified conditions.
|
|
200
200
|
|
|
201
201
|
Parameters
|
|
202
202
|
----------
|
|
203
|
-
wingspan : npt.NDArray[np.
|
|
203
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
204
204
|
aircraft wingspan, [:math:`m`]
|
|
205
|
-
true_airspeed : npt.NDArray[np.
|
|
205
|
+
true_airspeed : npt.NDArray[np.floating]
|
|
206
206
|
true airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
207
|
-
aircraft_mass : npt.NDArray[np.
|
|
207
|
+
aircraft_mass : npt.NDArray[np.floating] | float
|
|
208
208
|
aircraft mass for each waypoint, [:math:`kg`]
|
|
209
|
-
rho_air : npt.NDArray[np.
|
|
209
|
+
rho_air : npt.NDArray[np.floating]
|
|
210
210
|
density of air for each waypoint, [:math:`kg m^{-3}`]
|
|
211
|
-
n_bv : npt.NDArray[np.
|
|
211
|
+
n_bv : npt.NDArray[np.floating]
|
|
212
212
|
Brunt-Vaisaila frequency, [:math:`s^{-1}`]
|
|
213
|
-
dz_max_strong : npt.NDArray[np.
|
|
213
|
+
dz_max_strong : npt.NDArray[np.floating]
|
|
214
214
|
Max contrail downward displacement under strongly stratified conditions, [:math:`m`]
|
|
215
|
-
ds_dz : npt.NDArray[np.
|
|
215
|
+
ds_dz : npt.NDArray[np.floating]
|
|
216
216
|
Difference in wind speed over dz in the atmosphere, [:math:`m s^{-1} / m`]
|
|
217
|
-
t_0 : npt.NDArray[np.
|
|
217
|
+
t_0 : npt.NDArray[np.floating]
|
|
218
218
|
Wake vortex effective time scale, [:math:`s`]
|
|
219
219
|
effective_vertical_resolution: float
|
|
220
220
|
Passed through to :func:`wind_shear.wind_shear_enhancement_factor`, [:math:`m`]
|
|
221
|
-
wind_shear_enhancement_exponent: npt.NDArray[np.
|
|
221
|
+
wind_shear_enhancement_exponent: npt.NDArray[np.floating] | float
|
|
222
222
|
Passed through to :func:`wind_shear.wind_shear_enhancement_factor`
|
|
223
223
|
|
|
224
224
|
Returns
|
|
225
225
|
-------
|
|
226
|
-
npt.NDArray[np.
|
|
226
|
+
npt.NDArray[np.floating]
|
|
227
227
|
Maximum contrail downward displacement, weakly/stably stratified conditions, [:math:`m`]
|
|
228
228
|
|
|
229
229
|
Notes
|
|
@@ -248,28 +248,28 @@ def downward_displacement_weakly_stratified(
|
|
|
248
248
|
|
|
249
249
|
|
|
250
250
|
def wake_vortex_separation(
|
|
251
|
-
wingspan: npt.NDArray[np.
|
|
252
|
-
) -> npt.NDArray[np.
|
|
251
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
252
|
+
) -> npt.NDArray[np.floating] | float:
|
|
253
253
|
"""
|
|
254
254
|
Calculate the wake vortex separation.
|
|
255
255
|
|
|
256
256
|
Parameters
|
|
257
257
|
----------
|
|
258
|
-
wingspan : npt.NDArray[np.
|
|
258
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
259
259
|
aircraft wingspan, [:math:`m`]
|
|
260
260
|
|
|
261
261
|
Returns
|
|
262
262
|
-------
|
|
263
|
-
npt.NDArray[np.
|
|
263
|
+
npt.NDArray[np.floating]
|
|
264
264
|
wake vortex separation, [:math:`m`]
|
|
265
265
|
"""
|
|
266
266
|
return (np.pi * wingspan) / 4.0
|
|
267
267
|
|
|
268
268
|
|
|
269
269
|
def turbulent_kinetic_energy_dissipation_rate(
|
|
270
|
-
ds_dz: npt.NDArray[np.
|
|
271
|
-
shear_enhancement_factor: npt.NDArray[np.
|
|
272
|
-
) -> npt.NDArray[np.
|
|
270
|
+
ds_dz: npt.NDArray[np.floating],
|
|
271
|
+
shear_enhancement_factor: npt.NDArray[np.floating] | float = 1.0,
|
|
272
|
+
) -> npt.NDArray[np.floating]:
|
|
273
273
|
"""
|
|
274
274
|
Calculate the turbulent kinetic energy dissipation rate (epsilon).
|
|
275
275
|
|
|
@@ -277,14 +277,14 @@ def turbulent_kinetic_energy_dissipation_rate(
|
|
|
277
277
|
|
|
278
278
|
Parameters
|
|
279
279
|
----------
|
|
280
|
-
ds_dz : npt.NDArray[np.
|
|
280
|
+
ds_dz : npt.NDArray[np.floating]
|
|
281
281
|
Difference in wind speed over dz in the atmosphere, [:math:`m s^{-1} / m`]
|
|
282
|
-
shear_enhancement_factor : npt.NDArray[np.
|
|
282
|
+
shear_enhancement_factor : npt.NDArray[np.floating] | float
|
|
283
283
|
Multiplication factor to enhance the wind shear
|
|
284
284
|
|
|
285
285
|
Returns
|
|
286
286
|
-------
|
|
287
|
-
npt.NDArray[np.
|
|
287
|
+
npt.NDArray[np.floating]
|
|
288
288
|
turbulent kinetic energy dissipation rate, [:math:`m^{2} s^{-3}`]
|
|
289
289
|
|
|
290
290
|
Notes
|
|
@@ -303,31 +303,31 @@ def turbulent_kinetic_energy_dissipation_rate(
|
|
|
303
303
|
|
|
304
304
|
|
|
305
305
|
def normalized_dissipation_rate(
|
|
306
|
-
epsilon: npt.NDArray[np.
|
|
307
|
-
wingspan: npt.NDArray[np.
|
|
308
|
-
true_airspeed: npt.NDArray[np.
|
|
309
|
-
aircraft_mass: npt.NDArray[np.
|
|
310
|
-
rho_air: npt.NDArray[np.
|
|
311
|
-
) -> npt.NDArray[np.
|
|
306
|
+
epsilon: npt.NDArray[np.floating],
|
|
307
|
+
wingspan: npt.NDArray[np.floating] | float,
|
|
308
|
+
true_airspeed: npt.NDArray[np.floating],
|
|
309
|
+
aircraft_mass: npt.NDArray[np.floating] | float,
|
|
310
|
+
rho_air: npt.NDArray[np.floating] | float,
|
|
311
|
+
) -> npt.NDArray[np.floating]:
|
|
312
312
|
"""
|
|
313
313
|
Calculate the normalized dissipation rate of the sinking wake vortex.
|
|
314
314
|
|
|
315
315
|
Parameters
|
|
316
316
|
----------
|
|
317
|
-
epsilon: npt.NDArray[np.
|
|
317
|
+
epsilon: npt.NDArray[np.floating]
|
|
318
318
|
turbulent kinetic energy dissipation rate, [:math:`m^{2} s^{-3}`]
|
|
319
|
-
wingspan : npt.NDArray[np.
|
|
319
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
320
320
|
aircraft wingspan, [:math:`m`]
|
|
321
|
-
true_airspeed : npt.NDArray[np.
|
|
321
|
+
true_airspeed : npt.NDArray[np.floating]
|
|
322
322
|
true airspeed for each waypoint, [:math:`m s^{-1}`]
|
|
323
|
-
aircraft_mass : npt.NDArray[np.
|
|
323
|
+
aircraft_mass : npt.NDArray[np.floating]
|
|
324
324
|
aircraft mass for each waypoint, [:math:`kg`]
|
|
325
|
-
rho_air : npt.NDArray[np.
|
|
325
|
+
rho_air : npt.NDArray[np.floating]
|
|
326
326
|
density of air for each waypoint, [:math:`kg m^{-3}`]
|
|
327
327
|
|
|
328
328
|
Returns
|
|
329
329
|
-------
|
|
330
|
-
npt.NDArray[np.
|
|
330
|
+
npt.NDArray[np.floating]
|
|
331
331
|
Normalized dissipation rate of the sinking wake vortex
|
|
332
332
|
|
|
333
333
|
Notes
|
|
@@ -353,44 +353,44 @@ def normalized_dissipation_rate(
|
|
|
353
353
|
|
|
354
354
|
|
|
355
355
|
def initial_contrail_width(
|
|
356
|
-
wingspan: npt.NDArray[np.
|
|
357
|
-
) -> npt.NDArray[np.
|
|
356
|
+
wingspan: npt.NDArray[np.floating] | float, dz_max: npt.NDArray[np.floating]
|
|
357
|
+
) -> npt.NDArray[np.floating]:
|
|
358
358
|
"""
|
|
359
359
|
Calculate the initial contrail width.
|
|
360
360
|
|
|
361
361
|
Parameters
|
|
362
362
|
----------
|
|
363
|
-
wingspan : npt.NDArray[np.
|
|
363
|
+
wingspan : npt.NDArray[np.floating] | float
|
|
364
364
|
aircraft wingspan, [:math:`m`]
|
|
365
|
-
dz_max : npt.NDArray[np.
|
|
365
|
+
dz_max : npt.NDArray[np.floating]
|
|
366
366
|
Max contrail downward displacement after the wake vortex phase, [:math:`m`]
|
|
367
367
|
Only the size of this array is used; the values are ignored.
|
|
368
368
|
|
|
369
369
|
Returns
|
|
370
370
|
-------
|
|
371
|
-
npt.NDArray[np.
|
|
371
|
+
npt.NDArray[np.floating]
|
|
372
372
|
Initial contrail width, [:math:`m`]
|
|
373
373
|
"""
|
|
374
374
|
return np.full_like(dz_max, np.pi / 4) * wingspan
|
|
375
375
|
|
|
376
376
|
|
|
377
377
|
def initial_contrail_depth(
|
|
378
|
-
dz_max: npt.NDArray[np.
|
|
379
|
-
) -> npt.NDArray[np.
|
|
378
|
+
dz_max: npt.NDArray[np.floating], initial_wake_vortex_depth: float | npt.NDArray[np.floating]
|
|
379
|
+
) -> npt.NDArray[np.floating]:
|
|
380
380
|
"""
|
|
381
381
|
Calculate the initial contrail depth.
|
|
382
382
|
|
|
383
383
|
Parameters
|
|
384
384
|
----------
|
|
385
|
-
dz_max : npt.NDArray[np.
|
|
385
|
+
dz_max : npt.NDArray[np.floating]
|
|
386
386
|
Max contrail downward displacement after the wake vortex phase, [:math:`m`]
|
|
387
|
-
initial_wake_vortex_depth : float | npt.NDArray[np.
|
|
387
|
+
initial_wake_vortex_depth : float | npt.NDArray[np.floating]
|
|
388
388
|
Initial wake vortex depth scaling factor.
|
|
389
389
|
Denoted `C_D0` in eq (14) in :cite:`schumannContrailCirrusPrediction2012`.
|
|
390
390
|
|
|
391
391
|
Returns
|
|
392
392
|
-------
|
|
393
|
-
npt.NDArray[np.
|
|
393
|
+
npt.NDArray[np.floating]
|
|
394
394
|
Initial contrail depth, [:math:`m`]
|
|
395
395
|
"""
|
|
396
396
|
return dz_max * initial_wake_vortex_depth
|
|
@@ -9,10 +9,10 @@ from pycontrails.utils.types import ArrayScalarLike
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def wind_shear_enhancement_factor(
|
|
12
|
-
contrail_depth: npt.NDArray[np.
|
|
13
|
-
effective_vertical_resolution: float | npt.NDArray[np.
|
|
14
|
-
wind_shear_enhancement_exponent: float | npt.NDArray[np.
|
|
15
|
-
) -> npt.NDArray[np.
|
|
12
|
+
contrail_depth: npt.NDArray[np.floating],
|
|
13
|
+
effective_vertical_resolution: float | npt.NDArray[np.floating],
|
|
14
|
+
wind_shear_enhancement_exponent: float | npt.NDArray[np.floating],
|
|
15
|
+
) -> npt.NDArray[np.floating]:
|
|
16
16
|
r"""Calculate the multiplication factor to enhance the wind shear based on contrail depth.
|
|
17
17
|
|
|
18
18
|
This factor accounts for any subgrid-scale that is not captured by the resolution
|
|
@@ -20,18 +20,18 @@ def wind_shear_enhancement_factor(
|
|
|
20
20
|
|
|
21
21
|
Parameters
|
|
22
22
|
----------
|
|
23
|
-
contrail_depth : npt.NDArray[np.
|
|
23
|
+
contrail_depth : npt.NDArray[np.floating]
|
|
24
24
|
Contrail depth , [:math:`m`]. Expected to be positive and bounded away from 0.
|
|
25
|
-
effective_vertical_resolution : float | npt.NDArray[np.
|
|
25
|
+
effective_vertical_resolution : float | npt.NDArray[np.floating]
|
|
26
26
|
Vertical resolution of met data , [:math:`m`]
|
|
27
|
-
wind_shear_enhancement_exponent : float | npt.NDArray[np.
|
|
27
|
+
wind_shear_enhancement_exponent : float | npt.NDArray[np.floating]
|
|
28
28
|
Exponent used in calculation. Expected to be nonnegative.
|
|
29
29
|
Discussed in paragraphs following eq. (39) in Schumann 2012 and referenced as `n`.
|
|
30
30
|
When this parameter is 0, no enhancement occurs.
|
|
31
31
|
|
|
32
32
|
Returns
|
|
33
33
|
-------
|
|
34
|
-
npt.NDArray[np.
|
|
34
|
+
npt.NDArray[np.floating]
|
|
35
35
|
Wind shear enhancement factor
|
|
36
36
|
|
|
37
37
|
Notes
|