metradar 0.1.0__py3-none-any.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.
Files changed (41) hide show
  1. metradar/__init__.py +7 -0
  2. metradar/cnrad_level2.py +1326 -0
  3. metradar/comm_func.py +135 -0
  4. metradar/construct_aws_refvpr_mainprog.py +515 -0
  5. metradar/construct_aws_refvpr_mainprog_cams.py +310 -0
  6. metradar/construct_aws_refvpr_mainprog_datan3d.py +386 -0
  7. metradar/construct_aws_refvpr_mainprog_swan.py +306 -0
  8. metradar/decode_fmt_pyart.py +200 -0
  9. metradar/decode_pup_rose.py +1993 -0
  10. metradar/draw_mosaic_new.py +421 -0
  11. metradar/draw_radar_aws_jilin_new.py +206 -0
  12. metradar/draw_radar_comp_func.py +1379 -0
  13. metradar/exceptions.py +50 -0
  14. metradar/geo_transforms_pyart.py +627 -0
  15. metradar/get_cross_section_from_pyart.py +354 -0
  16. metradar/get_tlogp_from_sharppy.py +93 -0
  17. metradar/grid.py +281 -0
  18. metradar/grid_data.py +64 -0
  19. metradar/main_pydda.py +653 -0
  20. metradar/make_gif.py +24 -0
  21. metradar/make_mosaic_mp_archive.py +538 -0
  22. metradar/mosaic_merge.py +64 -0
  23. metradar/mosaic_quickdraw.py +338 -0
  24. metradar/nowcast_by_pysteps.py +219 -0
  25. metradar/oa_couhua.py +166 -0
  26. metradar/oa_dig_func.py +955 -0
  27. metradar/parse_pal.py +148 -0
  28. metradar/pgmb_io.py +169 -0
  29. metradar/prepare_for_radar_draw.py +197 -0
  30. metradar/read_new_mosaic.py +33 -0
  31. metradar/read_new_mosaic_func.py +231 -0
  32. metradar/retrieve_cmadaas.py +3126 -0
  33. metradar/retrieve_micaps_server.py +2061 -0
  34. metradar/rose_structer.py +807 -0
  35. metradar/trans_nc_pgmb.py +62 -0
  36. metradar/trans_new_mosaic_nc.py +309 -0
  37. metradar/trans_polor2grid_func.py +203 -0
  38. metradar-0.1.0.dist-info/METADATA +12 -0
  39. metradar-0.1.0.dist-info/RECORD +41 -0
  40. metradar-0.1.0.dist-info/WHEEL +5 -0
  41. metradar-0.1.0.dist-info/top_level.txt +1 -0
metradar/oa_couhua.py ADDED
@@ -0,0 +1,166 @@
1
+ '''
2
+ 封装凑华的客观分析程序
3
+ 2023年4月6日
4
+ 朱文剑
5
+
6
+ '''
7
+
8
+ # %%
9
+ import numpy as np
10
+ import math
11
+ import time
12
+ from grid import *
13
+ from grid_data import *
14
+
15
+ # %%迭代函数
16
+ def frprmn2(x,targe,grads,tol = 0.001,caculate_time = 60,show = False):
17
+ x0 = x
18
+ n = len(x0)
19
+ x_min = math.sqrt(1.0/n)
20
+ df = grads(x0)
21
+ g_0 = -df
22
+ h_0 = g_0
23
+ f_min_line0 = 0
24
+ f_min_line1 = targe(x0)
25
+ start_time = time.time()
26
+ for i in range(10000):
27
+ d0 = np.dot(df,h_0)
28
+ x1 = x0 + h_0 * x_min
29
+ df = grads(x1)
30
+ d1 = np.dot(df,h_0)
31
+ if d0 == d1:
32
+ f_min_line1 = targe(x0)
33
+ return x0
34
+ else:
35
+ x_min = x_min * d0/(d0 - d1)
36
+ x0 += h_0 * x_min
37
+ df = grads(x0)
38
+ g_1 = -df
39
+ v1 = np.dot(g_1 - g_0, g_1)
40
+ v2 = np.dot(g_0,g_0)
41
+ h_0 = g_1 + (v1/v2) * h_0
42
+ g_0 = g_1
43
+ if i%10 == 0:
44
+ f_min_line0 = f_min_line1
45
+ f_min_line1 = targe(x0)
46
+ if show:print(str(i) + " " + str(f_min_line1))
47
+ delta = 2 * abs(f_min_line1 - f_min_line0) / (abs(f_min_line1) + abs(f_min_line0)) - tol
48
+ if delta < 0:
49
+ return x0
50
+ if(time.time() - start_time > caculate_time):
51
+ return x0
52
+ print('迭代分析超过10000次而退出')
53
+ return x0
54
+
55
+ # 客观分析算法的代码
56
+ # def interp_sg_oa(sta0,background,sm = 1,effectR = 1000,rate_of_model = 0,show = False):
57
+ def interp_sg_oa(x,y,z,reso,boundary=None,sm = 1,effectR = 1000,rate_of_model = 0,show = False):
58
+
59
+ if boundary is None:
60
+ wlon = int(np.min(x))
61
+ elon = int(np.max(x))+1
62
+ slat = int(np.min(y))
63
+ nlat = int(np.max(y))+1
64
+ else:
65
+ wlon = boundary[0]
66
+ elon = boundary[1]
67
+ slat = boundary[2]
68
+ nlat = boundary[3]
69
+
70
+ grid0 = grid([wlon,elon,reso],[slat,nlat,reso])
71
+ background = grid_data(grid0)
72
+ grd = background.copy()
73
+ ig = ((x - grid0.slon) // grid0.dlon).astype(dtype = 'int16')
74
+ jg = ((y - grid0.slat) // grid0.dlat).astype(dtype = 'int16')
75
+ dx = (x - grid0.slon) / grid0.dlon - ig
76
+ dy = (y - grid0.slat) / grid0.dlat - jg
77
+
78
+ # zhuwj add
79
+ flag1 = ig+1 <= grid0.nlon-1
80
+ flag2 = jg+1 <= grid0.nlat-1
81
+ flag = flag1 & flag2
82
+ ig = ig[flag]
83
+ jg = jg[flag]
84
+ dx = dx[flag]
85
+ dy = dy[flag]
86
+ z = z[flag]
87
+
88
+ c00 = (1 - dx) * (1 - dy)
89
+ c01 = dx * (1 - dy)
90
+ c10 = (1-dx) * dy
91
+ c11 = dx * dy
92
+ lat = grd["lat"].values
93
+ sr = 1/np.power(np.cos(lat*math.pi/180),4)
94
+
95
+
96
+
97
+ def targe(x):
98
+ grdv = x.reshape(grid0.nlat,grid0.nlon)
99
+ dx = grdv[:,:-2] + grdv[:,2:] - 2 * grdv[:,1:-1]
100
+ dx2 = dx**2
101
+ sum_dx =np.sum(dx2,axis=1)
102
+ cost1 = np.sum(sum_dx * sr)
103
+
104
+ dy = grdv[:-2,:] + grdv[2:,:] - 2 * grdv[1:-1,:]
105
+ dy2 = dy**2
106
+ sum_dy = np.sum(dy2)
107
+ cost1 = cost1 + sum_dy
108
+
109
+ sta_g = c00 * grdv[jg, ig] + c01 * grdv[jg, ig + 1] + c10 * grdv[jg + 1, ig] + c11 * grdv[
110
+ jg + 1, ig + 1]
111
+ error = z - sta_g
112
+ cost2 = np.sum(error**2)
113
+ cost3 = 0
114
+ cost = sm * cost1 + cost2 + cost3
115
+ return cost
116
+
117
+ def grads(x):
118
+ grdv = x.reshape(grid0.nlat,grid0.nlon)
119
+ g1 = np.zeros(grdv.shape)
120
+
121
+ sr_expend = np.tile(sr,[grid0.nlon-2,1]).T
122
+
123
+ dx = 2 * (grdv[:,:-2] + grdv[:,2:] - 2 * grdv[:,1:-1])
124
+ dx_sr = dx * sr_expend
125
+ g1[:,:-2] = dx_sr
126
+ g1[:,2:] += dx_sr
127
+ g1[:,1:-1] -= 2*dx_sr
128
+
129
+ dy = 2 *(grdv[:-2,:] + grdv[2:,:] - 2 * grdv[1:-1,:])
130
+ g1[:-2,:] += dy
131
+ g1[2:,:] += dy
132
+ g1[1:-1,:] -= 2 * dy
133
+
134
+ g2 = np.zeros(grdv.shape)
135
+ sta_g = c00 * grdv[jg, ig] + c01 * grdv[jg, ig + 1] + c10 * grdv[jg + 1, ig] + c11 * grdv[jg + 1, ig + 1]
136
+ d = 2 * (sta_g - z)
137
+ g2[jg,ig] += d * c00
138
+ g2[jg,ig + 1] += d * c01
139
+ g2[jg+1,ig] += d * c10
140
+ g2[jg+1,ig+1] += d * c11
141
+
142
+ g3 = 0
143
+
144
+ g = sm * g1 + g2 + g3
145
+ return g.reshape(-1)
146
+
147
+ x = grd.values.reshape(-1)
148
+ x_oa = frprmn2(x, targe, grads,show = show)
149
+ result = grid_data(grid0,x_oa)
150
+
151
+ grid_x = np.linspace(wlon, elon, grid0.nlon)
152
+ grid_y = np.linspace(slat, nlat, grid0.nlat)
153
+
154
+ gx, gy = np.meshgrid(grid_x, grid_y)
155
+
156
+ return gx, gy,result.data[0,0,0,0,:,:]
157
+
158
+ # return result
159
+
160
+
161
+ # %%
162
+
163
+ if __name__ == "__main__":
164
+ #读取观测数据
165
+ pass
166
+