source: trunk/tools/transfo/grads_read.pro

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

fill uses paragraph in header with used commons

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