1 | ; |
---|
2 | ; mask zonal mean |
---|
3 | ; |
---|
4 | PRO mask_z, fld, cmd, boite_pltz, dimplot, legz |
---|
5 | |
---|
6 | ; |
---|
7 | ; mask pltz data according to bathy or box |
---|
8 | ; |
---|
9 | |
---|
10 | @common |
---|
11 | @com_eg |
---|
12 | legz = '' |
---|
13 | |
---|
14 | CASE mesh_type OF |
---|
15 | 'oce': BEGIN |
---|
16 | |
---|
17 | IF splot EQ 1 THEN vertical_domain = [sig_min, sig_max] ELSE vertical_domain = [0, depth_z] |
---|
18 | |
---|
19 | CASE data_domain OF |
---|
20 | 'equator': BEGIN |
---|
21 | tmask[*, *, *] = 1 |
---|
22 | IF dimplot EQ 1 THEN boite_pltz = box_h |
---|
23 | IF dimplot EQ 2 THEN boite_pltz = [box_h, vertical_domain] |
---|
24 | END |
---|
25 | 'zonal': BEGIN |
---|
26 | tmask[*, *, *] = 1 |
---|
27 | zbox = def_box(cmd.plt, dimplot, legz, time_stride) |
---|
28 | boite_pltz = zbox |
---|
29 | IF dimplot EQ 2 THEN BEGIN |
---|
30 | IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, vertical_domain] |
---|
31 | ENDIF |
---|
32 | ; IF dimplot EQ 1 THEN boite_pltz = box_h |
---|
33 | ; IF dimplot EQ 2 THEN boite_pltz = [box_h, |
---|
34 | ; vertical_domain] |
---|
35 | idxmsk=where(fld eq valmask) |
---|
36 | IF idxmsk(0) ne -1 THEN BEGIN |
---|
37 | print, ' mask_z: building mask from fld valmask' |
---|
38 | IF (size(fld))(0) EQ 3 THEN BEGIN |
---|
39 | zmsk = fld(*,*,1) LT valmask/10. |
---|
40 | ENDIF ELSE BEGIN |
---|
41 | zmsk = fld LT valmask/10. |
---|
42 | ENDELSE |
---|
43 | tmask=reform(replicate(jpi,1)#zmsk[*],jpi,jpj,jpk,/overwrite) |
---|
44 | ENDIF |
---|
45 | END |
---|
46 | ELSE: BEGIN |
---|
47 | ; ORCA geographical domain |
---|
48 | ; mask with medit |
---|
49 | IF strlen(cmd.plt) EQ 2 THEN BEGIN |
---|
50 | IF cmd.var NE 'vozonbsf' THEN BEGIN |
---|
51 | IF (dimplot EQ 1 AND (size(fld))[0] EQ 2) $ |
---|
52 | OR (dimplot EQ 2 AND (size(fld))[0] EQ 3) THEN BEGIN |
---|
53 | maskzm = 1-maskread('mediteranean', 'orca', /D3) |
---|
54 | print, ' [masking out mediteranean]' |
---|
55 | print, ' ' |
---|
56 | tmask = tmask*maskzm |
---|
57 | ENDIF |
---|
58 | IF dimplot EQ 1 THEN boite_pltz = box_h |
---|
59 | IF dimplot EQ 2 THEN BEGIN |
---|
60 | CASE strmid(cmd.plt, 1, 1) OF |
---|
61 | 't': boite_pltz = box_h |
---|
62 | ELSE : boite_pltz = [box_h, vertical_domain] |
---|
63 | ENDCASE |
---|
64 | ENDIF |
---|
65 | ENDIF ELSE BEGIN |
---|
66 | ; mask MSF as field=valmask |
---|
67 | idx=where (fld eq valmask) |
---|
68 | fld (idx) = !values.f_nan |
---|
69 | boite_pltz = [box_h, vertical_domain] |
---|
70 | ENDELSE |
---|
71 | ENDIF ELSE BEGIN |
---|
72 | CASE strmid(cmd.plt, 0, 2) OF |
---|
73 | 'xy': BEGIN & char = strmid(cmd.plt,3, 1) & ideb = 4 & END |
---|
74 | ELSE: BEGIN & char = strmid(cmd.plt,dimplot+1, 1) & ideb = dimplot+2 & END |
---|
75 | ENDCASE |
---|
76 | |
---|
77 | CASE char OF |
---|
78 | '#': BEGIN |
---|
79 | ; bathymetry mask for data |
---|
80 | stop |
---|
81 | bat_name = strmid(cmd.plt, ideb, strlen(cmd.plt)-ideb) |
---|
82 | full_name = grep('ls -al '+hom_idl+'grids | grep orca.'+bat_name+' | awk ''NR == 1 {print $0}''', ' ', 8) |
---|
83 | full_name = strmid(full_name, 5, 50) |
---|
84 | legz = full_name |
---|
85 | legbox = full_name |
---|
86 | IF cmd.var NE 'vozonbsf' THEN BEGIN |
---|
87 | maskzm = maskread(full_name, 'orca', /D3) |
---|
88 | tmask = tmask*maskzm |
---|
89 | IF dimplot EQ 1 THEN boite_pltz = box_h |
---|
90 | IF dimplot EQ 2 THEN BEGIN |
---|
91 | CASE strmid(cmd.plt, 1, 1) OF |
---|
92 | 't': boite_pltz = box_h |
---|
93 | ELSE : boite_pltz = [box_h, vertical_domain] |
---|
94 | ENDCASE |
---|
95 | ENDIF |
---|
96 | ENDIF ELSE BEGIN |
---|
97 | ; mask MSF as field=valmask |
---|
98 | idx=where (fld eq valmask) |
---|
99 | fld (idx) = !values.f_nan |
---|
100 | boite_pltz = [box_h, vertical_domain] |
---|
101 | ENDELSE |
---|
102 | END |
---|
103 | ; '@': BEGIN |
---|
104 | ; ; density level |
---|
105 | ; END |
---|
106 | ELSE: BEGIN |
---|
107 | ; mask in box |
---|
108 | zbox = def_box(cmd.plt, dimplot, legz, time_stride) |
---|
109 | boite_pltz = zbox |
---|
110 | IF dimplot EQ 2 THEN BEGIN |
---|
111 | CASE strmid(cmd.plt, 1, 1) OF |
---|
112 | 't': boite_pltz = zbox |
---|
113 | ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, vertical_domain] |
---|
114 | ENDCASE |
---|
115 | ENDIF |
---|
116 | IF dimplot EQ 1 THEN BEGIN |
---|
117 | CASE strmid(cmd.plt, 1, 1) OF |
---|
118 | 't': boite_pltz = zbox |
---|
119 | ELSE : BEGIN |
---|
120 | CASE strmid(cmd.plt, 0, 1) OF |
---|
121 | 'x': boite_pltz = zbox |
---|
122 | 'y': boite_pltz = zbox |
---|
123 | ELSE: IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, vertical_domain] |
---|
124 | ENDCASE |
---|
125 | END |
---|
126 | ENDCASE |
---|
127 | ENDIF |
---|
128 | END |
---|
129 | ENDCASE |
---|
130 | |
---|
131 | ENDELSE |
---|
132 | IF cmd.var EQ 'vozonbsf' AND msf_mean EQ 0 THEN BEGIN |
---|
133 | print, ' Mask_z special case for vozonbsf' |
---|
134 | idx = where(gphit EQ max(gphit)) |
---|
135 | idx = idx MOD jpi |
---|
136 | print, idx[0] |
---|
137 | boite_pltz = [idx[0], idx[0], boite_pltz[2:5]] |
---|
138 | domdef, boite_pltz, /xindex ; indice pour x |
---|
139 | IF (size(fld))(0) EQ 3 THEN BEGIN |
---|
140 | tmask[idx[0], firstyt:lastyt, *] = fld(*,*,1) LT valmask/10. |
---|
141 | ENDIF ELSE BEGIN |
---|
142 | tmask[idx[0], firstyt:lastyt, *] = fld LT valmask/10. |
---|
143 | ENDELSE |
---|
144 | ENDIF |
---|
145 | END |
---|
146 | ENDCASE |
---|
147 | END |
---|
148 | ELSE: BEGIN ; atmosphere or data |
---|
149 | |
---|
150 | ; IF masked_data EQ 0 THEN tmask[*] = 1 |
---|
151 | CASE strmid(cmd.plt, 0, 2) OF |
---|
152 | 'xy': BEGIN & char = strmid(cmd.plt,3, 1) & ideb = 4 & END |
---|
153 | ELSE: BEGIN & char = strmid(cmd.plt,dimplot+1, 1) & ideb = dimplot+2 & END |
---|
154 | ENDCASE |
---|
155 | |
---|
156 | |
---|
157 | IF char EQ '#' THEN BEGIN |
---|
158 | ; mask from file |
---|
159 | bat_name = strmid(cmd.plt, ideb, strlen(cmd.plt)-ideb) |
---|
160 | full_name = grep('ls -al '+hom_idl+'grids | grep '+cmd.grid+'.'+bat_name+' | awk ''NR == 1 {print $0}''', ' ', 8) |
---|
161 | full_name = strmid(full_name, strlen(cmd.grid)+1, 50) |
---|
162 | legz = full_name |
---|
163 | legbox = full_name |
---|
164 | maskzm = maskread(full_name, cmd.grid) |
---|
165 | maskzm = reverse(maskzm, 2) |
---|
166 | maskzm = reform(maskzm, jpi*jpj) |
---|
167 | tmask = reform(maskzm#replicate(1, jpk), jpi, jpj, jpk) |
---|
168 | boite_pltz = box_h |
---|
169 | IF dimplot EQ 2 THEN BEGIN |
---|
170 | CASE strmid(cmd.plt, 1, 1) OF |
---|
171 | 't': boite_pltz = box_h |
---|
172 | ELSE : boite_pltz = [box_h, pres_min, pres_max ] |
---|
173 | ENDCASE |
---|
174 | ENDIF |
---|
175 | ENDIF ELSE BEGIN |
---|
176 | ; mask in box |
---|
177 | IF masked_data EQ 0 THEN BEGIN |
---|
178 | CASE atmos_msk OF |
---|
179 | 0: BEGIN & mskt = 'ALL points' & tmask[*] = 1 & END |
---|
180 | 1: BEGIN & mskt = 'ocean points only' & END |
---|
181 | 2: BEGIN & mskt = 'land points only' & tmask = 1-tmask & END |
---|
182 | ENDCASE |
---|
183 | print, ' Using ',mskt, ' (atmos_msk =', atmos_msk, ')' |
---|
184 | print, ' ' |
---|
185 | ENDIF |
---|
186 | |
---|
187 | zbox = def_box(cmd.plt, dimplot, legz, time_stride) |
---|
188 | boite_pltz = zbox |
---|
189 | prof1 = gdept(0) |
---|
190 | prof2 = gdept(0) |
---|
191 | IF dimplot EQ 2 THEN BEGIN |
---|
192 | CASE strmid(cmd.plt, 1, 1) OF |
---|
193 | 't': boite_pltz = zbox |
---|
194 | ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, pres_min, pres_max] |
---|
195 | ENDCASE |
---|
196 | ENDIF |
---|
197 | ENDELSE |
---|
198 | END |
---|
199 | ELSE: |
---|
200 | ENDCASE |
---|
201 | END |
---|