[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