Re: creating NETCDF file

From: David Brown <dbrown_at_nyahnyahspammersnyahnyah>
Date: Wed, 25 Jun 2008 12:08:22 -0600

I suspect that in addition to the problem that Dennis mentions you also
have a problem with the lat and lon coordinate variables.

The statement
lat=datafile!0
gives you the name of a dimension in the file, a variable of type
string, not the actual coordinate variable.

So when you later on try to execute the following:
filevardef(fout, "lat" ,typeof(lat),"lat")

you get an appropriate error message, because NetCDF (prior to
version 4.0) does not support the "string" type.

You could do the following (assuming the first dimension does
actually refer to the lat variable you want);

lat = datafile->$datafile!0$

Note: you would see the problem if you printed out the variables lat,
nlat, lon, and nlon.

  -dave

On Jun 25, 2008, at 11:40 AM, Dennis Shea wrote:

>
> You defined the variable on the file to be named "diab_heating"
>
> filevardef(fout, "diab_heating" ,typeof(diab_heating) ,
> (/"time","lat","lon"/))
>
> but you wrote it to the file via
>
> fout->T = (/diab_heating/)
>
> change to
> fout->diab_heating = (/diab_heating/)
>
> ==============================
> The netCDF operators ncrcat and ncrename could be used also.
>
> Good luck
>
>
> aude Valade wrote:
>>
>> Hi,
>> I am trying to create NETCDF files from other NETCDF files I
>> already have. I am trying to use the example from the website
>> (efiicient approach for netcdf output) but I get the error message:
>>
>> fatal: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: Error occurred at or near line 80 in file
>> edit_file.ncl
>>
>>
>> Below is the complete code.
>> thank you
>>
>> *********************************************************************
>> ********
>>
>>
>> begin
>>
>> ;do year=
>> ;do month=
>> ;do day=
>> ;do hour=
>>
>> ;filename=2008010100 ;example for testing purposes
>> ;*********************LOOP ON FILES****************************
>> setfileoption("nc","DefineMode",True)
>> ;===================================================================
>> ;Read files
>> ;================================================================
>> ===
>> datafile=addfile("./NETCDF2m25/allyear_VAR_218/
>> fcst_phy2m25.1979010100.nc <http://fcst_phy2m25.1979010100.nc>", "r")
>> lat=datafile!0
>> lon=datafile!1
>> diab_heating=datafile->VAR_218_GDS0_SFC_acc6h
>> time=diab_heating_at_initial_time
>>
>> ;================================================================
>> ===
>> ; Assume variables T, PS and ORO exist and that they have
>> ; associated meta data: (a) coordinate variables time, lev,
>> lat, lon
>> ; and (b) attributes
>> ;================================================================
>> ===
>> ntim = dimsizes(time) ; get dimension sizes
>> nlat = dimsizes(lat)
>>
>> nlon = dimsizes(lon)
>>
>> diro = "./NETCDF2m25/
>> allyear_VAR_218_edited/" ; Output directory
>> ; filo = "fcst_phy2m25."+filename+".nc" ;
>> Output file
>> filo = "fcst_phy2m25.1979010100.nc <http://
>> fcst_phy2m25.1979010100.nc>"
>> system("/bin/rm -f " + diro + filo) ; remove if exists
>> fout = addfile (diro + filo, "c") ; open output file
>>
>> ;================================================================
>> ===
>> ; explicitly declare file definition mode. Improve efficiency.
>> ;================================================================
>> ===
>> setfileoption(fout,"DefineMode",True)
>>
>> ;================================================================
>> ===
>> ; create global attributes of the file
>> ;================================================================
>> ===
>> fAtt = True ; assign file attributes
>> fAtt_at_title = "NCL Efficient Approach to netCDF
>> Creation"
>> fAtt@source_file = "original-file.nc <http://original-
>> file.nc>"
>> fAtt_at_Conventions = "None"
>> fAtt_at_creation_date = systemfunc ("date")
>> fileattdef( fout, fAtt ) ; copy file attributes
>> ;================================================================
>> ===
>> ; predefine the coordinate variables and their dimensionality
>> ; note: to get an UNLIMITED record dimension, we set the
>> dimensionality
>> ; to -1 and set the unlimited array to True.
>> ;================================================================
>> ===
>> dimNames = (/"time", "lat", "lon"/)
>> dimSizes = (/ -1 , nlat, nlon /)
>> dimUnlim = (/ True , False, False/)
>> filedimdef(fout,dimNames,dimSizes,dimUnlim)
>>
>> ;================================================================
>> ===
>> ; predefine the the dimensionality of the variables to be
>> written out
>> ; filevardef(output_file, name of variable, type of variable,
>> CV's of
>> ; variable) note: at this point, when you do an ncdump on the
>> file, it
>> ; will look like the variable is there. If you do not output
>> the values,
>> ; however, then an ncdump -v xxx will reveal that there is no
>> data.
>> ;================================================================
>> ===
>> ; Here we are explicitly defining the variable's dimension name
>> (s).
>> ; However, the following could be replaced with:
>> ; filevardef(fout, "time" ,typeof(time),getvardims(time))
>> ;================================================================
>> ==
>> ;================================================================
>> ===
>> filevardef(fout, "time" ,typeof(time),"time")
>> filevardef(fout, "lat" ,typeof(lat),"lat")
>> filevardef(fout, "lon" ,typeof(lon),"lon")
>> filevardef(fout, "diab_heating" ,typeof(diab_heating) ,
>> (/"time","lat","lon"/))
>>
>> ;================================================================
>> ===
>> ; Copy attributes associated with each variable to the file
>> ; All attributes associated with each variable will be copied.
>> ;================================================================
>> ====
>> filevarattdef(fout,"diab_heating",diab_heating) ; copy
>> diab_heating attributes
>> filevarattdef(fout,"time",time) ; copy
>> time attributes
>> filevarattdef(fout,"lat",lat) ; copy
>> lat attributes
>> filevarattdef(fout,"lon",lon) ; copy
>> lon attributes
>>
>> ;================================================================
>> ===
>> ; explicitly exit file definition mode. **NOT REQUIRED**
>> ;================================================================
>> ===
>> setfileoption(fout,"DefineMode",False)
>>
>> ;================================================================
>> ===
>> ; output only the data values since the dimensionality and
>> such have
>> ; been predefined. The "(/", "/)" syntax tells NCL to only
>> output the
>> ; data values to the predefined locations on the file.
>> ;================================================================
>> ====
>> fout->time = (/time/)
>> fout->lat = (/lat/)
>> fout->lon = (/lon/)
>> fout->T = (/diab_heating/)
>>
>>
>>
>> ;end do
>> ;end do
>> ;end do
>> ;end do
>>
>> end
>>
>>
>>
>> ---------------------------------------------------------------------
>> ---
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk_at_ucar.edu
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>
>
> --
> ======================================================
> Dennis J. Shea tel: 303-497-1361 |
> P.O. Box 3000 fax: 303-497-1333 |
> Climate Analysis Section |
> Climate & Global Dynamics Div. |
> National Center for Atmospheric Research |
> Boulder, CO 80307 |
> USA email: shea 'at' ucar.edu |
> ======================================================
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk_at_ucar.edu
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_______________________________________________
ncl-talk mailing list
ncl-talk_at_ucar.edu
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Wed Jun 25 2008 - 12:08:22 MDT

This archive was generated by hypermail 2.2.0 : Thu Jun 26 2008 - 16:29:43 MDT