source: branches/procs-read/update_data.pro @ 84

Last change on this file since 84 was 84, checked in by kolasinski, 16 years ago

Clean up data_read, nc_read and update_data procedures

File size: 4.4 KB
Line 
1PRO update_data, TAB = tab, VNAME = vname, BOXZOOM = boxzoom, ZUNITS = zunits, ZINVAR = zinvar, SUFFIX = suffix, D_DIREC = d_direc, TIME_1 = time_1, TIME_2 =  time_2, NO_MEAN = no_mean, _EXTRA = ex
2
3@common
4@com_eg
5
6   IF debug_w THEN print, '   '
7   IF debug_w THEN print, '   ENTER update_data...'
8   
9   ; Perform mean over vertical levels or extract one vertical level ?
10   dim = (size(tab))[0]
11   perform_mean = vert_switch GE 1 AND zinvar EQ 1 AND NOT keyword_set(no_mean)
12
13   CASE dim OF
14     
15      1: BEGIN
16         print,  ' !!!! 1D case not implemented because !!!!'
17         print,  ' !!!! read_ncdf cannot handle 1D data !!!!'
18      END
19     
20      ;; fichier 2d : surface (n_elements(gdept) = 0 or 1)
21      2: BEGIN
22         print, '    Found ', vname, ' (2D data) from file'       
23         d_direc = 'xy'
24         IF perform_mean EQ 1 THEN BEGIN
25            ; vert_mean[0] can be different from vert_mean[1] to select one level or layer
26            CASE vert_type OF
27               'z': BEGIN
28                  IF vert_mean[0] EQ vert_mean[1] THEN BEGIN
29                     suffix = ' at '+strtrim(string(long(vert_mean(0))), 2)+zunits+' '
30                  ENDIF ELSE suffix = ' at '+strtrim(string(long(vert_mean(0))), 2)+'-'+strtrim(string(long(vert_mean(1))), 2)+zunits+' '
31               END
32               'level':BEGIN ; case level (zindex)
33                  suffix = ' at '+vert_type+' '+strtrim(string(long(gdept(vert_mean(0))+.1)), 2)+' '           
34               END
35            ENDCASE
36         ENDIF
37      END
38     
39      ;; fichier 3d : 2 cas = 1/ 2d espace + temps 2/ 3d espace (n_elements(gdept) > 1)
40      3: BEGIN
41         IF jpt EQ 1 THEN BEGIN
42            print, '    Found ', vname, ' (3D data) from file'
43            d_direc = 'xyz'
44            IF perform_mean EQ 1 THEN BEGIN
45               ;old_boite = [lon1, lon2, lat1, lat2, prof1, prof2]
46               print, '      Average in vertical domain ', vert_type, vert_mean
47               ;IF vert_mean[0] EQ vert_mean[1] THEN stop, report('vert_mean[0] cannot be equal to vert_mean[1]')
48               CASE vert_type OF
49                  'z': BEGIN
50                     zmean = moyenne(temporary(tab), 'z', boite = boxzoom, /NAN)
51                     suffix = ' averaged in ['+strtrim(string(long(vert_mean(0))), 2)+zunits+', '+strtrim(string(long(vert_mean(1))), 2)+zunits+']'
52                  END
53                  'level':BEGIN ; case level (zindex)
54                     zmean = moyenne(temporary(tab), 'z', boite = boxzoom, /zindex, /NAN)
55                     suffix = ' averaged in '+vert_type+' ['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']'                   
56                  END
57               ENDCASE
58               tab = temporary(zmean)
59               d_direc = 'xy'
60            ENDIF
61         ENDIF ELSE BEGIN
62            print, '    Found ', vname, ' (2D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), ' [every ',strtrim(string(time_stride), 2), ']   from file'
63            d_direc = 'xyt'
64         ENDELSE
65      END
66     
67      ;; fichier 4d : volume + temps   
68      4: BEGIN
69         IF debug_w THEN print, ' jpt = ', jpt
70         IF jpt GT 1 THEN BEGIN
71            print, '    Found ', vname, ' (3D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), '   from file'
72            d_direc = 'xyzt'
73            IF perform_mean EQ 1 THEN BEGIN
74               print, '      Average in vertical domain ', vert_type, vert_mean
75               CASE vert_type OF
76                  'z': BEGIN   
77                     zmean = grossemoyenne(tab, 'z', boite = boxzoom, /NAN)
78                     suffix = ' averaged in ['+strtrim(string(long(vert_mean(0))), 2)+zunits+','+strtrim(string(long(vert_mean(1))), 2)+zunits+']'
79                  END
80                  'level': BEGIN ; case level (zindex)
81                     zmean = grossemoyenne(temporary(tab), 'z', boite = boxzoom, /zindex, /NAN)
82                     suffix = ' averaged in '+vert_type+' ['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']'
83                  END
84               ENDCASE
85               tab = temporary(zmean)
86               d_direc = 'xyt'
87            ENDIF
88         ENDIF
89      END
90     
91      ELSE: BEGIN
92         err_mess =  '  *** nc_read : ERROR dimension > 4'
93         tab = -1.0
94      END
95     
96   ENDCASE
97
98   IF debug_w THEN print, '   ...EXIT update_data'
99   IF debug_w THEN print, '   '
100   
101END
Note: See TracBrowser for help on using the repository browser.