source: trunk/procs/macro_read.pro @ 68

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

Add a macro to build the seasonal cycle so that we can build a netCDF file with the field anomalies - cdf option in cmd.out

File size: 3.7 KB
Line 
1;--------------------------- 
2; Read Macro field Data
3;--------------------------- 
4FUNCTION macro_read, file_name, var_name, ncdf_db,  TIME_1 = time_1,  TIME_2 =  time_2, ALL_DATA =  all_data, _extra = ex
5@common
6@com_eg
7
8   IF debug_w THEN print, '   ENTER macro_read...'
9
10   IF debug_w THEN print, '    keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA)
11;
12; 1) read macro definition of field
13;
14   @get_macro_def
15
16   print, '    Computing macro : ', macro_def
17
18; 2) loop to decode definition and build field
19
20   CASE macro_def[1] OF
21      '=:': BEGIN
22     
23         ; 2.1 call specific function
24
25         ; if stat extract base field
26
27         CASE macro_def[2] OF
28            'make_stddev': macro_base_fld =  extract_str(line, '\', '/')
29            'make_grad' : macro_base_fld =  extract_str(line, '\', '/')
30            'make_ratio' : macro_base_fld =  extract_str(line, '\', '/')
31            'make_interp' : macro_base_fld =  extract_str(line, '\', '/')     
32            'make_skewness': macro_base_fld =  extract_str(line, '\', '/')
33            'make_anomaly': macro_base_fld =  extract_str(line, '\', '/')           
34            ELSE:
35         ENDCASE
36         strcall = 'field_lec = '+macro_def[2]+'(file_name, ncdf_db,  TIME_1 = time_1,  TIME_2 =  time_2, ALL_DATA = all_data, _extra = ex)'
37         res = execute(strcall)
38         fieldo = {name: '', data: field_lec.data, legend: '', units: '', origin: '', dim: 0, direc:''}
39         fieldo.name = var_name
40         fieldo.legend = legend+field_lec.legend
41         fieldo.units = unit
42         fieldo.origin = field_lec.origin
43         fieldo.dim = field_lec.dim
44         fieldo.direc = field_lec.direc  ;;;;; causes problems for @@vosigthi because field_lec.direc is not defined in make_depth
45
46      END
47      ELSE: BEGIN
48         
49                                ; 2.2 add fields
50         
51         mult = 1.
52         first = 1
53         FOR index =  2, nfields-1 DO BEGIN
54           
55            command = macro_def[index]
56           
57            IF command EQ '-' THEN BEGIN
58               mult = -1.
59            ENDIF ELSE IF command EQ '+' THEN BEGIN
60               mult = 1.
61            ENDIF ELSE BEGIN
62               command2 = macro_def[(index+1) <(nfields-1) ]
63;               print, 'command 2 = '+command2
64               IF command2 EQ '*' THEN BEGIN
65                  mult = mult*float(command)
66                  index =  index + 2
67                  command = macro_def[index]
68               ENDIF
69                                ; read field
70               field_lec = nc_read(file_name, command, ncdf_db,  TIME_1 = time_1,  TIME_2 =  time_2,  ALL_DATA =  all_data)
71               IF first EQ 1 THEN BEGIN
72                  first = 0
73                  fieldo = {name: '', data: field_lec.data*mult, legend: '', units: '', origin: '', dim: 0, direc:''}
74                  fieldo.name = var_name
75                  fieldo.legend = legend
76                  fieldo.units = unit
77                  fieldo.origin = field_lec.origin+' macro'
78                  fieldo.dim = field_lec.dim
79                  fieldo.direc = field_lec.direc
80               ENDIF ELSE BEGIN
81                                ; check units
82                  IF field_lec.units NE fieldo.units OR field_lec.dim NE fieldo.dim THEN BEGIN
83                     print, ' *** WARNING in macro : units/dim mismatch : ',field_lec.units,' vs. ', fieldo.units,'  and ', field_lec.dim,' vs. ', fieldo.dim
84                  ENDIF
85                                ; add field
86                  fieldo.data = fieldo.data + field_lec.data*mult
87               ENDELSE
88            ENDELSE
89           
90         ENDFOR
91         
92      END
93   ENDCASE
94
95
96   IF debug_w THEN print, '   ...EXIT macro_read'
97
98
99   return, fieldo
100END
Note: See TracBrowser for help on using the repository browser.