[ncl-talk] ut_inv_calendar
jorge.conrado at cptec.inpe.br
jorge.conrado at cptec.inpe.br
Fri Feb 27 05:58:05 MST 2015
Hi,
I don't have experience with the NCL and I downloaded a script
(IR_download_and_crop.ncl) in the Web to download images from the ftp
address:
ftp://disc2.nascom.nasa.gov/data/s4pa/TRMM_ANCILLARY/MERG/
This the script:
;########## IR_download_and_crop.ncl #############
;# This program downloads data from the NASA Merged IR database and crops to
;# the specified region and time period. A NETCDF file of the data is made
;# and the orignial fortran binary data is deleted.
;# 1. Set inital variables
;# 2. Read in 5 days of data over W. Africa write to NETCDF at 4km, 30 min
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/skewt_func.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
begin
;######## SET INITIAL VARS ########
;# Reference information for the Merged IR Dataset
;# For 2006...
;# Jul begins on day 182 and ends on 212
;# Aug begins on day 213 and ends on 243
;# Sep begins on day 244 and ends on 273
;# Set intital string variables
hr=(/"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"/)
day_31=(/"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"/)
day_30=(/"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"/)
time_array=new((/240/),"double")
time_array at units = "hours ref 1-1-1 00:00:0.0"
;# For the July brightness temp. array a byte array is storred to
reduce memory requirements and storage space.
;# Convert to another data type and add 75.
tb_array=new((/240,825,1925/),"float")
;######## Begin the time loop ########
beg=15
do day_ind=0,4
do hr_ind=0,23
file_name_download =
"ftp://disc2.nascom.nasa.gov/data/s4pa/TRMM_ANCILLARY/MERG/2006/"+(beg+day_ind+182)+"/merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel.Z"
system("wget "+file_name_download)
;####### READ THE FORTRAN BINARY ##############
file_name_read_zip =
"merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel.Z"
file_name_read = "merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel"
print(file_name_read)
system("gunzip "+file_name_read_zip)
;# Set Fortran read options
setfileoption("bin","ReadByteOrder","LittleEndian")
ir_temp = byte2flt(fbindirread (file_name_read ,0,
(/2,3298,9896/),"byte"))+75.
system("rm -f "+file_name_read)
;######## CROP THE IR GRID FOR WEST AFR #######
;# LARGE: 319.998E(8795)-59.97576E(1648),40.0013N(549)-19.9772S(2197)
;# LIMIT: 334.9874E(9207)-44.98637E(1236),25.00667N(961)-4.982578S(1785)
lon=fspan(0.0182,0.0182+0.036378335*9896,9896)
lat=fspan(59.982,59.982-0.036383683*3298,3298)
lon at units = "degrees-east"
lat at units = "degrees-north"
ir_temp!2 = "lon"
ir_temp!1 = "lat"
ir_temp!0 = "time"
ir_temp_re_0=new((/825,1925/),"float")
ir_temp_re_1=new((/825,1925/),"float")
ir_temp_re_0(:,:687)=ir_temp(lat|961:1785,lon|9207:9894,time|0)
ir_temp_re_0(:,688:)=ir_temp(lat|961:1785,lon|:1236,time|0)
ir_temp_re_1(:,:687)=ir_temp(lat|961:1785,lon|9207:9894,time|1)
ir_temp_re_1(:,688:)=ir_temp(lat|961:1785,lon|:1236,time|1)
lon_out = new((/1925/),"float")
lon_out(:687)=lon(9207:9894)
lon_out(688:)=lon(0:1236)
lat_out = lat(961:1785)
;########## PLACE IN ARRAY #######
tb_array(48*day_ind+hr_ind*2,:,:)=ir_temp_re_0 ;# First half hour
tb_array(48*day_ind+hr_ind*2+1,:,:)=ir_temp_re_1 ;# Second half hour
;########## SET THE TIMES ########
time_array(48*day_ind+hr_ind*2) =
ut_inv_calendar(2006,7,beg+day_ind+1,hr_ind+1,0,0,time_array at units, 0)
time_array(48*day_ind+hr_ind*2+1) =
ut_inv_calendar(2006,7,beg+day_ind+1,hr_ind+1,30,0,time_array at units, 0)
end do
end do
;######## CREATE THE NETCDF FILE ########
ntim = 240
nlat = 825
nlon = 1925
diro = "./" ; Output directory
filo = "ir_test_jul_16_to_jul_20.nc" ; Output file
system("/bin/rm -f " + diro + filo) ; remove if exists
fout = addfile (diro + filo, "c") ; open output file
;===================================================================
; explicitly declare file definition mode. Improve efficiency.
;===================================================================
setfileoption(fout,"DefineMode",True)
;===================================================================
; create global attributes of the file
;===================================================================
fAtt = True ; assign file attributes
fAtt at title = "NCL Efficient Approach to netCDF Creation"
fAtt at source_file = "original-file.nc"
fAtt at Conventions = "None"
fAtt at creation_date = systemfunc ("date")
fileattdef( fout, 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", "lat", "lon"/)
dimSizes = (/ -1 , nlat, nlon/)
dimUnlim = (/ True , False, False/)
filedimdef(fout,dimNames,dimSizes,dimUnlim)
;===================================================================
; 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.
; The following could be replaced with explicit, user defined dimension
; names different from those associated with the variable in memory.
; Say, PS(time,lat,lon) in the NCL script. They could be redefined for
the file via:
; filevardef(fout, "PS" ,typeof(PS) ,(/"TIME","latitude","longitude"/))
;===================================================================
filevardef(fout, "time" ,(/"double"/),(/"time"/))
filevardef(fout, "lat" ,(/"float"/),(/"lat"/))
filevardef(fout, "lon" ,(/"float"/),(/"lon"/))
filevardef(fout, "TB" ,(/"float"/),(/"time","lat","lon"/))
;===================================================================
; Copy attributes associated with each variable to the file
; All attributes associated with each variable will be copied.
;====================================================================
filevarattdef(fout,"time" ,time_array) ; copy time attributes
filevarattdef(fout,"lat" ,lat_out) ; copy lat attributes
filevarattdef(fout,"lon" ,lon_out) ; copy lon attributes
filevarattdef(fout,"TB" ,tb_array) ; copy
PS attributes
;===================================================================
; explicitly exit file definition mode. **NOT REQUIRED**
;===================================================================
setfileoption(fout,"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.
;====================================================================
fout->time = (/time_array/)
fout->lat = (/lat_out/)
fout->lon = (/lon_out/)
fout->TB = (/tb_array/)
end
I run it and the script download the images, but this the line
time_array(48*day_ind+hr_ind*2) =
ut_inv_calendar(2006,7,beg+day_ind+1,hr_ind+1,0,0,time_array at units, 0)
time_array(48*day_ind+hr_ind*2+1) =
I had the message:
fatal:ut_inv_calendar: Invalid specification string
fatal:["Execute.c":8578]:Execute: Error occurred at or near line 103
in file IR_download_and_crop.ncl
I already change the ut_inv_calendar to cd_inv_calendar but I
had the same error.
fatal:Undefined identifier: (cv_inv_calendar) is undefined, can't continue
fatal:["Execute.c":8578]:Execute: Error occurred at or near line 103
in file IR_download_and_crop.ncl
fatal:ut_inv_calendar: Invalid specification string
fatal:["Execute.c":8578]:Execute: Error occurred at or near line 103
in file IR_download_and_crop.ncl
I don't know how can I solve this error.
Thank for all that help me with the question I asked yesterday.
Conrado
-------------- next part --------------
;########## IR_download_and_crop.ncl #############
;# This program downloads data from the NASA Merged IR database and crops to
;# the specified region and time period. A NETCDF file of the data is made
;# and the orignial fortran binary data is deleted.
;# 1. Set inital variables
;# 2. Read in 5 days of data over W. Africa write to NETCDF at 4km, 30 min
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/skewt_func.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
begin
;######## SET INITIAL VARS ########
;# Reference information for the Merged IR Dataset
;# For 2006...
;# Jul begins on day 182 and ends on 212
;# Aug begins on day 213 and ends on 243
;# Sep begins on day 244 and ends on 273
;# Set intital string variables
hr=(/"00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"/)
day_31=(/"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"/)
day_30=(/"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"/)
time_array=new((/240/),"double")
time_array at units = "hours ref 1-1-1 00:00:0.0"
;# For the July brightness temp. array a byte array is storred to reduce memory requirements and storage space.
;# Convert to another data type and add 75.
tb_array=new((/240,825,1925/),"float")
;######## Begin the time loop ########
beg=15
do day_ind=0,4
do hr_ind=0,23
file_name_download = "ftp://disc2.nascom.nasa.gov/data/s4pa/TRMM_ANCILLARY/MERG/2006/"+(beg+day_ind+182)+"/merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel.Z"
system("wget "+file_name_download)
;####### READ THE FORTRAN BINARY ##############
file_name_read_zip = "merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel.Z"
file_name_read = "merg_200607"+day_31(beg+day_ind)+hr(hr_ind)+"_4km-pixel"
print(file_name_read)
system("gunzip "+file_name_read_zip)
;# Set Fortran read options
setfileoption("bin","ReadByteOrder","LittleEndian")
ir_temp = byte2flt(fbindirread (file_name_read ,0, (/2,3298,9896/),"byte"))+75.
system("rm -f "+file_name_read)
;######## CROP THE IR GRID FOR WEST AFR #######
;# LARGE: 319.998E(8795)-59.97576E(1648),40.0013N(549)-19.9772S(2197)
;# LIMIT: 334.9874E(9207)-44.98637E(1236),25.00667N(961)-4.982578S(1785)
lon=fspan(0.0182,0.0182+0.036378335*9896,9896)
lat=fspan(59.982,59.982-0.036383683*3298,3298)
lon at units = "degrees-east"
lat at units = "degrees-north"
ir_temp!2 = "lon"
ir_temp!1 = "lat"
ir_temp!0 = "time"
ir_temp_re_0=new((/825,1925/),"float")
ir_temp_re_1=new((/825,1925/),"float")
ir_temp_re_0(:,:687)=ir_temp(lat|961:1785,lon|9207:9894,time|0)
ir_temp_re_0(:,688:)=ir_temp(lat|961:1785,lon|:1236,time|0)
ir_temp_re_1(:,:687)=ir_temp(lat|961:1785,lon|9207:9894,time|1)
ir_temp_re_1(:,688:)=ir_temp(lat|961:1785,lon|:1236,time|1)
lon_out = new((/1925/),"float")
lon_out(:687)=lon(9207:9894)
lon_out(688:)=lon(0:1236)
lat_out = lat(961:1785)
;########## PLACE IN ARRAY #######
tb_array(48*day_ind+hr_ind*2,:,:)=ir_temp_re_0 ;# First half hour
tb_array(48*day_ind+hr_ind*2+1,:,:)=ir_temp_re_1 ;# Second half hour
;########## SET THE TIMES ########
time_array(48*day_ind+hr_ind*2) = ut_inv_calendar(2006,7,beg+day_ind+1,hr_ind+1,0,0,time_array at units, 0)
time_array(48*day_ind+hr_ind*2+1) = ut_inv_calendar(2006,7,beg+day_ind+1,hr_ind+1,30,0,time_array at units, 0)
end do
end do
;######## CREATE THE NETCDF FILE ########
ntim = 240
nlat = 825
nlon = 1925
diro = "./" ; Output directory
filo = "ir_test_jul_16_to_jul_20.nc" ; Output file
system("/bin/rm -f " + diro + filo) ; remove if exists
fout = addfile (diro + filo, "c") ; open output file
;===================================================================
; explicitly declare file definition mode. Improve efficiency.
;===================================================================
setfileoption(fout,"DefineMode",True)
;===================================================================
; create global attributes of the file
;===================================================================
fAtt = True ; assign file attributes
fAtt at title = "NCL Efficient Approach to netCDF Creation"
fAtt at source_file = "original-file.nc"
fAtt at Conventions = "None"
fAtt at creation_date = systemfunc ("date")
fileattdef( fout, 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", "lat", "lon"/)
dimSizes = (/ -1 , nlat, nlon/)
dimUnlim = (/ True , False, False/)
filedimdef(fout,dimNames,dimSizes,dimUnlim)
;===================================================================
; 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.
; The following could be replaced with explicit, user defined dimension
; names different from those associated with the variable in memory.
; Say, PS(time,lat,lon) in the NCL script. They could be redefined for the file via:
; filevardef(fout, "PS" ,typeof(PS) ,(/"TIME","latitude","longitude"/))
;===================================================================
filevardef(fout, "time" ,(/"double"/),(/"time"/))
filevardef(fout, "lat" ,(/"float"/),(/"lat"/))
filevardef(fout, "lon" ,(/"float"/),(/"lon"/))
filevardef(fout, "TB" ,(/"float"/),(/"time","lat","lon"/))
;===================================================================
; Copy attributes associated with each variable to the file
; All attributes associated with each variable will be copied.
;====================================================================
filevarattdef(fout,"time" ,time_array) ; copy time attributes
filevarattdef(fout,"lat" ,lat_out) ; copy lat attributes
filevarattdef(fout,"lon" ,lon_out) ; copy lon attributes
filevarattdef(fout,"TB" ,tb_array) ; copy PS attributes
;===================================================================
; explicitly exit file definition mode. **NOT REQUIRED**
;===================================================================
setfileoption(fout,"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.
;====================================================================
fout->time = (/time_array/)
fout->lat = (/lat_out/)
fout->lon = (/lon_out/)
fout->TB = (/tb_array/)
end
More information about the ncl-talk
mailing list