;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME: netcdf_output.pro ; ; PURPOSE: Writes interpolated field in a netCDF format file ; ; CATEGORY: Subroutine ; ; CALLING SEQUENCE: netcdf_output, zout_mask_name, zout_mask, zdata_name, zlon, zlat, $ ; zoutputfile, ztitle, POINT = point, znumout, zvarid ; ; INPUTS: ; zout_mask_name : name of interpolated field mask ; zout_mask : mask of interpolated field ; zdata_name : name of data ; zlon,zlat : coordinates of output grid ; zoutputfile : name of output file ; ztitle : title of file ; point : grid point of field (u,v,t) ; ; KEYWORD PARAMETERS: None ; ; OUTPUTS: ; NetCDF file containing the attributes of interpolated field ; znumout : ID of output file ; zvarid : ID of variable named zdata_name ; ; COMMON BLOCKS: ; common_interp.pro ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; MODIFICATION HISTORY: 11/99 A. Jouzeau ; ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ PRO netcdf_output, zout_mask_name, zout_mask, zdata_name, zlon, zlat, $ zoutputfile, ztitle, zlong_name, POINT = point, znumout, zvarid, $ znumdta @common_interp tempsun = systime(1) ; pour key_performance ; ; 1. Creating output file ; ======================= ; znumout = ncdf_create(output_dir+ '/'+ zoutputfile) ; ; 2. Headers ; ========== ; ; 2.1. Dimensions ; --------------- ; xid = ncdf_dimdef(znumout, 'x', jpioce) yid = ncdf_dimdef(znumout, 'y', jpjoce) IF keyword_set(ndim) THEN zid = ncdf_dimdef(znumout, 'z', jpkoce) tid = ncdf_dimdef(znumout, time_name, /unlimited) ; ; 2.2. Variables ; -------------- ; IF size(zlon, /n_dimensions) EQ 1 THEN BEGIN varlon = ncdf_vardef(znumout, 'nav_lon', [xid], /float) varlat = ncdf_vardef(znumout, 'nav_lat', [yid], /float) ENDIF ELSE BEGIN varlon = ncdf_vardef(znumout, 'nav_lon', [xid, yid], /float) varlat = ncdf_vardef(znumout, 'nav_lat', [xid, yid], /float) ENDELSE IF keyword_set(ndim) THEN BEGIN varlev1 = ncdf_varid(nummsh, 'nav_lev') vart1 = ncdf_varid(znumdta, time_name) varlev = ncdf_vardef(znumout, 'nav_lev', [zid], /float) vart = ncdf_vardef(znumout, 'time', [tid], /float) ; varmsk = ncdf_vardef(znumout, zout_mask_name, [xid, yid, zid], /float) zvarid = ncdf_vardef(znumout, zdata_name, [xid, yid, zid, tid], /float) ENDIF ELSE BEGIN vart1 = ncdf_varid(znumdta, time_name) vart = ncdf_vardef(znumout, 'time', [tid], /float) ; varmsk = ncdf_vardef(znumout, zout_mask_name, [xid, yid], /float) zvarid = ncdf_vardef(znumout, zdata_name, [xid, yid, tid], /float) ENDELSE ; ; 2.3. Attributes ; --------------- ; ncdf_attput, znumout, varlon, "units", "degrees_east" ncdf_attput, znumout, varlon, "valid_min", min(zlon) ncdf_attput, znumout, varlon, "valid_max", max(zlon) ncdf_attput, znumout, varlon, "long_name", string("Longitude at ", point, "-point") ncdf_attput, znumout, varlat, "units", "degrees_north" ncdf_attput, znumout, varlat, "valid_min", min(zlat) ncdf_attput, znumout, varlat, "valid_max", max(zlat) ncdf_attput, znumout, varlat, "long_name", string("Latitude at ", point, "-point") IF keyword_set(ndim) THEN BEGIN rien = ncdf_attcopy(nummsh, varlev1, "units", znumout, varlev) rien = ncdf_attcopy(nummsh, varlev1, "valid_min", znumout, varlev) rien = ncdf_attcopy(nummsh, varlev1, "valid_max", znumout, varlev) rien = ncdf_attcopy(nummsh, varlev1, "long_name", znumout, varlev) ENDIF zatt = ncdf_varinq(znumdta, vart1) znbatt = zatt.natts FOR i = 0, znbatt-1 DO BEGIN namatt = ncdf_attname(znumdta, vart1, i) rien = ncdf_attcopy(znumdta, vart1, namatt,znumout, vart) ENDFOR ncdf_attput, znumout, zvarid, "units", units ncdf_attput, znumout, zvarid, "long_name", zlong_name ; ; ... Global attributes ; ncdf_attput, znumout,"Conventions", "GDT 1.2", /global ncdf_attput, znumout,"file_name", zoutputfile, /global ncdf_attput, znumout,"Title", ztitle, /global ; ; 3. Writing data ; =============== ; ncdf_control, znumout, /endef ; ; 3.1. Grid ; --------- ; printf, 40, '' printf, 40, 'Storing coordinates' ncdf_varput, znumout, varlon, zlon ncdf_varput, znumout, varlat, zlat IF keyword_set(ndim) THEN BEGIN ncdf_varget, nummsh, 'nav_lev', z, count = [jpkoce] ncdf_varput, znumout, varlev, z ENDIF ; ; 3.2. Time and mask ; ------------------ ; printf, 40, '' printf, 40, 'Storing times and mask' ncdf_varget, znumdta, vart1, zt, count = [nitend-nit000+1], offset = [nit000-1] ncdf_varput, znumout, vart, zt ;ncdf_varput, znumout, varmsk, zout_mask if keyword_set(key_performance) THEN print, 'temps netcdf_output', systime(1)-tempsun ; return END