[ncl-talk] Dynamic variable names output to netcdf file
Dennis Shea
shea at ucar.edu
Fri Oct 7 09:32:19 MDT 2016
Hi Tess,
I think the issue is the following:
Variable: data_seasonal_clim
[snip]
Number of Dimensions: 3
Dimensions and sizes: [season | 4] x [latitude | 256] x [longitude | 512]
Coordinates:
season: [DJF..SON]
<************************
latitude: [-89.46294..89.46294]
longitude: [ 0..359.2969]
By netCDF rule, a coordinate variable *must* be a numeric monotonic
one-dimensional array.
You have the names as type string.
NCL will allow this construction to occur. However, when writing to a
netCDF file, this structure is neither recognized or allowed. I am pretty
sure this applies to both netCDF-3 and netCDF-4. (FYI: netCDF-4 is a subset
of HDF-5 and is HDF-5 )
data_seasonal_clim!0 = "season"
data_seasonal_clim!1 = "latitude"
data_seasonal_clim!2 = "longitude"
;;;data_seasonal_clim&season = season_names
data_seasonal_clim&season = ispan(0.3,1) ; ispan(1,4,1) ....
whatever
season_names = (/ "DJF","MAM","JJA","SON"/)
season_names!0 = "season"
season_names&season = ispan(0.3,1) ; ispan(1,4,1) .... whatever
===
NOTE: netCDF-3 does *not* allow string variables. It does allow character
variables. Hence, if you want string variable output, I think you should
precede the file write with:
*setfileoption*("nc","Format","NetCDF4")
Good luck
D
On Fri, Oct 7, 2016 at 5:25 AM, Tess Parker <tess.parker at monash.edu> wrote:
> Hi -
>
> I would like to dynamically assign the variable name when writing output
> to a netcdf file. The attached script returns an error message, although
> the file does seem to write out the correctly named variable with values?
> Can you suggest a reason for the error message? - I think it may be
> associated with the coordinate variables, but I'm not sure why this should
> be.
>
> Thanks as always for your help!
>
> *NCL SCRIPT:*
> ****************
>
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/ut_string.ncl"
> ;/Calc_seasonal_means_Jasmin.ncl
>
> begin
> ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> data_dir = "/badc/ecmwf-era-interim/data/gg/"
>
> years = ispan(1979,2015,1)
> clim_years = years
> seas_len = 3
> months = ispan(1,12,1)
> month_string = new(12,string)
> do aa = 0,11
> if(months(aa).lt.10) then
> month_string(aa) = "0"+months(aa)
> else
> month_string(aa) = ""+months(aa)
> end if
> end do
> month_names = (/ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
> "Sep", "Oct", "Nov", "Dec" /)
> month_array = (/"J","F","M","A","M","J","J","A","S","O","N","D"/)
>
> season = (/ (/12,1,2/),(/3,4,5/),(/6,7,8/),(/9,10,11/) /)
> i_season = season-1
> season_names = (/ "DJF","MAM","JJA","SON"/)
>
> input_var = "Z"
> input_lev = 850
> input_dir = "ap" ;ap, as, at, av
>
> file_out = True
> out_file = ""+input_var+"_seasonal_means_1979_2015.nc"
> output_var = str_lower(input_var)
>
> if (file_out) then
> system("rm -f "+out_file)
> ncdf = addfile(out_file, "c")
> end if
>
> ;; Test file for data dimensions
> ;;==============================
>
> test_file = systemfunc("ls "+data_dir+input_dir+"/1979/01/01/
> ggap197901010000.nc")
> testf = addfile(test_file,"r")
> test_data = testf->$input_var$(:,{input_lev},::-1,:)
> test_dims = dimsizes(test_data)
> printVarSummary(test_data)
> print(test_dims)
>
> data_monthly_mean = new((/12,test_dims(1),test_dims(2)/),float)
> data_monthly_mean!0 = "month"
> data_monthly_mean!1 = "latitude"
> data_monthly_mean!2 = "longitude"
> data_monthly_mean&latitude = test_data&latitude
> data_monthly_mean&longitude = test_data&longitude
> printVarSummary(data_monthly_mean)
>
> ;; Read in 6-hourly data and construct monthly means
> ;;==================================================
>
> do jj = 0, 1;dimsizes(months)-1
> in_files = systemfunc("ls "+data_dir+input_dir+"/19{79,
> 80}/"+month_string(jj)+"/*/*.nc")
> ;in_files = systemfunc("ls "+data_dir+input_dir+"/*/"+
> month_string(jj)+"/*/*.nc")
> printVarSummary(in_files)
> print(in_files)
> inf = addfiles(in_files,"r")
> ListSetType(inf,"cat")
> data = inf[:]->$input_var$(:,{input_lev},::-1,:)
> printVarSummary(data)
> data_monthly_mean(jj,:,:) = dim_avg_n(data,0)
> delete([/in_files,inf,data/])
> end do
>
> printVarSummary(data_monthly_mean)
>
> data_seasonal_clim = new((/4,test_dims(1),test_dims(2)/),float)
> data_seasonal_clim!0 = "season"
> data_seasonal_clim!1 = "latitude"
> data_seasonal_clim!2 = "longitude"
> data_seasonal_clim&season = season_names
> data_seasonal_clim&latitude = test_data&latitude
> data_seasonal_clim&longitude = test_data&longitude
>
> printVarSummary(data_seasonal_clim)
>
> do ns = 0,3
> data_seasonal_clim(ns,:,:) = dim_avg_n(data_monthly_mean(i_
> season(ns,:),:,:),0)
> end do
>
> printVarSummary(data_seasonal_clim)
>
> if (file_out) then
> varname = output_var+"_seasonal_clim"
> print(varname)
> ncdf->$varname$ = data_seasonal_clim
> end if
>
> ;*********************
> end
>
> *OUTPUT:*
> ***********
> [snip]
> Variable: data
> Type: float
> Total Size: 119537664 bytes
> 29884416 values
> Number of Dimensions: 3
> Dimensions and sizes: [t | 228] x [latitude | 256] x [longitude | 512]
> Coordinates:
> t: [ 0..393.75]
> latitude: [-89.46294..89.46294]
> longitude: [ 0..359.2969]
> Number Of Attributes: 13
> p : 850
> source : GRIB data
> name : Z
> title : Geopotential
> date : 01/02/79
> time : 00:00
> long_name : Geopotential
> standard_name : geopotential
> units : m**2 s**-2
> missing_value : 2e+20
> _FillValue : 2e+20
> valid_min : -4084.883
> valid_max : 487005.9
>
> Variable: data_monthly_mean
> Type: float
> Total Size: 6291456 bytes
> 1572864 values
> Number of Dimensions: 3
> Dimensions and sizes: [month | 12] x [latitude | 256] x [longitude |
> 512]
> Coordinates:
> latitude: [-89.46294..89.46294]
> longitude: [ 0..359.2969]
> Number Of Attributes: 1
> _FillValue : 9.96921e+36
>
> Variable: data_seasonal_clim
> Type: float
> Total Size: 2097152 bytes
> 524288 values
> Number of Dimensions: 3
> Dimensions and sizes: [season | 4] x [latitude | 256] x [longitude |
> 512]
> Coordinates:
> season: [DJF..SON]
> latitude: [-89.46294..89.46294]
> longitude: [ 0..359.2969]
> Number Of Attributes: 1
> _FillValue : 9.96921e+36
>
> Variable: varname
> Type: string
> Total Size: 8 bytes
> 1 values
> Number of Dimensions: 1
> Dimensions and sizes: [1]
> Coordinates:
> (0) z_seasonal_clim
> fatal:["NclFile.c":432]:FileAddVar: an error occurred while adding a
> variable to a file, check to make sure data type is supported by the output
> format
> fatal:["Execute.c":8575]:Execute: Error occurred at or near line 110 in
> file Calc_seasonal_means_Jasmin.ncl
>
> *NCL_FILEDUMP:*
> *********************
>
> ncl_filedump Z_seasonal_means_1979_2015.nc
>
> Variable: f
> Type: file
> filename: Z_seasonal_means_1979_2015
> path: Z_seasonal_means_1979_2015.nc
> file global attributes:
> dimensions:
> season = 4
> latitude = 256
> longitude = 512
> variables:
> float z_seasonal_clim ( season, latitude, longitude )
> _FillValue : 9.96921e+36
>
>
> --
> Tess Parker
> Associate Researcher
> School of Earth, Atmosphere and Environment
> Room 225, Building 28
> 9 Rainforest Walk
> Monash University, Clayton VIC 3800
>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20161007/d9cf93fc/attachment.html
More information about the ncl-talk
mailing list