vValentine7 commited on
Commit
1a7aa2c
·
verified ·
1 Parent(s): c8c3b6b

Update precip.py

Browse files
Files changed (1) hide show
  1. precip.py +12 -22
precip.py CHANGED
@@ -1,41 +1,31 @@
1
  import numpy as np
2
  import xarray as xr
3
 
4
- def compute_precipitation_probability(ds):
5
- g = 9.80665 # gravity [m/s^2]
 
 
6
 
7
- # Get pressure levels and compute pressure differences (Pa)
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 # shape: (time, 12, lat, lon)
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
- # Approximate low-level moisture convergence at 850 hPa
27
- q_low = q.sel(pressure_level=850)
28
- u = ds['u'].sel(pressure_level=850)
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
- ppp = ppp.clip(0, 1)
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