NCL Home>
Application examples>
File IO ||
Data files for some examples
Below is a script which demonstrates how to write NetCDF4 data with group.
Use "ncl_filedump nc4_out_nc4uvt.nc" to check what is in the data file.
Example pages containing:
tips |
resources |
functions/procedures
>
write netCDF
NCL: Write netCDF4 data with groups
Below is a script which demonstrates how to write NetCDF4 data with group.
setfileoption("nc", "Format", "NetCDF4")
fn = "nc4uvt.nc"
fi = addfile(fn, "r")
;printVarSummary(fi)
;print(fi)
time = fi->time
lev = fi->lev
lat = fi->lat
lon = fi->lon
t = fi->T
u = fi->U
v = fi->V
;printVarSummary(t)
;printVarSummary(u)
;printVarSummary(v)
;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@units = " + t@units)
;print("u@units = " + u@units)
;print("v@units = " + v@units)
;u1 = fi->U(::2)
;v1 = fi->V(3:121:3)
ntim = dimsizes(time) ; get dimension sizes
nlev = dimsizes(lev)
nlat = dimsizes(lat)
nlon = dimsizes(lon)
;------------------------------------------------------------
setfileoption("nc", "Format", "NetCDF4")
fon = "nc4_out_" + fn
system("/bin/rm -f " + fon) ; remove if exists
fo = addfile(fon, "c")
;===================================================================
; explicitly declare file definition mode. Improve efficiency.
;===================================================================
setfileoption(fo,"DefineMode",True)
;setfileoption(fo,"CompressionLevel", 6)
;setfileoption(fo,"CacheSize", 3200000)
;setfileoption(fo,"CacheNelems", 1027)
;setfileoption(fo,"CachePreemption", 0.25)
; create global attributes of the file
;===================================================================
fAtt = True ; assign file attributes
fAtt@title = "NCL generated netCDF file"
fAtt@source_file = fn
fAtt@Conventions = "None"
;fAtt@creation_date = systemfunc ("date")
fileattdef(fo, fAtt) ; copy file attributes
;===================================================================
; predefine the coordinate variables and their dimensionality
; Note: to get an UNLIMITED record dimension, we set the dimensionality
; to -1 (or the actual size) and set the dimension name to True.
;===================================================================
dimNames = (/"time", "lev", "lat", "lon"/)
dimSizes = (/ 1 , nlev, nlat, nlon /)
dimUnlim = (/ True , False, False, False/)
filedimdef(fo, dimNames, dimSizes, dimUnlim)
;===================================================================
mtim = 1
mlat = nlat/2
mlon = nlon/2
mlev = nlev/2
chunkSizes = (/ mtim, mlev, mlat, mlon /)
;dimUnlim(0) = False
filechunkdimdef(fo,dimNames,chunkSizes,dimUnlim)
;===================================================================
grpnames = (/"grp1", "group2", "g3"/)
filegrpdef(fo, grpnames)
; predefine the the dimensionality of the variables to be written out
;===================================================================
; Here we are using NCL functions to facilitate defining
; each variable's dimension name(s) and type.
;===================================================================
filevardef(fo, "time", typeof(time), getvardims(time))
filevarattdef(fo,"time", time) ; copy time attributes
fo->time = (/time/)
filevardef(fo, "lev", typeof(lev), getvardims(lev) )
filevarattdef(fo,"lev", lev) ; copy lev attributes
fo->lev = (/lev/)
filevardef(fo, "lat", typeof(lat), getvardims(lat))
filevarattdef(fo,"lat", lat) ; copy lat attributes
fo->lat = (/lat/)
filevardef(fo, "lon", typeof(lon), getvardims(lon))
filevarattdef(fo,"lon", lon) ; copy lon attributes
fo->lon = (/lon/)
filevardef(fo, "T", typeof(t), getvardims(t))
filevarattdef(fo,"T", t) ; copy T attributes
filevarchunkdef(fo, "T", chunkSizes)
filevarcompressleveldef(fo, "T", 2)
fo->T = (/t/)
;print(fo)
;printVarSummary(t)
;exit
filevardef(fo, "U", typeof(u), getvardims(u))
filevarattdef(fo,"U", u) ; copy U attributes
;filevarchunkdef(fo, "U", chunkSizes)
;filevarcompressleveldef(fo, "U", 4)
fo->U = (/u/)
filevardef(fo, "V", typeof(v), getvardims(v))
filevarattdef(fo,"V", v) ; copy V attributes
;filevarchunkdef(fo, "V", chunkSizes)
;filevarcompressleveldef(fo, "V", 6)
;filevarchunkcachedef(fo, "V", 3200000, 1027, 0.75)
fo->V = (/v/)
;===================================================================
g1 = fo=>/grp1
print(g1)
fileattdef(g1, fAtt)
filedimdef(g1, dimNames, dimSizes, dimUnlim)
filechunkdimdef(g1,dimNames,chunkSizes,dimUnlim)
filevardef(g1, "time", typeof(time), getvardims(time))
filevarattdef(g1,"time", time) ; copy time attributes
g1->time = (/time/)
filevardef(g1, "lev", typeof(lev), getvardims(lev) )
filevarattdef(g1,"lev", lev) ; copy lev attributes
g1->lev = (/lev/)
filevardef(g1, "lat", typeof(lat), getvardims(lat))
filevarattdef(g1,"lat", lat) ; copy lat attributes
g1->lat = (/lat/)
filevardef(g1, "lon", typeof(lon), getvardims(lon))
filevarattdef(g1,"lon", lon) ; copy lon attributes
g1->lon = (/lon/)
filevardef(g1, "T", typeof(t), getvardims(t))
filevarattdef(g1,"T", t) ; copy T attributes
filevarchunkdef(g1, "T", chunkSizes)
filevarcompressleveldef(g1, "T", 2)
g1->T = (/t/)
filevardef(g1, "U", typeof(u), getvardims(u))
filevarattdef(g1,"U", u) ; copy U attributes
;filevarchunkdef(g1, "U", chunkSizes)
;filevarcompressleveldef(g1, "U", 4)
g1->U = (/u/)
filevardef(g1, "V", typeof(v), getvardims(v))
filevarattdef(g1,"V", v) ; copy V attributes
;filevarchunkdef(g1, "V", chunkSizes)
;filevarcompressleveldef(g1, "V", 6)
;filevarchunkcachedef(g1, "V", 3200000, 1027, 0.75)
g1->V = (/v/)
;===================================================================
setfileoption(fo,"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.
;====================================================================
printVarSummary(g1)
;print(g1)
;exit
printVarSummary(fo)
;print(fo)
;to = fo->T
;uo = fo->U
;vo = fo->V
;printVarSummary(to)
;printVarSummary(uo)
;printVarSummary(vo)
;print("to(0,0,0,0) = " + to(0,0,0,0))
;print("uo(0,1,1,1) = " + uo(0,1,1,1))
;print("vo(0,2,2,2) = " + vo(0,2,2,2))
;print("to&lat(0) = " + to&lat(0))
;print("to@units = " + to@units)
;print("uo@units = " + uo@units)
;print("vo@units = " + vo@units)
Use "ncl_filedump nc4_out_nc4uvt.nc" to check what is in the data file.