1 | ;+ |
---|
2 | ; |
---|
3 | ; @keyword TAB |
---|
4 | ; |
---|
5 | ; @keyword VNAME |
---|
6 | ; |
---|
7 | ; @keyword BOXZOOM |
---|
8 | ; |
---|
9 | ; @keyword ZUNITS |
---|
10 | ; |
---|
11 | ; @keyword ZINVAR |
---|
12 | ; |
---|
13 | ; @keyword SUFFIX |
---|
14 | ; |
---|
15 | ; @keyword D_DIREC |
---|
16 | ; |
---|
17 | ; @keyword TIME_1 |
---|
18 | ; |
---|
19 | ; @keyword TIME_2 |
---|
20 | ; |
---|
21 | ; @keyword NO_MEAN |
---|
22 | ; |
---|
23 | ; @keyword _EXTRA |
---|
24 | ; |
---|
25 | ; @uses |
---|
26 | ; <pro>common</pro> |
---|
27 | ; <propost_it>com_eg</propost_it> |
---|
28 | ; |
---|
29 | ; @history |
---|
30 | ; - fplod 20100119T160644Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
31 | ; |
---|
32 | ; * check parameters |
---|
33 | ; |
---|
34 | ; @version |
---|
35 | ; $Id$ |
---|
36 | ; |
---|
37 | ;- |
---|
38 | PRO update_data $ |
---|
39 | , TAB=tab $ |
---|
40 | , VNAME=vname $ |
---|
41 | , BOXZOOM=boxzoom $ |
---|
42 | , ZUNITS=zunits $ |
---|
43 | , ZINVAR=zinvar $ |
---|
44 | , SUFFIX=suffix $ |
---|
45 | , D_DIREC=d_direc $ |
---|
46 | , TIME_1=time_1 $ |
---|
47 | , TIME_2=time_2 $ |
---|
48 | , NO_MEAN=no_mean $ |
---|
49 | , _EXTRA=extra |
---|
50 | ; |
---|
51 | compile_opt idl2, strictarrsubs |
---|
52 | ; |
---|
53 | @common |
---|
54 | @com_eg |
---|
55 | ; |
---|
56 | IF debug_w THEN BEGIN |
---|
57 | info = report('enter ...') |
---|
58 | ENDIF |
---|
59 | ; |
---|
60 | usage='update_data' $ |
---|
61 | + ', TAB=tab' $ |
---|
62 | + ', VNAME=vname' $ |
---|
63 | + ', BOXZOOM=boxzoom' $ |
---|
64 | + ', ZUNITS=zunits' $ |
---|
65 | + ', ZINVAR=zinvar' $ |
---|
66 | + ', SUFFIX=suffix' $ |
---|
67 | + ', D_DIREC=d_direc' $ |
---|
68 | + ', TIME_1=time_1' $ |
---|
69 | + ', TIME_2=time_2' $ |
---|
70 | + ', NO_MEAN=no_mean' $ |
---|
71 | + ', _EXTRA=extra' |
---|
72 | ; |
---|
73 | nparam = N_PARAMS() |
---|
74 | IF (nparam NE 0) THEN BEGIN |
---|
75 | ras = report(['Incorrect number of arguments.' $ |
---|
76 | + '!C' $ |
---|
77 | + 'Usage : ' + usage]) |
---|
78 | stop |
---|
79 | ENDIF |
---|
80 | |
---|
81 | ; Perform mean over vertical levels or extract one vertical level ? |
---|
82 | dim = (size(tab))[0] |
---|
83 | perform_mean = vert_switch GE 1 AND zinvar EQ 1 AND NOT keyword_set(no_mean) |
---|
84 | |
---|
85 | CASE dim OF |
---|
86 | |
---|
87 | 1: BEGIN |
---|
88 | print, ' !!!! 1D case not implemented because !!!!' |
---|
89 | print, ' !!!! read_ncdf cannot handle 1D data !!!!' |
---|
90 | END |
---|
91 | |
---|
92 | ;; fichier 2d : surface (n_elements(gdept) = 0 or 1) |
---|
93 | 2: BEGIN |
---|
94 | print, ' Found ', vname, ' (2D data) from file' |
---|
95 | d_direc = 'xy' |
---|
96 | IF perform_mean EQ 1 THEN BEGIN |
---|
97 | ; vert_mean[0] can be different from vert_mean[1] to select one level or layer |
---|
98 | CASE vert_type OF |
---|
99 | 'z': BEGIN |
---|
100 | IF vert_mean[0] EQ vert_mean[1] THEN BEGIN |
---|
101 | suffix = ' at '+strtrim(string(long(vert_mean[0])), 2)+zunits+' ' |
---|
102 | ENDIF ELSE suffix = ' at '+strtrim(string(long(vert_mean[0])), 2)+'-'+strtrim(string(long(vert_mean[1])), 2)+zunits+' ' |
---|
103 | END |
---|
104 | 'level':BEGIN ; case level (zindex) |
---|
105 | suffix = ' at '+vert_type+' '+strtrim(string(long(gdept[vert_mean[0]]+.1)), 2)+' ' |
---|
106 | END |
---|
107 | ENDCASE |
---|
108 | ENDIF |
---|
109 | END |
---|
110 | |
---|
111 | ;; fichier 3d : 2 cas = 1/ 2d espace + temps 2/ 3d espace (n_elements(gdept) > 1) |
---|
112 | 3: BEGIN |
---|
113 | IF jpt EQ 1 THEN BEGIN |
---|
114 | print, ' Found ', vname, ' (3D data) from file' |
---|
115 | d_direc = 'xyz' |
---|
116 | IF perform_mean EQ 1 THEN BEGIN |
---|
117 | ;old_boite = [lon1, lon2, lat1, lat2, prof1, prof2] |
---|
118 | print, ' Average in vertical domain ', vert_type, vert_mean |
---|
119 | ;IF vert_mean[0] EQ vert_mean[1] THEN BEGIN |
---|
120 | ; stop, report('vert_mean[0] cannot be equal to vert_mean[1]') |
---|
121 | ; ENDIF |
---|
122 | CASE vert_type OF |
---|
123 | 'z': BEGIN |
---|
124 | zmean = moyenne(temporary(tab), 'z', boite = boxzoom, /NAN) |
---|
125 | suffix = ' averaged in ['+strtrim(string(long(vert_mean[0])), 2)+zunits+', '+strtrim(string(long(vert_mean[1])), 2)+zunits+']' |
---|
126 | END |
---|
127 | 'level':BEGIN ; case level (zindex) |
---|
128 | zmean = moyenne(temporary(tab), 'z', boite = boxzoom, /zindex, /NAN) |
---|
129 | suffix = ' averaged in '+vert_type+' ['+strtrim(string(long(vert_mean[0])), 2)+','+strtrim(string(long(vert_mean[1])), 2)+']' |
---|
130 | END |
---|
131 | ENDCASE |
---|
132 | tab = temporary(zmean) |
---|
133 | d_direc = 'xy' |
---|
134 | ENDIF |
---|
135 | ENDIF ELSE BEGIN |
---|
136 | print, ' Found ', vname, ' (2D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), ' [every ',strtrim(string(time_stride), 2), '] from file' |
---|
137 | d_direc = 'xyt' |
---|
138 | ENDELSE |
---|
139 | END |
---|
140 | |
---|
141 | ;; fichier 4d : volume + temps |
---|
142 | 4: BEGIN |
---|
143 | IF debug_w THEN BEGIN |
---|
144 | print, ' jpt = ', jpt |
---|
145 | ENDIF |
---|
146 | IF jpt GT 1 THEN BEGIN |
---|
147 | print, ' Found ', vname, ' (3D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), ' from file' |
---|
148 | d_direc = 'xyzt' |
---|
149 | IF perform_mean EQ 1 THEN BEGIN |
---|
150 | print, ' Average in vertical domain ', vert_type, vert_mean |
---|
151 | CASE vert_type OF |
---|
152 | 'z': BEGIN |
---|
153 | zmean = grossemoyenne(tab, 'z', boite = boxzoom, /NAN) |
---|
154 | suffix = ' averaged in ['+strtrim(string(long(vert_mean[0])), 2)+zunits+','+strtrim(string(long(vert_mean[1])), 2)+zunits+']' |
---|
155 | END |
---|
156 | 'level': BEGIN ; case level (zindex) |
---|
157 | zmean = grossemoyenne(temporary(tab), 'z', boite = boxzoom, /zindex, /NAN) |
---|
158 | suffix = ' averaged in '+vert_type+' ['+strtrim(string(long(vert_mean[0])), 2)+','+strtrim(string(long(vert_mean[1])), 2)+']' |
---|
159 | END |
---|
160 | ENDCASE |
---|
161 | tab = temporary(zmean) |
---|
162 | d_direc = 'xyt' |
---|
163 | ENDIF |
---|
164 | ENDIF |
---|
165 | END |
---|
166 | |
---|
167 | ELSE: BEGIN |
---|
168 | err_mess = ' *** nc_read : ERROR dimension > 4' |
---|
169 | tab = -1.0 |
---|
170 | END |
---|
171 | |
---|
172 | ENDCASE |
---|
173 | |
---|
174 | IF debug_w THEN BEGIN |
---|
175 | info = report('leaving ...') |
---|
176 | ENDIF |
---|
177 | |
---|
178 | END |
---|