[ncl-talk] writing netCDF file

Dipti Sharma sdipti596 at gmail.com
Wed Aug 2 19:36:19 MDT 2017


Mary,

Yes. It worked. Thank you so much for your help.

Dipti

On Wed, Aug 2, 2017 at 5:51 PM, Mary Haley <haley at ucar.edu> wrote:

> The reason all your metadata is stripped from the file is because you are
> writing the variables to the file with:
>
> ncdf->time= (/time/)
> ncdf->lev=  (/lev/)
> ncdf->data2=(/dataf/)
> ncdf->data3=(/pv/)
> ncdf->data6=(/hm/)
>
> When you use (/.../) around a variable, this strips off all the metadata.
> Remove the (/.../)
>
> ncdf->time  = time
> ncdf->lev   = lev
> ncdf->data2 = dataf
> ncdf->data3 = pv
> ncdf->data6 = hm
>
> I should point out, however, that this is what we call the "inefficient"
> method of writing data to a NetCDF file. This method is just fine as long
> as you don't have a lot of data to write to the file. If you need to write
> a lot of variables to a file, or really large variables to a file, then you
> may benefit from using the "efficient" method.  Please see:
>
> http://www.ncl.ucar.edu/Applications/o-netcdf.shtml
>
> where it discusses "method 1" and "method 2".
>
> --Mary
>
> On Mon, Jul 31, 2017 at 8:06 PM, Dipti Sharma <sdipti596 at gmail.com> wrote:
>
>> Hi Mary,
>>
>> Thank you for your response. Sorry I could not respond you back earlier
>> but I was away for couple of weeks. I ran the code by implementing your
>> suggestion but it still did not solve the issue. I made the changes as you
>> suggested as.given below (attached) and created netcdf file has very weird
>> metadata structure. ncl11, ncl12, ncl13, ....(attached at the end).
>>
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>>
>> ; setfileoption("nc", "FileStructure", "Advanced")
>>
>> fn = "C:\Users\Downloads\Newfolder\MERRA2_200.inst3_3d_asm_Nv.199
>> 50203.nc4"
>> fn1 = "C:\Users\Downloads\Newfolder\MERRA2_200.inst3_3d_gas_Nv.199
>> 50203.nc4"
>>
>>  fi = addfile(fn, "r")
>> fi1= addfile(fn1, "r")
>>
>> ; setfileoption("nc", "Format",  "NetCDF4Classic")
>>
>>  printVarSummary(fi)
>> ;print(fi)
>>  time = fi->time
>>  lev = fi->lev
>>  lat = fi->lat
>>  lon = fi->lon
>>  h = fi->H
>>  ;u = fi->U;(:,:,264,108)
>> ; v = fi->V;(:,:,264,108)
>>  w=fi->OMEGA;(:,:,264,108)
>>  p=fi->PL;(:,:,264,108)
>> den=fi1->AIRDENS;(:,:,264,108)
>> hm=h(:,:,264,108)
>> ;uh=u(:,:,264,108)
>> ;uv=v(:,:,264,108)
>> wv=w(:,:,264,108)
>> pv=p(:,:,264,108)
>> denv=den(:,:,264,108)
>> ;printVarSummary(u)
>> printVarSummary(denv)
>> printVarSummary(wv)
>> printMinMax(wv,True)
>> wv!0="time"
>> wv!1="lev"
>> wv&time=time
>> wv&lev=lev
>> denv!0="time"
>> denv!1="lev"
>> denv&time=time
>> denv&lev=lev
>> n=dimsizes(wv)
>> n1=dimsizes(time)
>> n2=dimsizes(lev)
>> ;wc=new((/n1,n2/),"float")
>> ;do i=0,n1-1
>> ;wc(i,:)=wv(i,:)/(-9.8*denv(i,:))
>> ;end do
>> ;wc=wv
>> ;wc=(wv(time|:,lev|:)/(-9.8*denv(time|:,lev|:)))
>> wc=(wv/(-9.8*denv))
>> copy_VarMeta(wv,wc)
>> printMinMax(wc,True)
>> ;newlat=lat(108)
>> ;newlon=lon(264)
>> wc!0="time"
>> wc!1="lev"
>> wc&time=time
>> wc&lev=lev
>> printVarSummary(wc)
>> dataf = wc
>> ;dataf = newdatan(lon|:,lev|:,time|:,lat|:)
>> printVarSummary(dataf)
>> ;print(time)
>> ;return
>> ;Writeout new netCDF file
>> wc&time = time
>> wc&lev = lev
>> ;dataf!0="time"
>> ;dataf!1="lev"
>> ;dataf&time=time
>> ;dataf&lev=lev
>> ;wc&lat = newlat
>> ;wc&lon = newlon
>> ncdf=addfile("C:/Users/Downloads/Newfolder/MERRA_19950203nwww.nc","c")
>> dataf!0="time"
>> dataf!1="lev"
>> dataf&time=time
>> dataf&lev=lev
>> ncdf->time= (/time/)
>> ncdf->lev=  (/lev/)
>> ncdf->data2=(/dataf/)
>> ncdf->data3=(/pv/)
>> ;ncdf->data4=(/uv/)
>> ;ncdf->data5=(/uh/)
>> ncdf->data6=(/hm/)
>> return
>> ;return
>> ;printVarSummary(v)
>> return
>> ;print("t(0,0,0,0) = " + t(0,0,0,0))
>> ;print("u(0,1,1,1) = " + u(0,1,1,1))
>> ;print("v(0,2,2,2) = " + v(0,2,2,2))
>> ;print("t&lat(0) = " + t&lat(0))
>> ;print("t at units = " + t at units)
>> ;print("u at units = " + u at units)
>> ;print("v at units = " + v at units)
>> ;u1 = fi->U(::2)
>> ;v1 = fi->V(3:121:3)
>>  ;;g1 = fi=>/grp1
>>  ;;print(g1)
>>  ;;printVarSummary(g1)
>> ;exit
>>  ;;uf = fi->V
>>  ;;wks  = gsn_open_wks("x11", "xy")
>>
>> ;; res              = True
>>  ;;res at tiMainString = "Basic plot"
>>
>>  ;;plot1 = gsn_csm_contour(wks, uf(0,0,:,:), False)
>>
>>  ;;ug = g1->V
>>
>>  ;;plot2 = gsn_csm_contour(wks, ug(0,0,:,:), False)
>> ;;return
>> ;end
>>
>> The NetCDF file I created has the metadata as below,
>>
>> netcdf file:/C:/Users/Downloads/Newfolder/MERRA_19950203nwww.nc {
>>   dimensions:
>>     ncl0 = 8;
>>     ncl1 = 72;
>>     ncl2 = 8;
>>     ncl3 = 72;
>>     ncl4 = 8;
>>     ncl5 = 72;
>>     ncl6 = 8;
>>     ncl7 = 72;
>>   variables:
>>     int time(ncl0=8);
>>
>>     double lev(ncl1=72);
>>
>>     float data2(ncl2=8, ncl3=72);
>>
>>     float data3(ncl4=8, ncl5=72);
>>
>>     float data6(ncl6=8, ncl7=72);
>>
>> }
>>
>> Thanks again.
>>
>> Dipti
>>
>>
>> On Mon, Jul 17, 2017 at 12:34 AM, Mary Haley <haley at ucar.edu> wrote:
>>
>>> Dear Dipti,
>>>
>>> I'm sorry, but I missed that you had a second question imbedded in this
>>> email.
>>>
>>> Were you able to get the metadata added to "wc"?
>>>
>>> The reason it doesn't have metadata like "var" is because when you do a
>>> calculation and assign it to a variable that doesn't exist:
>>>
>>> wc=(wv/(-9.8*denv))
>>>
>>> then "wc" will not inherit any metadata from wv or denv except the
>>> _FillValue attribute.
>>>
>>> In order to get metadata, you either need to do a direct variable copy
>>> first, so that "wc" gets metadata before doing the calculation:
>>>
>>> wc=wv   ; Trick to copy metadata from wv to wc (values also get copied)
>>> wc=(wc/(-9.8*denv))
>>>
>>> or you can use copy_VarMeta:
>>>
>>> wc=(wv/(-9.8*denv))
>>> copy_VarMeta(wv,wc)   ; copy wv's metadata to wc
>>>
>>> In either case, you should update the long_name/standard_name and units
>>> attributes of wc to correctly reflect what they are.
>>>
>>> --Mary
>>>
>>>
>>>
>>> On Thu, Jun 29, 2017 at 5:12 PM, Dipti Sharma <sdipti596 at gmail.com>
>>> wrote:
>>>
>>>> Hi Mary,
>>>>
>>>> Thank you. It worked now. I also made file name little shorter then
>>>> that worked.
>>>>
>>>> ncdf=addfile("/Users/Downloads/New\ folder/MERRA_19950830.nc","c")
>>>> but one thing, when I do printVarSummay(var) I get the var info with
>>>> 2dimensions
>>>>
>>>> Number of Dimensions: 2
>>>> Dimensions and sizes:   [time | 8] x [lev | 72]
>>>> Coordinates:
>>>>             time: [0..1260]
>>>>             lev: [   1..  72]
>>>> Number Of Attributes: 13
>>>>   lon : -112.5
>>>>   lat :   42
>>>>   valid_range : ( -1e+15, 1e+15 )
>>>>   vmin :        -1e+15
>>>>   vmax :        1e+15
>>>>   standard_name :       air_density
>>>>   add_offset :   0
>>>>   scale_factor :         1
>>>>   fmissing_value :      1e+15
>>>>   missing_value :       1e+15
>>>>   _FillValue :  1e+15
>>>>   units :       kg m-3
>>>>
>>>> But for wc, when I do printVarSummay(wc)
>>>> Variable: wc
>>>> Type: float
>>>> Total Size: 2304 bytes
>>>>             576 values
>>>> Number of Dimensions: 2
>>>> Dimensions and sizes:   [8] x [72]; There is different format so how to
>>>> get this like ' [time | 8] x [lev | 72]'?
>>>>
>>>> Coordinates:
>>>> Number Of Attributes: 1
>>>>   _FillValue :  1e+15
>>>> (0)
>>>> (0)     min=-0.0658635   max=0.0909946
>>>>
>>>> ALSO, my necdf file is not looking with correct attributes,
>>>>
>>>> netcdf file:/C:/Users/Downloads/New%20folder/MERRA2_19950830.nc {
>>>>   dimensions:
>>>>     ncl0 = 8; should be time=8;
>>>>     ncl1 = 72;lev=72; etc.
>>>>     ncl2 = 8;
>>>>     ncl3 = 72;
>>>>   variables:
>>>>     int time(ncl0=8);
>>>>
>>>>     double lev(ncl1=72);
>>>>
>>>>     float data2(ncl2=8, ncl3=72);
>>>>
>>>> }
>>>>
>>>>
>>>> Thank you so much again.
>>>>
>>>> Dipti
>>>>
>>>>
>>>>
>>>> On Thu, Jun 29, 2017 at 11:49 AM, Mary Haley <haley at ucar.edu> wrote:
>>>>
>>>>> Hi Dipti,
>>>>>
>>>>> I'm not sure that addfile can recognize Windows type of directory
>>>>> paths with "C:\....".
>>>>>
>>>>> Try using UNIX-style paths:
>>>>>
>>>>> ncdf=addfile("/Users/Downloads/New\ folder/MERRA2_200.inst3_3d_asm
>>>>> _Nv.19950830.nc <http://merra2_200.inst3_3d_asm_nv.19950830.nc/>","c")
>>>>>
>>>>> Note that I used forward slashes ('/') instead of backward slashes
>>>>> ('\').  However, since you have a space in one of your directory
>>>>> names----"New folder"---I put a backward slash in front of the space, just
>>>>> in case.
>>>>>
>>>>> --Mary
>>>>>
>>>>>
>>>>> On Wed, Jun 28, 2017 at 5:55 PM, Dipti Sharma <sdipti596 at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Dear NCL,
>>>>>>
>>>>>> I am trying to write netCDF file for selected variable (wc, the
>>>>>> vertical velocity here in this example) from MERRA-2 wind data. However, I
>>>>>> always get an error message saying that
>>>>>>  " fatal:Could not create (C:\Users\Downloads\New folder\
>>>>>> MERRA2_200.inst3_3d_asm_Nv.19950830.nc)
>>>>>>
>>>>>> Could someone please help me how to write the output file in netCDF.
>>>>>> I want to have wc (time,lev) 2D data from 4D (time, lev,lat,lon). I just
>>>>>> want the data at 1 location (1 lat and 1 lon).
>>>>>>
>>>>>> Thank you very much in advance for your help.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Dipti
>>>>>>
>>>>>> Attached is the script that I used to read the data.
>>>>>>
>>>>>>
>>>>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>>>>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>>>>>>
>>>>>> ; setfileoption("nc", "FileStructure", "Advanced")
>>>>>>
>>>>>> fn = "C:\Users\Downloads\New folder\MERRA2_200.inst3_3d_asm
>>>>>> _Nv.19950830.nc4"
>>>>>> fn1 = "C:\Users\Downloads\New folder\MERRA2_200.inst3_3d_gas
>>>>>> _Nv.19950830.nc4"
>>>>>>
>>>>>>  fi = addfile(fn, "r")
>>>>>> fi1= addfile(fn1, "r")
>>>>>>
>>>>>> ; setfileoption("nc", "Format",  "NetCDF4Classic")
>>>>>>
>>>>>>  printVarSummary(fi)
>>>>>> ;print(fi)
>>>>>>
>>>>>>  time = fi->time
>>>>>>  lev = fi->lev
>>>>>>  lat = fi->lat
>>>>>>  lon = fi->lon
>>>>>>  u = fi->U;(:,:,269,101)
>>>>>>  v = fi->V;(:,:,269,101)
>>>>>>  w=fi->OMEGA;(:,:,269,101)
>>>>>>  p=fi->PL;(:,:,269,101)
>>>>>> den=fi1->AIRDENS;(:,:,269,101)
>>>>>> uh=u(:,:,269,101)
>>>>>> uv=v(:,:,269,101)
>>>>>> wv=w(:,:,269,101)
>>>>>> pv=PL(:,:,269,101)
>>>>>> denv=den(:,:,269,101)
>>>>>> ;printVarSummary(u)
>>>>>> printVarSummary(denv)
>>>>>> printVarSummary(wv)
>>>>>> printMinMax(wv,True)
>>>>>> ;calculate vertical velocity
>>>>>> wc=(wv/(-9.8*denv))
>>>>>> printVarSummary(wc)
>>>>>> printMinMax(wc,True)
>>>>>> wc!0="time"
>>>>>> wc!1="lev"
>>>>>> ;wc!2="lat"
>>>>>> ;wc!3="lon"
>>>>>> datad = wc;(time|:,lev|:)
>>>>>> printVarSummary(datad)
>>>>>>
>>>>>> ;Writeout new netCDF file
>>>>>>
>>>>>> wc&time = time
>>>>>> wc&lev = lev
>>>>>> ncdf=addfile("C:\Users\Downloads\New folder\MERRA2_200.inst3_3d_asm
>>>>>> _Nv.19950830.nc","c")
>>>>>> ncdf->time= (/time/)
>>>>>> ncdf->lev=  (/lev/)
>>>>>> ncdf->data=(/datad/)
>>>>>> return
>>>>>> end
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> 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/20170802/4ecbf3b9/attachment.html 


More information about the ncl-talk mailing list