source: trunk/procs/mask_z.pro @ 162

Last change on this file since 162 was 162, checked in by pinsard, 15 years ago

start to modify unformal header to idldoc 2. header syntax

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