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.

Files changed (60) hide show
  1. pycontrails/__init__.py +2 -2
  2. pycontrails/_version.py +2 -2
  3. pycontrails/core/__init__.py +1 -1
  4. pycontrails/core/aircraft_performance.py +58 -58
  5. pycontrails/core/cache.py +7 -7
  6. pycontrails/core/fleet.py +25 -21
  7. pycontrails/core/flight.py +213 -301
  8. pycontrails/core/interpolation.py +56 -56
  9. pycontrails/core/met.py +48 -39
  10. pycontrails/core/models.py +25 -11
  11. pycontrails/core/polygon.py +15 -15
  12. pycontrails/core/rgi_cython.cp313-win_amd64.pyd +0 -0
  13. pycontrails/core/vector.py +22 -22
  14. pycontrails/datalib/_met_utils/metsource.py +8 -5
  15. pycontrails/datalib/ecmwf/__init__.py +14 -14
  16. pycontrails/datalib/ecmwf/common.py +1 -1
  17. pycontrails/datalib/ecmwf/era5.py +7 -7
  18. pycontrails/datalib/ecmwf/hres.py +3 -3
  19. pycontrails/datalib/ecmwf/ifs.py +1 -1
  20. pycontrails/datalib/gfs/__init__.py +6 -6
  21. pycontrails/datalib/gfs/gfs.py +2 -2
  22. pycontrails/datalib/goes.py +5 -5
  23. pycontrails/ext/empirical_grid.py +1 -1
  24. pycontrails/models/apcemm/apcemm.py +3 -3
  25. pycontrails/models/cocip/__init__.py +2 -2
  26. pycontrails/models/cocip/cocip.py +15 -15
  27. pycontrails/models/cocip/cocip_params.py +2 -11
  28. pycontrails/models/cocip/cocip_uncertainty.py +24 -18
  29. pycontrails/models/cocip/contrail_properties.py +331 -316
  30. pycontrails/models/cocip/output_formats.py +53 -53
  31. pycontrails/models/cocip/radiative_forcing.py +135 -131
  32. pycontrails/models/cocip/radiative_heating.py +135 -135
  33. pycontrails/models/cocip/unterstrasser_wake_vortex.py +90 -87
  34. pycontrails/models/cocip/wake_vortex.py +92 -92
  35. pycontrails/models/cocip/wind_shear.py +8 -8
  36. pycontrails/models/cocipgrid/cocip_grid.py +93 -87
  37. pycontrails/models/dry_advection.py +10 -5
  38. pycontrails/models/emissions/__init__.py +2 -2
  39. pycontrails/models/emissions/black_carbon.py +108 -108
  40. pycontrails/models/emissions/emissions.py +85 -85
  41. pycontrails/models/emissions/ffm2.py +35 -35
  42. pycontrails/models/humidity_scaling/humidity_scaling.py +23 -23
  43. pycontrails/models/ps_model/__init__.py +1 -1
  44. pycontrails/models/ps_model/ps_aircraft_params.py +8 -4
  45. pycontrails/models/ps_model/ps_grid.py +74 -64
  46. pycontrails/models/ps_model/ps_model.py +14 -14
  47. pycontrails/models/ps_model/ps_operational_limits.py +20 -18
  48. pycontrails/models/tau_cirrus.py +8 -1
  49. pycontrails/physics/geo.py +67 -67
  50. pycontrails/physics/jet.py +79 -79
  51. pycontrails/physics/units.py +14 -14
  52. pycontrails/utils/json.py +1 -2
  53. pycontrails/utils/types.py +12 -7
  54. {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/METADATA +2 -2
  55. {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/NOTICE +1 -1
  56. pycontrails-0.54.4.dist-info/RECORD +111 -0
  57. pycontrails-0.54.3.dist-info/RECORD +0 -111
  58. {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/LICENSE +0 -0
  59. {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.dist-info}/WHEEL +0 -0
  60. {pycontrails-0.54.3.dist-info → pycontrails-0.54.4.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.float64] | float,
35
- true_airspeed: npt.NDArray[np.float64],
36
- aircraft_mass: npt.NDArray[np.float64] | float,
37
- air_temperature: npt.NDArray[np.float64],
38
- dT_dz: npt.NDArray[np.float64],
39
- ds_dz: npt.NDArray[np.float64],
40
- air_pressure: npt.NDArray[np.float64],
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.float64],
43
- ) -> npt.NDArray[np.float64]:
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.float64] | float
49
+ wingspan : npt.NDArray[np.floating] | float
50
50
  aircraft wingspan, [:math:`m`]
51
- true_airspeed : npt.NDArray[np.float64]
51
+ true_airspeed : npt.NDArray[np.floating]
52
52
  true airspeed for each waypoint, [:math:`m s^{-1}`]
53
- aircraft_mass : npt.NDArray[np.float64] | float
53
+ aircraft_mass : npt.NDArray[np.floating] | float
54
54
  aircraft mass for each waypoint, [:math:`kg`]
55
- air_temperature : npt.NDArray[np.float64]
55
+ air_temperature : npt.NDArray[np.floating]
56
56
  ambient temperature for each waypoint, [:math:`K`]
57
- dT_dz : npt.NDArray[np.float64]
57
+ dT_dz : npt.NDArray[np.floating]
58
58
  potential temperature gradient, [:math:`K m^{-1}`]
59
- ds_dz : npt.NDArray[np.float64]
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.float64]
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.float64] | float
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.float64]
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.float64] | float,
111
- true_airspeed: npt.NDArray[np.float64],
112
- aircraft_mass: npt.NDArray[np.float64] | float,
113
- rho_air: npt.NDArray[np.float64],
114
- ) -> npt.NDArray[np.float64]:
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.float64]
120
+ wingspan : npt.NDArray[np.floating]
121
121
  aircraft wingspan, [:math:`m`]
122
- true_airspeed : npt.NDArray[np.float64]
122
+ true_airspeed : npt.NDArray[np.floating]
123
123
  true airspeed for each waypoint, [:math:`m \ s^{-1}`]
124
- aircraft_mass : npt.NDArray[np.float64]
124
+ aircraft_mass : npt.NDArray[np.floating]
125
125
  aircraft mass for each waypoint, [:math:`kg`]
126
- rho_air : npt.NDArray[np.float64]
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.float64]
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.float64] | float,
148
- true_airspeed: npt.NDArray[np.float64],
149
- aircraft_mass: npt.NDArray[np.float64] | float,
150
- rho_air: npt.NDArray[np.float64],
151
- n_bv: npt.NDArray[np.float64],
152
- ) -> npt.NDArray[np.float64]:
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.float64] | float
158
+ wingspan : npt.NDArray[np.floating] | float
159
159
  aircraft wingspan, [:math:`m`]
160
- true_airspeed : npt.NDArray[np.float64]
160
+ true_airspeed : npt.NDArray[np.floating]
161
161
  true airspeed for each waypoint, [:math:`m s^{-1}`]
162
- aircraft_mass : npt.NDArray[np.float64] | float
162
+ aircraft_mass : npt.NDArray[np.floating] | float
163
163
  aircraft mass for each waypoint, [:math:`kg`]
164
- rho_air : npt.NDArray[np.float64]
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.float64]
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.float64]
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.float64] | float,
188
- true_airspeed: npt.NDArray[np.float64],
189
- aircraft_mass: npt.NDArray[np.float64] | float,
190
- rho_air: npt.NDArray[np.float64],
191
- n_bv: npt.NDArray[np.float64],
192
- dz_max_strong: npt.NDArray[np.float64],
193
- ds_dz: npt.NDArray[np.float64],
194
- t_0: npt.NDArray[np.float64],
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.float64] | float,
197
- ) -> npt.NDArray[np.float64]:
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.float64] | float
203
+ wingspan : npt.NDArray[np.floating] | float
204
204
  aircraft wingspan, [:math:`m`]
205
- true_airspeed : npt.NDArray[np.float64]
205
+ true_airspeed : npt.NDArray[np.floating]
206
206
  true airspeed for each waypoint, [:math:`m s^{-1}`]
207
- aircraft_mass : npt.NDArray[np.float64] | float
207
+ aircraft_mass : npt.NDArray[np.floating] | float
208
208
  aircraft mass for each waypoint, [:math:`kg`]
209
- rho_air : npt.NDArray[np.float64]
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.float64]
211
+ n_bv : npt.NDArray[np.floating]
212
212
  Brunt-Vaisaila frequency, [:math:`s^{-1}`]
213
- dz_max_strong : npt.NDArray[np.float64]
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.float64]
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.float64]
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.float64] | float
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.float64]
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.float64] | float,
252
- ) -> npt.NDArray[np.float64] | float:
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.float64] | float
258
+ wingspan : npt.NDArray[np.floating] | float
259
259
  aircraft wingspan, [:math:`m`]
260
260
 
261
261
  Returns
262
262
  -------
263
- npt.NDArray[np.float64]
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.float64],
271
- shear_enhancement_factor: npt.NDArray[np.float64] | float = 1.0,
272
- ) -> npt.NDArray[np.float64]:
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.float64]
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.float64] | float
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.float64]
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.float64],
307
- wingspan: npt.NDArray[np.float64] | float,
308
- true_airspeed: npt.NDArray[np.float64],
309
- aircraft_mass: npt.NDArray[np.float64] | float,
310
- rho_air: npt.NDArray[np.float64] | float,
311
- ) -> npt.NDArray[np.float64]:
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.float64]
317
+ epsilon: npt.NDArray[np.floating]
318
318
  turbulent kinetic energy dissipation rate, [:math:`m^{2} s^{-3}`]
319
- wingspan : npt.NDArray[np.float64] | float
319
+ wingspan : npt.NDArray[np.floating] | float
320
320
  aircraft wingspan, [:math:`m`]
321
- true_airspeed : npt.NDArray[np.float64]
321
+ true_airspeed : npt.NDArray[np.floating]
322
322
  true airspeed for each waypoint, [:math:`m s^{-1}`]
323
- aircraft_mass : npt.NDArray[np.float64]
323
+ aircraft_mass : npt.NDArray[np.floating]
324
324
  aircraft mass for each waypoint, [:math:`kg`]
325
- rho_air : npt.NDArray[np.float64]
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.float64]
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.float64] | float, dz_max: npt.NDArray[np.float64]
357
- ) -> npt.NDArray[np.float64]:
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.float64] | float
363
+ wingspan : npt.NDArray[np.floating] | float
364
364
  aircraft wingspan, [:math:`m`]
365
- dz_max : npt.NDArray[np.float64]
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.float64]
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.float64], initial_wake_vortex_depth: float | npt.NDArray[np.float64]
379
- ) -> npt.NDArray[np.float64]:
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.float64]
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.float64]
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.float64]
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.float64],
13
- effective_vertical_resolution: float | npt.NDArray[np.float64],
14
- wind_shear_enhancement_exponent: float | npt.NDArray[np.float64],
15
- ) -> npt.NDArray[np.float64]:
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.float64]
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.float64]
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.float64]
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.float64]
34
+ npt.NDArray[np.floating]
35
35
  Wind shear enhancement factor
36
36
 
37
37
  Notes