1 | PRO bin_sigma, cmd, pfildi |
---|
2 | |
---|
3 | @common |
---|
4 | @com_eg |
---|
5 | ;; |
---|
6 | ;;------------------------------------- |
---|
7 | ;; |
---|
8 | ;; Density bining of pfild |
---|
9 | ;; |
---|
10 | ;; EG 19-2-99 |
---|
11 | ;; |
---|
12 | ;;------------------------------------- |
---|
13 | ;; |
---|
14 | ;; Input : |
---|
15 | ;; ------- |
---|
16 | ;; cmd = command line of window |
---|
17 | ;; |
---|
18 | ;; Input/Output : |
---|
19 | ;; --------------- |
---|
20 | ;; pfild = field to bin (structure) |
---|
21 | ;; |
---|
22 | ;; |
---|
23 | ;; Method : |
---|
24 | ;; -------- |
---|
25 | ;; a- read density |
---|
26 | ;; b- define density grid |
---|
27 | ;; c- project field |
---|
28 | ;;------------------------------------- |
---|
29 | ; |
---|
30 | grille,mask,glam,gphi,gdep,nx,ny,nz,firstx,firsty,firstz,lastx,lasty,lastz |
---|
31 | |
---|
32 | ; a- read density and bowl [if sig_bowl=1] |
---|
33 | |
---|
34 | file_name = pfildi.origin |
---|
35 | file_nam = strmid(file_name, 0, strlen(file_name)-4)+'T.nc' |
---|
36 | vargrid = 'T' |
---|
37 | sig = make_eos(file_nam, '', time_1 = time1_r, time_2 = time2_r) |
---|
38 | IF sig_bowl EQ 1 THEN BEGIN |
---|
39 | sobwlmax = make_sobwlmax(file_nam, '', time_1 = time1_r, time_2 = time2_r) |
---|
40 | ENDIF ELSE BEGIN |
---|
41 | sobwlmax = {data:0} |
---|
42 | ENDELSE |
---|
43 | |
---|
44 | ; b- define density grid |
---|
45 | |
---|
46 | n_sig = (sig_max - sig_min)/sig_del + 1 |
---|
47 | z_sig = sig_min+findgen(n_sig)*sig_del |
---|
48 | |
---|
49 | ; c- project field |
---|
50 | |
---|
51 | CASE pfildi.name OF |
---|
52 | '@@vodeptht': data_s = sig.data |
---|
53 | '@@vosigvol': data_s = sig.data |
---|
54 | '@@vosigthi': data_s = sig.data |
---|
55 | ELSE: data_s = pfildi.data |
---|
56 | ENDCASE |
---|
57 | final_dim = pfildi.dim |
---|
58 | IF strpos(cmd.plt, "_") NE -1 OR strpos(cmd.plt, "#") NE -1 THEN BEGIN |
---|
59 | print, ' Performing density bining (assuming reduced domain)...' |
---|
60 | IF cmd.var EQ '@@vosigvol' THEN BEGIN |
---|
61 | print, ' (using bining3)...' |
---|
62 | bining3, sig.data-1000., data_s, sobwlmax.data, sig_bowl, depth_bin, thick_bin, f_bin, bowl_bin, vol_bin, SIGMA = z_sig, DEPTH_T = gdept, DEPTH_W = gdepw, E1T = e1t, E2T = e2t, E3T = e3t, TMASK = mask |
---|
63 | ENDIF ELSE BEGIN |
---|
64 | print, ' (using bining2)...' |
---|
65 | bining2, sig.data-1000., data_s, sobwlmax.data, sig_bowl, depth_bin, thick_bin, f_bin, bowl_bin, SIGMA = z_sig, DEPTH_T = gdept, DEPTH_W = gdepw, E3T = e3t, E3W = e3w, TMASK = mask |
---|
66 | ENDELSE |
---|
67 | ENDIF ELSE BEGIN |
---|
68 | print, ' Performing density bining (assuming global domain)...' |
---|
69 | IF cmd.var EQ '@@vosigvol' THEN BEGIN |
---|
70 | print, ' (using bining3)...' |
---|
71 | bining3, sig.data-1000., data_s, sobwlmax.data, sig_bowl, depth_bin, thick_bin, f_bin, bowl_bin, vol_bin, SIGMA = z_sig, DEPTH_T = gdept, DEPTH_W = gdepw, E1T = e1t, E2T = e2t, E3T = e3t, TMASK = tmask |
---|
72 | ENDIF ELSE BEGIN |
---|
73 | print, ' (using bining2)...' |
---|
74 | bining2, sig.data-1000., data_s, sobwlmax.data, sig_bowl, depth_bin, thick_bin, f_bin, bowl_bin, SIGMA = z_sig, DEPTH_T = gdept, DEPTH_W = gdepw, E3T = e3t, E3W = e3w, TMASK = tmask |
---|
75 | ENDELSE |
---|
76 | ENDELSE |
---|
77 | |
---|
78 | ; output : depth_bin = depth of isopycnal surfaces (3D array) |
---|
79 | ; thick_bin = thickness of isopycnal surfaces (3D array) |
---|
80 | ; f_bin = pfild.data averaged for each sigma-layer (3D array) |
---|
81 | |
---|
82 | |
---|
83 | ; print, ' Density domain / intervals : ', sig_min, sig_max, sig_del, n_sig |
---|
84 | |
---|
85 | IF sig_surf EQ 0. THEN BEGIN |
---|
86 | ; vertical section (pltz) |
---|
87 | |
---|
88 | CASE pfildi.name OF |
---|
89 | '@@vodeptht': nfild = depth_bin(*, *, 0:n_sig-1) |
---|
90 | '@@vosigthi': nfild = thick_bin(*, *, 0:n_sig-1) |
---|
91 | '@@vosigvol': BEGIN |
---|
92 | nfild = vol_bin |
---|
93 | final_dim = 1 |
---|
94 | ; e12t = e1t*e2t |
---|
95 | ; e12t3 = reform((reform(e12t(firstx:lastx, firsty:lasty), nx*ny))#replicate(1,n_sig +2), nx, ny, n_sig+2) |
---|
96 | ; nfild = (thick_bin*e12t3)(*, *, 0:n_sig-1) |
---|
97 | |
---|
98 | END |
---|
99 | ELSE: nfild = f_bin(*, *, 0:n_sig-1) |
---|
100 | ENDCASE |
---|
101 | |
---|
102 | ENDIF ELSE BEGIN |
---|
103 | ; horizontal projection on sig_surf (plt) example : votemper@s25 |
---|
104 | ; find index of sig_surf in z_sig |
---|
105 | index = (where(z_sig LE sig_surf)) |
---|
106 | index = index[n_elements(index)-1] |
---|
107 | |
---|
108 | CASE pfildi.name OF |
---|
109 | '@@vodeptht': nfild = depth_bin(*, *, index) |
---|
110 | '@@vosigthi': nfild = thick_bin(*, *, index) |
---|
111 | '@@vosigvol': BEGIN |
---|
112 | nfild = vol_bin |
---|
113 | final_dim = 1 |
---|
114 | ; e12t = e1t*e2t |
---|
115 | ; e12t3 = reform((reform(e12t(firstx:lastx, firsty:lasty), nx*ny))#replicate(1,n_sig +2), nx, ny, n_sig+2) |
---|
116 | ; nfild = ((thick_bin*e12t3)(*, *, index)) |
---|
117 | END |
---|
118 | ELSE: nfild = f_bin(*, *, index) |
---|
119 | ENDCASE |
---|
120 | |
---|
121 | ENDELSE |
---|
122 | |
---|
123 | IF final_dim eq 3 THEN BEGIN |
---|
124 | indx = where(finite(nfild, /NAN)) |
---|
125 | nfild(indx) = -1.e20 |
---|
126 | nfild(indx) = !VALUES.F_NAN |
---|
127 | indx = where(tmask(*, *, 0) EQ 0) |
---|
128 | nfild(indx) = !VALUES.F_NAN |
---|
129 | ENDIF ELSE BEGIN |
---|
130 | |
---|
131 | ENDELSE |
---|
132 | |
---|
133 | pfild2 = {name: pfildi.name, data: nfild, legend: pfildi.legend, units: pfildi.units, origin: pfildi.origin, dim: final_dim, bowl: bowl_bin} |
---|
134 | pfildi = pfild2 |
---|
135 | |
---|
136 | |
---|
137 | END |
---|