source: trunk/netcdf_output.pro @ 48

Last change on this file since 48 was 48, checked in by pinsard, 10 years ago

fix thanks to coding rules

File size: 4.7 KB
Line 
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;------------------------------------------------------------
42PRO 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
52znumout = ncdf_create(output_dir+ '/'+ zoutputfile)
53;
54; 2. Headers
55; ==========
56;
57;  2.1. Dimensions
58;  ---------------
59;
60xid = ncdf_dimdef(znumout, 'x', jpioce)
61yid = ncdf_dimdef(znumout, 'y', jpjoce)
62IF keyword_set(ndim) THEN zid = ncdf_dimdef(znumout, 'z', jpkoce)
63tid = ncdf_dimdef(znumout, time_name, /unlimited)
64;
65;  2.2. Variables
66;  --------------
67;
68IF 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)
71ENDIF ELSE BEGIN
72   varlon = ncdf_vardef(znumout, 'nav_lon', [xid, yid], /float)
73   varlat = ncdf_vardef(znumout, 'nav_lat', [xid, yid], /float)
74ENDELSE
75IF 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)
82ENDIF 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)
87ENDELSE
88;
89;  2.3. Attributes
90;  ---------------
91;
92ncdf_attput, znumout, varlon, "units", "degrees_east"
93ncdf_attput, znumout, varlon, "valid_min", min(zlon)
94ncdf_attput, znumout, varlon, "valid_max", max(zlon)
95ncdf_attput, znumout, varlon, "long_name", string("Longitude at ", point, "-point")
96ncdf_attput, znumout, varlat, "units", "degrees_north"
97ncdf_attput, znumout, varlat, "valid_min", min(zlat)
98ncdf_attput, znumout, varlat, "valid_max", max(zlat)
99ncdf_attput, znumout, varlat, "long_name", string("Latitude at ", point, "-point")
100IF 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)
105ENDIF
106zatt = ncdf_varinq(znumdta, vart1)
107znbatt = zatt.natts
108FOR i = 0, znbatt-1 DO BEGIN
109   namatt = ncdf_attname(znumdta, vart1, i)
110   rien = ncdf_attcopy(znumdta, vart1, namatt,znumout, vart)
111ENDFOR
112ncdf_attput, znumout, zvarid, "units", units
113ncdf_attput, znumout, zvarid, "long_name", zlong_name
114;
115; ... Global attributes
116;
117ncdf_attput, znumout,"Conventions", "GDT 1.2", /global
118ncdf_attput, znumout,"file_name", zoutputfile, /global
119ncdf_attput, znumout,"Title", ztitle, /global
120;
121; 3. Writing data
122; ===============
123;
124ncdf_control, znumout, /endef
125;
126;  3.1. Grid
127;  ---------
128;
129printf, 40, ''
130printf, 40, 'Storing coordinates'
131ncdf_varput, znumout, varlon, zlon
132ncdf_varput, znumout, varlat, zlat
133IF keyword_set(ndim) THEN BEGIN
134   ncdf_varget, nummsh, 'nav_lev', z, count = [jpkoce]
135   ncdf_varput, znumout, varlev, z
136ENDIF
137;
138;  3.2. Time and mask
139;  ------------------
140;
141printf, 40, ''
142printf, 40, 'Storing times and mask'
143ncdf_varget, znumdta, vart1, zt, count = [nitend-nit000+1], offset = [nit000-1]
144ncdf_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;
148return
149END
Note: See TracBrowser for help on using the repository browser.