1 | ;+ |
---|
2 | ; NAME: netcdf_output.pro |
---|
3 | ; |
---|
4 | ; PURPOSE: Writes interpolated field in a netCDF format file |
---|
5 | ; |
---|
6 | ; CATEGORY: Subroutine |
---|
7 | ; |
---|
8 | ; CALLING SEQUENCE: netcdf_output, zout_mask_name, zout_mask, zdata_name, zlon, zlat, $ |
---|
9 | ; zoutputfile, ztitle, POINT = point, znumout, zvarid |
---|
10 | ; |
---|
11 | ; INPUTS: |
---|
12 | ; zout_mask_name : name of interpolated field mask |
---|
13 | ; zout_mask : mask of interpolated field |
---|
14 | ; zdata_name : name of data |
---|
15 | ; zlon,zlat : coordinates of output grid |
---|
16 | ; zoutputfile : name of output file |
---|
17 | ; ztitle : title of file |
---|
18 | ; point : grid point of field (u,v,t) |
---|
19 | ; |
---|
20 | ; KEYWORD PARAMETERS: None |
---|
21 | ; |
---|
22 | ; OUTPUTS: |
---|
23 | ; NetCDF file containing the attributes of interpolated field |
---|
24 | ; znumout : ID of output file |
---|
25 | ; zvarid : ID of variable named zdata_name |
---|
26 | ; |
---|
27 | ; COMMON BLOCKS: |
---|
28 | ; common_interp.pro |
---|
29 | ; |
---|
30 | ; SIDE EFFECTS: |
---|
31 | ; |
---|
32 | ; RESTRICTIONS: |
---|
33 | ; |
---|
34 | ; EXAMPLE: |
---|
35 | ; |
---|
36 | ; MODIFICATION HISTORY: 11/99 A. Jouzeau |
---|
37 | ; |
---|
38 | ;- |
---|
39 | ;------------------------------------------------------------ |
---|
40 | ;------------------------------------------------------------ |
---|
41 | ;------------------------------------------------------------ |
---|
42 | PRO netcdf_output, zout_mask_name, zout_mask, zdata_name, zlon, zlat, $ |
---|
43 | zoutputfile, ztitle, zlong_name, POINT = point, znumout, zvarid, $ |
---|
44 | znumdta |
---|
45 | @common_interp |
---|
46 | tempsun = systime(1) ; pour key_performance |
---|
47 | ; |
---|
48 | ; 1. Creating output file |
---|
49 | ; ======================= |
---|
50 | ; |
---|
51 | |
---|
52 | znumout = ncdf_create(output_dir+ '/'+ zoutputfile) |
---|
53 | ; |
---|
54 | ; 2. Headers |
---|
55 | ; ========== |
---|
56 | ; |
---|
57 | ; 2.1. Dimensions |
---|
58 | ; --------------- |
---|
59 | ; |
---|
60 | xid = ncdf_dimdef(znumout, 'x', jpioce) |
---|
61 | yid = ncdf_dimdef(znumout, 'y', jpjoce) |
---|
62 | IF keyword_set(ndim) THEN zid = ncdf_dimdef(znumout, 'z', jpkoce) |
---|
63 | tid = ncdf_dimdef(znumout, time_name, /unlimited) |
---|
64 | ; |
---|
65 | ; 2.2. Variables |
---|
66 | ; -------------- |
---|
67 | ; |
---|
68 | IF size(zlon, /n_dimensions) EQ 1 THEN BEGIN |
---|
69 | varlon = ncdf_vardef(znumout, 'nav_lon', [xid], /float) |
---|
70 | varlat = ncdf_vardef(znumout, 'nav_lat', [yid], /float) |
---|
71 | ENDIF ELSE BEGIN |
---|
72 | varlon = ncdf_vardef(znumout, 'nav_lon', [xid, yid], /float) |
---|
73 | varlat = ncdf_vardef(znumout, 'nav_lat', [xid, yid], /float) |
---|
74 | ENDELSE |
---|
75 | IF keyword_set(ndim) THEN BEGIN |
---|
76 | varlev1 = ncdf_varid(nummsh, 'nav_lev') |
---|
77 | vart1 = ncdf_varid(znumdta, time_name) |
---|
78 | varlev = ncdf_vardef(znumout, 'nav_lev', [zid], /float) |
---|
79 | vart = ncdf_vardef(znumout, 'time', [tid], /float) |
---|
80 | ; varmsk = ncdf_vardef(znumout, zout_mask_name, [xid, yid, zid], /float) |
---|
81 | zvarid = ncdf_vardef(znumout, zdata_name, [xid, yid, zid, tid], /float) |
---|
82 | ENDIF ELSE BEGIN |
---|
83 | vart1 = ncdf_varid(znumdta, time_name) |
---|
84 | vart = ncdf_vardef(znumout, 'time', [tid], /float) |
---|
85 | ; varmsk = ncdf_vardef(znumout, zout_mask_name, [xid, yid], /float) |
---|
86 | zvarid = ncdf_vardef(znumout, zdata_name, [xid, yid, tid], /float) |
---|
87 | ENDELSE |
---|
88 | ; |
---|
89 | ; 2.3. Attributes |
---|
90 | ; --------------- |
---|
91 | ; |
---|
92 | ncdf_attput, znumout, varlon, "units", "degrees_east" |
---|
93 | ncdf_attput, znumout, varlon, "valid_min", min(zlon) |
---|
94 | ncdf_attput, znumout, varlon, "valid_max", max(zlon) |
---|
95 | ncdf_attput, znumout, varlon, "long_name", string("Longitude at ", point, "-point") |
---|
96 | ncdf_attput, znumout, varlat, "units", "degrees_north" |
---|
97 | ncdf_attput, znumout, varlat, "valid_min", min(zlat) |
---|
98 | ncdf_attput, znumout, varlat, "valid_max", max(zlat) |
---|
99 | ncdf_attput, znumout, varlat, "long_name", string("Latitude at ", point, "-point") |
---|
100 | IF keyword_set(ndim) THEN BEGIN |
---|
101 | rien = ncdf_attcopy(nummsh, varlev1, "units", znumout, varlev) |
---|
102 | rien = ncdf_attcopy(nummsh, varlev1, "valid_min", znumout, varlev) |
---|
103 | rien = ncdf_attcopy(nummsh, varlev1, "valid_max", znumout, varlev) |
---|
104 | rien = ncdf_attcopy(nummsh, varlev1, "long_name", znumout, varlev) |
---|
105 | ENDIF |
---|
106 | zatt = ncdf_varinq(znumdta, vart1) |
---|
107 | znbatt = zatt.natts |
---|
108 | FOR i = 0, znbatt-1 DO BEGIN |
---|
109 | namatt = ncdf_attname(znumdta, vart1, i) |
---|
110 | rien = ncdf_attcopy(znumdta, vart1, namatt,znumout, vart) |
---|
111 | ENDFOR |
---|
112 | ncdf_attput, znumout, zvarid, "units", units |
---|
113 | ncdf_attput, znumout, zvarid, "long_name", zlong_name |
---|
114 | ; |
---|
115 | ; ... Global attributes |
---|
116 | ; |
---|
117 | ncdf_attput, znumout,"Conventions", "GDT 1.2", /global |
---|
118 | ncdf_attput, znumout,"file_name", zoutputfile, /global |
---|
119 | ncdf_attput, znumout,"Title", ztitle, /global |
---|
120 | ; |
---|
121 | ; 3. Writing data |
---|
122 | ; =============== |
---|
123 | ; |
---|
124 | ncdf_control, znumout, /endef |
---|
125 | ; |
---|
126 | ; 3.1. Grid |
---|
127 | ; --------- |
---|
128 | ; |
---|
129 | printf, 40, '' |
---|
130 | printf, 40, 'Storing coordinates' |
---|
131 | ncdf_varput, znumout, varlon, zlon |
---|
132 | ncdf_varput, znumout, varlat, zlat |
---|
133 | IF keyword_set(ndim) THEN BEGIN |
---|
134 | ncdf_varget, nummsh, 'nav_lev', z, count = [jpkoce] |
---|
135 | ncdf_varput, znumout, varlev, z |
---|
136 | ENDIF |
---|
137 | ; |
---|
138 | ; 3.2. Time and mask |
---|
139 | ; ------------------ |
---|
140 | ; |
---|
141 | printf, 40, '' |
---|
142 | printf, 40, 'Storing times and mask' |
---|
143 | ncdf_varget, znumdta, vart1, zt, count = [nitend-nit000+1], offset = [nit000-1] |
---|
144 | ncdf_varput, znumout, vart, zt |
---|
145 | ;ncdf_varput, znumout, varmsk, zout_mask |
---|
146 | if keyword_set(key_performance) THEN print, 'temps netcdf_output', systime(1)-tempsun |
---|
147 | ; |
---|
148 | return |
---|
149 | END |
---|