source: trunk/procs/mask_z.pro @ 122

Last change on this file since 122 was 92, checked in by ericg, 16 years ago

Misc EG updates following merge with new nc_read.pro (r86)

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                        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
201END
Note: See TracBrowser for help on using the repository browser.