[ncl-talk] writing netCDF file

Dipti Sharma sdipti596 at gmail.com
Mon Jul 31 20:06:30 MDT 2017


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.19950203.nc4"
fn1 = "C:\Users\Downloads\Newfolder\MERRA2_200.inst3_3d_gas_Nv.19950203.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/20170731/bf87538d/attachment.html 


More information about the ncl-talk mailing list