Spaces:
Sleeping
Sleeping
Update precip.py
Browse files
precip.py
CHANGED
|
@@ -1,41 +1,31 @@
|
|
| 1 |
import numpy as np
|
| 2 |
import xarray as xr
|
| 3 |
|
| 4 |
-
def compute_precipitation_probability(
|
| 5 |
-
g = 9.80665
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
|
| 8 |
-
pressure = ds['pressure_level'] * 100 # Convert hPa to Pa
|
| 9 |
-
dp = pressure.diff('pressure_level').values # shape (12,)
|
| 10 |
-
|
| 11 |
-
# Compute precipitable water (PWAT)
|
| 12 |
-
q = ds['q'] # shape: (time, pressure_level, lat, lon)
|
| 13 |
q1 = q.isel(pressure_level=slice(None, -1))
|
| 14 |
q2 = q.isel(pressure_level=slice(1, None))
|
| 15 |
-
q_mid = (q1 + q2) / 2
|
| 16 |
-
|
| 17 |
-
# Align dp shape with q_mid
|
| 18 |
-
dp = dp[:q_mid.sizes['pressure_level']] # Ensure correct length (12,)
|
| 19 |
-
dp_reshaped = dp[:, np.newaxis, np.newaxis] # shape (12, 1, 1)
|
| 20 |
|
|
|
|
|
|
|
| 21 |
pwat = (q_mid * dp_reshaped / g).sum(dim='pressure_level')
|
| 22 |
|
| 23 |
-
# Normalize PWAT
|
| 24 |
pwat_norm = (pwat - pwat.min()) / (pwat.max() - pwat.min())
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
v = ds['v'].sel(pressure_level=850)
|
| 30 |
dqdx = q_low.differentiate(coord='lon')
|
| 31 |
dqdy = q_low.differentiate(coord='lat')
|
| 32 |
conv = -(u * dqdx + v * dqdy)
|
| 33 |
|
| 34 |
-
# Normalize convergence
|
| 35 |
conv_norm = (conv - conv.min()) / (conv.max() - conv.min())
|
| 36 |
|
| 37 |
-
# Combine into precipitation potential proxy (PPP)
|
| 38 |
ppp = 0.6 * pwat_norm + 0.4 * conv_norm
|
| 39 |
-
|
| 40 |
|
| 41 |
-
return ppp
|
|
|
|
| 1 |
import numpy as np
|
| 2 |
import xarray as xr
|
| 3 |
|
| 4 |
+
def compute_precipitation_probability(ds_t):
|
| 5 |
+
g = 9.80665
|
| 6 |
+
pressure = ds_t['pressure_level'] * 100
|
| 7 |
+
dp = pressure.diff('pressure_level').values
|
| 8 |
|
| 9 |
+
q = ds_t['q'] # shape: (pressure_level, lat, lon)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
q1 = q.isel(pressure_level=slice(None, -1))
|
| 11 |
q2 = q.isel(pressure_level=slice(1, None))
|
| 12 |
+
q_mid = (q1 + q2) / 2
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
+
dp = dp[:q_mid.sizes['pressure_level']]
|
| 15 |
+
dp_reshaped = dp[:, np.newaxis, np.newaxis]
|
| 16 |
pwat = (q_mid * dp_reshaped / g).sum(dim='pressure_level')
|
| 17 |
|
|
|
|
| 18 |
pwat_norm = (pwat - pwat.min()) / (pwat.max() - pwat.min())
|
| 19 |
|
| 20 |
+
q_low = ds_t['q'].sel(pressure_level=850)
|
| 21 |
+
u = ds_t['u'].sel(pressure_level=850)
|
| 22 |
+
v = ds_t['v'].sel(pressure_level=850)
|
|
|
|
| 23 |
dqdx = q_low.differentiate(coord='lon')
|
| 24 |
dqdy = q_low.differentiate(coord='lat')
|
| 25 |
conv = -(u * dqdx + v * dqdy)
|
| 26 |
|
|
|
|
| 27 |
conv_norm = (conv - conv.min()) / (conv.max() - conv.min())
|
| 28 |
|
|
|
|
| 29 |
ppp = 0.6 * pwat_norm + 0.4 * conv_norm
|
| 30 |
+
return ppp.clip(0, 1)
|
| 31 |
|
|
|