[gradsusr] need help packing the netcdf data

Lynnes, Christopher S. (GSFC-6102) christopher.s.lynnes at nasa.gov
Sat Jul 14 14:13:31 EDT 2012


The nco package (http://nco.sourceforge.net/) has a command-line utility called ncpdq that can pack netcdf data.

On Jul 14, 2012, at 11:17 AM, Reto Stauffer wrote:

> 
> Hy Kishore
> 
> I was working on that today for about 5 hours using Python.
> I can say some words to the python procedure but it is nearly the same  
> in all other packages i guess.
> 
> # - Open new netCdf file
> ncf = pupynere.NetCDFFile(outfile+".nc",'w')
> 
> # - Then you have to define the dimensions.
> #   If you have e.g. some surface data and only
> #   one timestep you need just "longitude" and "latitude"
> #   but there is the option to store 3-D or 4-D fields
> #   with additional time and vertical coordinate.
> #   I am creating all 4 dimensions.
> londim  = ncf.createDimension('longitude',longitude.shape[0]);
> latdim  = ncf.createDimension('latitude',latitude.shape[0]);
> levdim  = ncf.createDimension('levelist',len(unique_levels));
> timedim = ncf.createDimension('time',len(unique_times));
> 
> # - Then store the dimension variables into the created
> #   Dimensions (e.g. level vector or longitude vector)
> #   and setting some additional attributes.
> # - IMPORTANT there is no default unit for time and
> #   for model level. You have to define it (hPa in my case)
> # - Longitude vector
> nclon  = ncf.createVariable('longitude','f',('longitude',))
> setattr(nclon,'long_name','longitude')
> setattr(nclon,'units','degrees_east')
> # - Latitude vector
> nclat  = ncf.createVariable('latitude','f',('latitude',))
> setattr(nclat,'long_name','latitude')
> setattr(nclat,'units','degrees_north')
> # - Level vector
> nclev  = ncf.createVariable('levelist','f',('levelist',))
> setattr(nclev,'long_name','model_level_number')
> setattr(nclev,'units','hPa')
> # - Time.
> nctime = ncf.createVariable('time','f',('time',))
> setattr(nctime,'long_name','time')
> # - Setting those variables
> print "* Write long, lat, levelist and time to nc file"
> nclon[:]  = longitude;
> nclat[:]  = latitude;
> nclev[:]  = np.array( unique_levels );
> nctime[:] = np.array( unique_times );
> 
> 
> 
> # - Now all the dimensions are defined and you can
> #   create your data variables now. First: define
> #   variable with sutable dimension.
> #   It is possible to mix fields (i am using a few
> #   with long/lat/time only and others with
> #   long/lat/level/time. But either all levels are
> #   in there or just one. I guess it is not possible
> #   to define different numbers of vertical levels
> #   for every single variable.
> 
> # - As an example: create one variable and
> #   store data into it. In this case i am creating
> #   a variable with all 4 dimensions. So the "data"
> #   variable i store at the end has to have the
> #   same dimension
> ncvar   =  
> ncf.createVariable(str(var),'f',('latitude','longitude','levelist','time'))
> setattr(ncvar,'_FillValue',0.)
> setattr(ncvar,'missing_value',-999.)
> setattr(ncvar,'add_offset','0')
> setattr(ncvar,'long_name',str(nc_desc[var]))
> setattr(ncvar,'scale_factor',1.)
> setattr(ncvar,'units','scaled radiance')
> ncvar[:] = np.int32(data)
> 
> # - Syncing netcdf file (write)"
> ncf.sync();
> 
> # - Close netcdf file"
> ncf.close();
> 
> 
> Probably it is getting a little bit more transparent for you. I am  
> using the pupynere package (pure python netcdf reader) but in newer  
> scipy versions it is allready included (scipy.netcdf i guess).
> 
> As checklist
> - define variables (with attributes for time or levels!)
> - u dont need a vertical dimension when you only have "surface" fields  
> (2-d-fields)
> - store dimension values into created dimensions
> - create variable (2,3,4-dimensional?
> - store data with same size into that
> - write all the stuff into the netcdf file
> 
> Greets from Austria
> Reto
> 
> 
> Zitat von Kishore Babu <kishoreragi at gmail.com>:
> 
>> Dear GrADS users,
>> 
>> Could anyone tell me how to pack the netcdf data? I do understand
>> scale_factor and add_offset , but I don't know how to do with them.
>> 
>> help will greatly save my time to do that. I have already spent a lot of
>> time to do that...
>> 
>> 
>> Thank you in advance,
>> 
>> Kishore
>> 
> 
> 
> _______________________________________________
> gradsusr mailing list
> gradsusr at gradsusr.org
> http://gradsusr.org/mailman/listinfo/gradsusr

--
Dr. Christopher Lynnes     NASA/GSFC, Code 610.2    phone: 301-614-5185






More information about the gradsusr mailing list