I need some guidance as to how to properly consolidate a time series of
temperature grids into a single netcdf file.
Not sure what I'm doing wrong here, printing the ncdf_out at the end shows
only 1 item in the time dimension. Doesn't matter if I place the following
code in the do loop or after it. I don't know how to associate the grid
with the time array and I couldn't understand how this should be done.
Also, the model I'm working with needs data to be dimensioned as: y,x,time.
Variable: ncdf_out
Type: file
filename: test
path: ./test.nc
file global attributes:
title : Temperature Data: degC
source : NLDAS Forcing2 - hourly
creation_date : Fri Mar 14 14:01:28 MDT 2014
dimensions:
lat = 19
lon = 17
time = 1
variables:
float lat ( lat )
float lon ( lon )
float time ( time )
float TEMP ( lat, lon, time )
_FillValue : 9.96921e+36
Many thanks in advance for your help,
john
Here's my code:
;**************************************************
begin
ncfiles=systemfunc("ls *.nc")
if(dimsizes(ncfiles) .gt. 0) then
system("rm *.nc") ;remove any pre-existing file
end if
;specify extent
latN=42.852
latS=40.500
lonL=-112.620
lonR=-110.480
cmd="ls *.grb"
grbFiles=systemfunc(cmd)
nfiles=dimsizes(grbFiles)
;create time var
;should be 'hours since 2010-10-01T00.00
;time should be provided as floating numbers
start=str_split(grbFiles(0),".")
year=str_get_cols(start(1), 1, 4)
month=str_get_cols(start(1), 5, 6)
day=str_get_cols(start(1), 7, 8)
hour=str_get_cols(start(2),0,1)
time = fspan(0,nfiles,1)
time!0 = "time"
time@units = "hours since "+year+"-"+month+"-"+day+"T00.00"
time&time = time
timec=tocharacter(time)
;print(time)
;create and define the output file
ncdf_out = addfile("./test.nc" ,"c")
ncdf_out@title="Temperature Data: degC"
ncdf_out@source="NLDAS Forcing2 - hourly"
ncdf_out@creation_date = systemfunc ("date")
setfileoption(ncdf_out,"DefineMode",True)
;get dimensions and setup file
g=addfile(grbFiles(0),"r")
l=g->lat_110
lat=l({latS:latN})
lat!0="lat"
lon=g->lon_110({lonL:lonR})
lon!0="lon"
nlat=dimsizes(lat)
nlon=dimsizes(lon)
dimNames = (/"lat","lon","time"/)
dimSizes = (/nlat,nlon,dimsizes(time)/)
dimUnlim = (/False,False,False/)
filedimdef(ncdf_out,dimNames,dimSizes,dimUnlim)
;setup the variable
t=g->TMP_110_HTGL
tc = new((/nlat,nlon,dimsizes(time)/), float)
tc!0="lat"
tc!1="lon"
tc!2="time"
tc&time=time
tc&lat=lat
tc&lon=lon
tc@sub_center=t@sub_center
tc@center=t@center
tc@long_name=t@long_name
tc@units="degC"
tc@level_indicator=t@level_indicator
tc@gds_grid_type=t@gds_grid_type
tc@parameter_table_version=t@parameter_table_version
tc@parameter_number=t@parameter_number
tc@model=t@model
tc@level=t@level
;setup file variables
filevardef(ncdf_out, "lat" ,typeof(lat),getvardims(lat))
filevardef(ncdf_out, "lon" ,typeof(lon),getvardims(lon))
filevardef(ncdf_out, "time" ,typeof(time),getvardims(time))
filevardef(ncdf_out, "TEMP" ,typeof(tc) ,getvardims(tc))
; loop through the files and process
do n = 0, nfiles-1
g=addfile(grbFiles(n),"r")
;do the conversions and add to ncdf_out
; TEMPERATURE
t=g->TMP_110_HTGL
tc=t({latS:latN},{lonL:lonR})-273.15
;tc(,,n)=t({latS:latN},{lonL:lonR})-273.15
;this spot reserved for regridding to higher resolution
;ncdf_out->TEMP=(/tc/)
tc!0="lat"
tc!1="lon"
tc!2="time"
tc&lat=lat
tc&lon=lon
tc&time=time
end do
ncdf_out->TEMP=(/tc/)
print(ncdf_out)
end
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Fri Mar 14 14:15:41 2014
This archive was generated by hypermail 2.1.8 : Fri Mar 21 2014 - 15:49:21 MDT