1 | ;+ |
---|
2 | ; |
---|
3 | ; Reading ECHAM grads files |
---|
4 | ; |
---|
5 | ; @history |
---|
6 | ; EG 24/2/99 |
---|
7 | ; |
---|
8 | ; @version |
---|
9 | ; $Id$ |
---|
10 | ; |
---|
11 | ;- |
---|
12 | FUNCTION 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 |
---|
131 | END |
---|