source: trunk/netcdf_output.pro @ 2

Last change on this file since 2 was 2, checked in by pinsard, 18 years ago

initial import from /usr/work/fvi/OPA/geomag/

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