1 | PRO bining3, $ ; |
---|
2 | ;INPUTS |
---|
3 | density, $ ; density at T points (3D array) |
---|
4 | x1, $ ; field at T points (e.g. Salinity or Temperature) |
---|
5 | sobwlmax, $ ; bowl depth array |
---|
6 | sig_bowl, $ ; switch for bowl overlay |
---|
7 | ;OUTPUTS |
---|
8 | depth_bin, $ ; depth of layers (3D array) |
---|
9 | thick_bin, $ ; thickness of layers (3D array) |
---|
10 | x1_bin, $ ; X averaged for each sigma-layer (3D array) |
---|
11 | bowl_bin, $ ; bowl depth binned on density |
---|
12 | vol_bin2, $ ; volume of isopycnals |
---|
13 | ; KEYWORDS |
---|
14 | SIGMA = sigma, $ ; bining values |
---|
15 | DEPTH_T = depth_t, $ ; depth of T level |
---|
16 | DEPTH_W = depth_w, $ ; depth of W level |
---|
17 | E1T = e1t, $ |
---|
18 | E2T = e2t, $ |
---|
19 | E3T = e3t, $ |
---|
20 | TMASK = tmask ; tmask (3D array) |
---|
21 | |
---|
22 | size3d = size(density) |
---|
23 | jpi = size3d(1) |
---|
24 | jpj = size3d(2) |
---|
25 | jpk = size3d(3) |
---|
26 | |
---|
27 | s_s = sigma |
---|
28 | N_s = n_elements(s_s) |
---|
29 | |
---|
30 | depth_bin = fltarr(jpi, jpj, N_s) |
---|
31 | thick_bin = fltarr(jpi, jpj, N_s) |
---|
32 | x1_bin = fltarr(jpi, jpj, N_s) |
---|
33 | bowl_bin = fltarr(jpi, jpj) |
---|
34 | vol_bin = fltarr(jpi, jpj, N_s) |
---|
35 | vol_bin2 = fltarr(N_s) |
---|
36 | |
---|
37 | x1_bin(*, *, *) = !VALUES.F_NAN |
---|
38 | depth_bin(*, *, *) = !VALUES.F_NAN |
---|
39 | thick_bin(*, *, *) = !VALUES.F_NAN |
---|
40 | bowl_bin(*, *) = !VALUES.F_NAN |
---|
41 | vol_bin(*, *, *) =0 |
---|
42 | vol_bin2(*) =0 |
---|
43 | |
---|
44 | delta_sig = s_s(1)-s_s(0) |
---|
45 | |
---|
46 | vol_tot = 0. |
---|
47 | count_bin = fltarr(jpi, jpj, N_s) |
---|
48 | count_bin2 = fltarr(N_s) |
---|
49 | count_bin(*, *, *) =0 |
---|
50 | count_bin2(*) =0 |
---|
51 | |
---|
52 | ; perform bining - loop over i,j,k |
---|
53 | |
---|
54 | FOR i = 0, (jpi-1) DO BEGIN |
---|
55 | FOR j = 0, (jpj-1) DO BEGIN |
---|
56 | i_ocean = where(tmask(i, j, *) EQ 1) |
---|
57 | IF i_ocean[0] NE -1 THEN BEGIN ; on n entre que si il y a des points ocean |
---|
58 | i_bottom = i_ocean(n_elements(i_ocean)-1) |
---|
59 | FOR k = 0, i_bottom-1 DO BEGIN |
---|
60 | bin_index = floor((density(i, j, k)-s_s(0))/delta_sig+0.5) |
---|
61 | IF bin_index LT 0 OR bin_index GT (N_s-1) THEN BEGIN |
---|
62 | ; print, ' WARNING: bin index out of bounds - density(i, j, k), bin_index, N_s = ', density(i, j, k), bin_index, N_s |
---|
63 | ENDIF ELSE BEGIN |
---|
64 | vol_bin(i, j, bin_index) = vol_bin(i, j, bin_index) + e1t(i,j)*e2t(i,j)*e3t(k) |
---|
65 | vol_bin2(bin_index) = vol_bin2(bin_index) + e1t(i,j)*e2t(i,j)*e3t(k) |
---|
66 | vol_tot = vol_tot + e1t(i,j)*e2t(i,j)*e3t(k) |
---|
67 | count_bin(i, j, bin_index) = count_bin(i, j, bin_index)+1 |
---|
68 | count_bin2(bin_index) = count_bin2(bin_index)+1 |
---|
69 | ENDELSE |
---|
70 | ENDFOR |
---|
71 | ENDIF |
---|
72 | ENDFOR |
---|
73 | ENDFOR |
---|
74 | |
---|
75 | mask_index = where(count_bin EQ 0) |
---|
76 | vol_bin(mask_index) = !VALUES.F_NAN |
---|
77 | mask_index2 = where(count_bin2 EQ 0) |
---|
78 | ; vol_bin2(mask_index2) = !VALUES.F_NAN |
---|
79 | |
---|
80 | print, ' total volume of box (m3) = ', vol_tot |
---|
81 | ; print, ' density bins = ', vol_bin2 |
---|
82 | ; print, ' binned volume (1e14 m3) = ', transpose(vol_bin)*1.e-14 |
---|
83 | |
---|
84 | END |
---|