source: trunk/procs/mask_z.pro @ 13

Last change on this file since 13 was 2, checked in by post_it, 17 years ago

Initial import from ~/POST_IT/

File size: 8.5 KB
Line 
1;
2; mask zonal mean
3;
4PRO 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                        bat_name = strmid(cmd.plt, ideb, strlen(cmd.plt)-ideb)
81                        full_name = grep('ls -al '+hom_idl+'grids | grep orca.'+bat_name+' | awk ''NR == 1 {print $0}''', ' ', 8)
82                        full_name = strmid(full_name, 5, 50)
83                        legz = full_name
84                        legbox = full_name
85                        IF cmd.var NE 'vozonbsf' THEN BEGIN
86                           maskzm = maskread(full_name, 'orca', /D3)
87                           tmask = tmask*maskzm
88                           IF dimplot EQ 1 THEN boite_pltz = box_h
89                           IF dimplot EQ 2 THEN BEGIN
90                              CASE strmid(cmd.plt, 1, 1) OF
91                                 't': boite_pltz = box_h
92                                 ELSE : boite_pltz = [box_h, vertical_domain]
93                              ENDCASE
94                           ENDIF
95                        ENDIF ELSE BEGIN
96                                ; mask MSF as field=valmask
97                           idx=where (fld eq valmask)
98                           fld (idx) = !values.f_nan
99                           boite_pltz = [box_h, vertical_domain]
100                        ENDELSE 
101                     END 
102;                        '@': BEGIN
103;                           ; density level
104;                        END
105                     ELSE: BEGIN
106                                ; mask in box
107                        zbox = def_box(cmd.plt, dimplot, legz, time_stride)
108                        boite_pltz = zbox
109                        IF dimplot EQ 2 THEN BEGIN
110                           CASE strmid(cmd.plt, 1, 1) OF
111                              't': boite_pltz = zbox
112                              ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, vertical_domain]
113                           ENDCASE
114                        ENDIF
115                        IF dimplot EQ 1 THEN BEGIN
116                           CASE strmid(cmd.plt, 1, 1) OF
117                              't': boite_pltz = zbox
118                              ELSE : BEGIN
119                                 CASE strmid(cmd.plt, 0, 1) OF
120                                    'x': boite_pltz = zbox
121                                    'y': boite_pltz = zbox
122                                    ELSE: IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, vertical_domain]
123                                 ENDCASE
124                              END
125                           ENDCASE
126                        ENDIF
127                     END
128                  ENDCASE
129                 
130              ENDELSE
131               IF cmd.var EQ 'vozonbsf' AND msf_mean EQ 0 THEN BEGIN
132                   print, '     Mask_z special case for vozonbsf'
133                   idx = where(gphit EQ max(gphit))
134                   idx = idx MOD jpi
135                   print, idx[0]
136                   boite_pltz = [idx[0], idx[0], boite_pltz[2:5]]
137                   domdef, boite_pltz, /xindex ; indice pour x
138                   IF (size(fld))(0) EQ 3 THEN BEGIN
139                       tmask[idx[0], firstyt:lastyt, *] = fld(*,*,1) LT valmask/10.
140                   ENDIF ELSE BEGIN
141                       tmask[idx[0], firstyt:lastyt, *] = fld LT valmask/10.
142                   ENDELSE 
143               ENDIF
144            END
145         ENDCASE
146      END   
147      ELSE: BEGIN ; atmosphere or data
148           
149;         IF masked_data EQ 0 THEN tmask[*] = 1
150         CASE strmid(cmd.plt, 0, 2) OF
151            'xy': BEGIN & char = strmid(cmd.plt,3, 1) & ideb = 4 & END
152            ELSE: BEGIN & char = strmid(cmd.plt,dimplot+1, 1) & ideb = dimplot+2 & END
153         ENDCASE
154
155
156         IF char EQ '#' THEN BEGIN
157                                ; mask from file
158            bat_name = strmid(cmd.plt, ideb, strlen(cmd.plt)-ideb)
159            full_name = grep('ls -al '+hom_idl+'grids | grep '+cmd.grid+'.'+bat_name+' | awk ''NR == 1 {print $0}''', ' ', 8)
160            full_name = strmid(full_name, strlen(cmd.grid)+1, 50)
161            legz = full_name
162            legbox = full_name
163            maskzm = maskread(full_name, cmd.grid)
164            maskzm = reverse(maskzm, 2)
165            maskzm = reform(maskzm, jpi*jpj)
166            tmask = reform(maskzm#replicate(1, jpk), jpi, jpj, jpk)
167            boite_pltz = box_h
168            IF dimplot EQ 2 THEN BEGIN
169               CASE strmid(cmd.plt, 1, 1) OF
170                  't': boite_pltz = box_h
171                  ELSE : boite_pltz = [box_h, hpa_min, hpa_max ]
172               ENDCASE
173            ENDIF
174         ENDIF ELSE BEGIN
175           ; mask in box
176            IF masked_data EQ 0 THEN BEGIN 
177               CASE atmos_msk OF
178               0: BEGIN & mskt = 'ALL points' & tmask[*] = 1 & END
179               1: BEGIN & mskt = 'ocean points only' & END
180               2: BEGIN & mskt = 'land points only' & tmask = 1-tmask & END
181               ENDCASE
182               print, '    Using ',mskt, ' (atmos_msk =', atmos_msk, ')'
183               print, ' '
184            ENDIF 
185
186            zbox = def_box(cmd.plt, dimplot, legz, time_stride)
187            boite_pltz = zbox
188            prof1 = gdept(0)
189            prof2 = gdept(0)
190            IF dimplot EQ 2 THEN BEGIN
191               CASE strmid(cmd.plt, 1, 1) OF
192                  't': boite_pltz = zbox
193                  ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, hpa_min, hpa_max]
194               ENDCASE
195            ENDIF
196         ENDELSE
197      END
198      ELSE:
199   ENDCASE
200END
Note: See TracBrowser for help on using the repository browser.