source: trunk/tools/transfo/grads_read.pro @ 169

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

add compile_opt idl2, strictarrsubs and subsequent modifications

  • Property svn:keywords set to Id
File size: 3.4 KB
Line 
1;+
2;
3; Reading ECHAM grads files
4;
5; @history
6; EG 24/2/99
7;
8; @version
9; $Id$
10;
11;-
12FUNCTION grads_read, file_name, var_name $
13         , NCDF_DB=ncdf_db $
14         , TIME_1=time_1 $
15         , TIME_2=time_2 $
16         , ALL_DATA=all_data $
17         , NO_KEY_SHIFT=no_key_shift $
18         , LEVEL=level
19;
20  compile_opt idl2, strictarrsubs
21;
22@common
23;
24; inits
25   IF NOT keyword_set(NCDF_DB) THEN ncdf_db = iodir
26   IF NOT keyword_set(TIME_1) THEN time_1 = 1
27   IF NOT keyword_set(TIME_2) THEN time_2 = time_1
28   IF NOT keyword_set(LEVEL) THEN level = 1
29
30   numgrd = 20
31   z = 0.
32;
33; decide which subdomain of data to read
34;
35   IF keyword_set(ALL_DATA) THEN BEGIN
36      premierx = 0
37      premiery = 0
38      premierz = 0
39      nx = jpi
40      ny = jpj
41      nz = jpk
42      dernierx = jpi-1
43      derniery = jpj-1
44      dernierz = jpk-1
45   ENDIF ELSE BEGIN
46      grille,mask,glam,gphi,gdep,nx,ny,nz,premierx,premiery,premierz,dernierx,derniery,dernierz
47      mask = 1
48   ENDELSE
49
50; meta data file <file_name>.ctl
51   m_file = ncdf_db+file_name+'.ctl'
52
53
54   jpia = LONG(grep('grep -i XDEF '+m_file, ' ', 1))
55   jpja = LONG(grep('grep -i YDEF '+m_file, ' ', 1))
56   
57   IF jpia LE 0 OR jpja LE 0 THEN BEGIN
58      print, 'error in ', m_file
59      return, z
60   ENDIF
61;
62; find record of field
63;
64   var_name = STRUPCASE(var_name)
65
66; find number of levels
67
68   spawn, 'grep ZDEF '+m_file+' | awk '' {print $2}''', line
69   nlevels = long(line[0])
70
71; find number of time interval
72
73   spawn, 'grep TDEF '+m_file+' | awk '' {print $2}''', line
74   ntime = long(line[0])
75
76; find number of fields
77
78   spawn, 'grep VARS '+m_file+' | awk '' {print $2}''', line
79   nvars = long(line[0])
80;
81; nrecf = line of <var_name> minus line of VARS
82;
83   nlvars = LONG(grep('grep -in "VARS " '+m_file, ':', 0))
84   nlfild = LONG(grep('grep -in "'+var_name+'    " '+m_file, ':', 0))
85
86   nrecf = nlfild - nlvars - 1
87
88; nrecfl = index of field
89
90   delta_t = time_2 - time_1
91
92   nrecfl = nvars*nlevels*delta_t + nrecf*nlevels + level - 1
93
94
95; open data file <file_name>.grd
96   s_file = ncdf_db+file_name+'.grd'
97   openr, numgrd, s_file, /get_lun
98;
99; compute offset
100;
101   tab_size = jpia*jpja*4 + 8
102   offset = nrecfl*tab_size + 4
103;
104; read data
105;
106   z = assoc(numgrd, fltarr(jpia, jpja, /nozero), offset)
107   IF NOT keyword_set(no_key_shift) THEN $
108    z = reverse(shift(z[0], key_shift, 0), 2) ELSE $
109    z = reverse(shift(z[0], 0, 0), 2)
110;
111   IF nlevels EQ 1 THEN BEGIN
112      print, '    Read rec. ', string(nrecfl, format = '(I3)'), ':', string(var_name, format = '(A8)'), ' dims : ', string(jpia, format = '(I4)'), string(jpja, format = '(I4)'), '  (', string(delta_t, format = '(I3)'),') - min/max : ', min(z), max(z)
113   ENDIF ELSE BEGIN   
114      print, '    Read rec. ', string(nrecfl, format = '(I3)'), ':', string(var_name, format = '(A8)'), ' (level ',string(level, format = '(I2.2)'),') dims : ', string(jpia, format = '(I4)'), string(jpja, format = '(I4)'), string(nlevels, format = '(I4)'), '  (', string(delta_t, format = '(I3)'), ') - min/max : ', min(z), max(z)
115   ENDELSE
116
117   close, numgrd
118   free_lun, numgrd
119
120; Field Attributes
121
122   field = {name: '', data: z, legend: '', units: '', origin: '', dim: 0}
123   field.name = var_name
124   field.origin = ncdf_db+file_name
125   field.legend = grepsed('grep -i "'+var_name+'    " '+m_file, 'sed ''s/.*99\(.*\)\[.*/\1/''')
126   field.units = grepsed('grep -i "'+var_name+'    " '+m_file, 'sed ''s/.*\[\(.*\)\].*/\1/''')
127   field.dim = 2
128
129;
130   return, field
131END
Note: See TracBrowser for help on using the repository browser.