PROGRAM RADBIN2CDF,16
!
! Purpose:
! Reads a volume of radar data in binary format and converts it
! to NetCDF formatted files for use in WDSS-II.
! Useful for dealing with OSSE files written in hdf which cannot
! be directly written out in NetCDF due to the incompatibility of
! HDF and NetCDF libraries
!
! There is no input file, just two command-line arguments.
!
! Usage:
! radbin2cdf [-n nfiles -int interval] First_binary_file Output_directory
! [-azimbgn beginning_azimuth -azimend ending_azimuth]
!
! Keith Brewster, CAPS
! 15 November 2004
!
! 23 March 2005 (Keith Brewster, CAPS)
! Added outer time loop for processing time series of volumes.
!
! 12 April 2005 (Keith Brewster, CAPS)
! Added logic for sectorized output option.
!
IMPLICIT NONE
!
!-----------------------------------------------------------------------
!
! Radar tilt variables
!
!-----------------------------------------------------------------------
!
REAL, ALLOCATABLE :: azim(:)
REAL, ALLOCATABLE :: beamw(:)
REAL, ALLOCATABLE :: gtspc(:)
REAL, ALLOCATABLE :: vnyq(:)
REAL, ALLOCATABLE :: radv(:,:)
REAL, ALLOCATABLE :: uaradv(:,:)
REAL, ALLOCATABLE :: refl(:,:)
REAL, ALLOCATABLE :: uarefl(:,:)
REAL, ALLOCATABLE :: vort(:,:)
!
!-----------------------------------------------------------------------
!
! Radar volume variables
!
!-----------------------------------------------------------------------
!
INTEGER, ALLOCATABLE :: itimvol(:)
REAL, ALLOCATABLE :: vnyqvol(:)
REAL, ALLOCATABLE :: rngvol(:,:)
REAL, ALLOCATABLE :: azmvol(:,:)
REAL, ALLOCATABLE :: elvvol(:,:)
REAL, ALLOCATABLE :: refvol(:,:,:)
REAL, ALLOCATABLE :: uarefvol(:,:,:)
REAL, ALLOCATABLE :: velvol(:,:,:)
REAL, ALLOCATABLE :: uavelvol(:,:,:)
REAL, ALLOCATABLE :: vorvol(:,:,:)
!
!-----------------------------------------------------------------------
!
! I/O Options
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=256) :: argstr
CHARACTER (LEN=256) :: fname
CHARACTER (LEN=256) :: idxfname
CHARACTER (LEN=256) :: dirstr
CHARACTER (LEN=256) :: rfnamevol
CHARACTER (LEN=40 ) :: varname
CHARACTER (LEN=4 ) :: radname
INTEGER :: ifmt,creidx,ipktyp,nbits
INTEGER :: wrtuaref,wrtuavel,wrtvort,idummy
CHARACTER (LEN=80) :: outdir
LOGICAL :: gotfiln,sectorize
!
!-----------------------------------------------------------------------
!
! Misc local variables
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=5) :: cmprext
CHARACTER (LEN=120) :: cmd
REAL :: radelv,radlat,radlon
REAL :: beamwid
REAL :: elv,frtime
REAL :: rmisval,rngfval,rfrgate,vnyqstl
REAL :: azimbgn,azimend
REAL :: dazmax,dazmin,dazim
INTEGER, PARAMETER :: itim1970=315619200
INTEGER :: iarg,narg,nfiles,ngatevel,ngateref
INTEGER :: nazim,nazimin,nelev,ngate
INTEGER :: ifile,itilt,jazim,igate,idxunit,iunit,intvl
INTEGER :: ielv,felv,vcp,itime,itimcdf,ifsecs,initime
INTEGER :: iyear,imon,iday,ihour,imin,isec
INTEGER :: irot,jstart,kelv,kazim
INTEGER :: iargc,abstsec,lfname,iostatus
LOGICAL :: fexist,cmprsd
!
!-----------------------------------------------------------------------
!
! Include files
!
!-----------------------------------------------------------------------
!
INCLUDE 'globcst.inc'
!
!-----------------------------------------------------------------------
!
! A few initializations
!
!-----------------------------------------------------------------------
!
outdir='.'
frtime=0.
cmprext='.gz'
creidx=1
rfnamevol='KTLX.dat'
sectorize=.false.
azimbgn=-999.
azimend=-999.
wrtuaref=0
wrtuavel=0
wrtvort =0
idummy =0
!
!-----------------------------------------------------------------------
!
! Open and read the binary file.
!
!-----------------------------------------------------------------------
!
narg=iargc()
IF(narg < 1) THEN
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]', &
' first_binary_file [output_directory]', &
' [-azimbgn beginning_azimuth -azimend ending_azimuth]'
STOP
END IF
nfiles=1
intvl=-999
rfnamevol='dummy'
gotfiln=.false.
iarg=1
DO
CALL getarg(iarg,argstr)
iarg=iarg+1
IF(argstr(1:2) == '-n') THEN
IF(iarg > narg) EXIT
CALL getarg(iarg,argstr)
iarg=iarg+1
READ(argstr,*,iostat=iostatus) nfiles
IF(iostatus /= 0) THEN
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]',&
' first_binary_file [output_directory]', &
' [-azimbgn beginning_azimuth -azimend ending_azimuth]'
STOP
END IF
ELSE IF (argstr(1:4) == '-int') THEN
IF(iarg > narg) EXIT
CALL getarg(iarg,argstr)
iarg=iarg+1
READ(argstr,*,iostat=iostatus) intvl
IF(iostatus /= 0) THEN
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]',&
' first_binary_file [output_directory]', &
' [-azimbgn beginning_azimuth -azimend ending_azimuth]'
STOP
END IF
ELSE IF(argstr(1:8) == '-azimbgn') THEN
IF(iarg > narg) EXIT
CALL getarg(iarg,argstr)
iarg=iarg+1
READ(argstr,*,iostat=iostatus) azimbgn
IF(iostatus /= 0) THEN
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]',&
' first_binary_file [output_directory]', &
' [-azimbgn beginning_azimuth -azimend ending_azimuth]'
STOP
END IF
sectorize=.true.
ELSE IF(argstr(1:8) == '-azimend') THEN
IF(iarg > narg) EXIT
CALL getarg(iarg,argstr)
iarg=iarg+1
READ(argstr,*,iostat=iostatus) azimend
IF(iostatus /= 0) THEN
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]',&
' first_binary_file [output_directory]', &
' -azimbgn beginning_azimuth -azimend ending_azimuth'
STOP
END IF
sectorize=.true.
ELSE IF (gotfiln) THEN
outdir=argstr
ELSE
rfnamevol=argstr
gotfiln=.true.
END IF
IF(iarg > narg) EXIT
END DO
CALL extrctdir
(rfnamevol,dirstr)
lfname=LEN_TRIM(rfnamevol)
IF(rfnamevol((lfname-2):lfname) == '.gz') THEN
WRITE(rfnamevol((lfname-2):lfname),'(a3)') ' '
ELSE IF(rfnamevol((lfname-1):lfname) == '.Z') THEN
WRITE(rfnamevol((lfname-1):lfname),'(a2)') ' '
END IF
WRITE(6,'(a,a)') ' Binary radar data: ',TRIM(rfnamevol)
WRITE(6,'(a,a)') ' Input directory: ',TRIM(dirstr)
WRITE(6,'(a,a)') ' Output directory: ',TRIM(outdir)
WRITE(6,'(a,i4,a)') ' Processing',nfiles,' files'
WRITE(6,'(a,i6,a)') ' at time interval ',intvl,' secs.'
IF(nfiles > 1 .AND. intvl < 0) THEN
WRITE(6,'(a)') ' nfiles > 1 and no time interval supplied'
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]', &
' first_binary_file [output_directory]', &
' -azimbgn beginning_azimuth -azimend ending_azimuth'
STOP
END IF
IF(sectorize) THEN
WRITE(6,'(a,f9.2,/,10x,a,f9.2)') &
' Sector beginning azimuth:',azimbgn, &
' Ending azimuth:',azimend
IF(azimbgn < 0. .OR. azimend < 0.) THEN
WRITE(6,'(a)') &
' Sector specified, must specify both azimbgn and azimend'
WRITE(6,'(a,a/a)') 'Usage: radbin2cdf [-n nfiles -int interval]',&
' first_binary_file [output_directory]', &
' -azimbgn beginning_azimuth -azimend ending_azimuth'
STOP
END IF
IF(azimend > azimbgn) THEN
dazmax=azimend-azimbgn
ELSE
dazmax=360.+azimend-azimbgn
END IF
WRITE(6,'(a,f7.2)') ' Sector width (degrees): ',dazmax
ELSE
WRITE(6,'(a)') ' No sectorization, writing all data.'
END IF
IF(TRIM(outdir) /= '.') THEN
INQUIRE(FILE=TRIM(outdir),EXIST=fexist)
IF(.NOT.fexist) THEN
WRITE(6,'(a,a)') ' Creating directory ',TRIM(outdir)
WRITE(cmd,'(a,a)') 'mkdir ',TRIM(outdir)
CALL unixcmd
(cmd)
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Open and read the binary file.
!
!-----------------------------------------------------------------------
!
DO ifile=1,nfiles
cmprsd=.false.
IF(ifile > 1) THEN
abstsec=abstsec+intvl
CALL abss2ctim
(abstsec,year,month,day,hour,minute,second)
WRITE(rfnamevol,'(4a,i4.4,2(i2.2),a,3(i2.2),a)') &
TRIM(dirstr),'/',radname,'_',year,month,day,'_', &
hour,minute,second,'.vol'
END IF
INQUIRE(file=TRIM(rfnamevol),EXIST=fexist)
IF(.NOT.fexist) THEN
INQUIRE(file=TRIM(rfnamevol)//'.gz',EXIST=fexist)
IF(fexist) CALL uncmprs
(TRIM(rfnamevol)//'.gz')
cmprsd=fexist
END IF
IF(.NOT.fexist) THEN
INQUIRE(file=TRIM(rfnamevol)//'.Z',EXIST=fexist)
IF(fexist) CALL uncmprs
(TRIM(rfnamevol)//'.Z')
cmprsd=fexist
END IF
IF(.NOT.fexist) THEN
WRITE(6,'(/1x,a,a,/a)') &
'File ',TRIM(rfnamevol),' or its compressed version not found.'
STOP
END IF
iunit=31
WRITE(6,'(a,a)') ' Opening: ',TRIM(rfnamevol)
OPEN(iunit,FILE=trim(rfnamevol),STATUS='old',FORM='unformatted')
READ(iunit) runname
lfnkey=80
CALL gtlfnkey
(runname,lfnkey)
WRITE(6,'(a,a)') ' Runname:',runname(1:lfnkey)
READ(iunit) radname
WRITE(6,'(a,a)') ' Radar name:',radname
READ(iunit) ngatevel,ngateref,nazimin,nelev
ngate=ngatevel
WRITE(6,'(a,i6,a,i6,a,i6)') &
' Ngate : ',ngate,' Nazim: ',nazimin,' Nelev: ',nelev
READ(iunit) year,month,day,hour,minute,second
WRITE(6,'(2(a,i2.2),a,i4.4,3(a,i2.2))') &
' Date: ',month,'/',day,'/',year,' Time: ',hour,':',minute,':',second
READ(iunit) radelv,radlat,radlon
WRITE(6,'(a,f9.2,a,f9.2,a,f9.2)') &
' Latitude:',radlat,' Longitude:',radlon,' Elevation:',radelv
READ(iunit) vcp,beamwid,rmisval,rngfval,curtim
WRITE(6,'(a,i5,a,f9.2,a,f10.1,a,f10.1)') &
' VCP:',vcp,' Beamwidth:',beamwid, &
' MissVal: ',rmisval,' RngfVal :',rngfval
!
CALL ctim2abss
(year,month,day,hour,minute,second,abstsec)
READ(iunit) wrtuaref,wrtuavel,wrtvort, &
idummy,idummy,idummy,idummy,idummy
!
WRITE(6,'(a)') ' Allocating volume memory '
ALLOCATE(itimvol(nelev))
ALLOCATE(vnyqvol(nelev))
ALLOCATE(rngvol(ngate,nelev))
ALLOCATE(azmvol(nazimin,nelev))
ALLOCATE(elvvol(nazimin,nelev))
ALLOCATE(refvol(ngate,nazimin,nelev))
IF(wrtuaref /= 0) ALLOCATE(uarefvol(ngate,nazimin,nelev))
ALLOCATE(velvol(ngate,nazimin,nelev))
IF(wrtuavel /= 0) ALLOCATE(uavelvol(ngate,nazimin,nelev))
IF(wrtvort /= 0) ALLOCATE(vorvol(ngate,nazimin,nelev))
WRITE(6,'(a)') ' Reading Time Array'
READ(iunit) itimvol
WRITE(6,'(a)') ' Reading Reflectiving Arrays'
READ(iunit) rngvol
READ(iunit) azmvol
READ(iunit) elvvol
READ(iunit) refvol
IF( wrtuaref /= 0 ) READ(iunit) uarefvol
WRITE(6,'(a)') ' Reading Velocity Arrays'
READ(iunit) vnyqvol
READ(iunit) rngvol
READ(iunit) azmvol
READ(iunit) elvvol
READ(iunit) velvol
IF( wrtuavel /= 0 ) READ(iunit) uavelvol
IF( wrtvort /= 0 ) READ(iunit) vorvol
!
WRITE(6,'(a)') ' Reading successfully completed'
CLOSE(iunit)
!
CALL ctim2abss
(year,month,day,hour,minute,second,itime)
itimcdf=itime-itim1970
ifsecs=NINT(curtim)
initime=itimcdf-ifsecs
!
! Count radials in input arrays within specified sector
! or set equal to value in the entire data array.
!
IF(sectorize) THEN
nazim=0
DO kelv=1,nelev
kazim=0
DO jazim=1,nazimin
IF(azmvol(jazim,kelv) >= 0.) THEN
dazim=azmvol(jazim,kelv)-azimbgn
IF(dazim < 0.) dazim=dazim+360.
IF(dazim <= dazmax) kazim=kazim+1
END IF
END DO
nazim=max(nazim,kazim)
END DO
WRITE(6,'(i6,a,f9.2,a,f9.2)') &
nazim,' radials found in range ',azimbgn,' to ',azimend
ELSE
nazim=nazimin
END IF
IF(nazim == 0) CYCLE
ALLOCATE(azim(nazim))
ALLOCATE(beamw(nazim))
ALLOCATE(gtspc(nazim))
ALLOCATE(vnyq(nazim))
ALLOCATE(refl(ngate,nazim))
IF(wrtuaref /= 0) ALLOCATE(uarefl(ngate,nazim))
ALLOCATE(radv(ngate,nazim))
IF(wrtuavel /= 0) ALLOCATE(uaradv(ngate,nazim))
IF(wrtvort /= 0) ALLOCATE(vort(ngate,nazim))
!
!-----------------------------------------------------------------------
!
! Open index record file
!
!-----------------------------------------------------------------------
!
IF( ifile == 1 .AND. creidx > 0 ) THEN
WRITE(idxfname,'(a,a,a,a,a,a,i6.6,a)') &
TRIM(outdir),'/',radname,'.',runname(1:lfnkey),'.',ifsecs,'.xml'
CALL getunit
(idxunit)
WRITE(6,'(a,a)') ' Writing index to:',TRIM(idxfname)
OPEN(idxunit,file=idxfname,form='formatted',status='unknown')
WRITE(idxunit,'(a)') '<?xml version="1.0" encoding="iso-8859-1" ?>'
WRITE(idxunit,'(a,a,a)') '<codeindex type="netcdf" dataset="', &
TRIM(outdir),'">'
END IF
DO itilt=1,nelev
azim=0.
beamw=0.
gtspc=0.
refl=0.
radv=0.
IF(wrtuaref /= 0) uarefl=0.
IF(wrtuavel /= 0) uaradv=0.
IF(wrtvort /= 0) vort=0.
CALL abss2ctim
(itimvol(itilt),iyear,imon,iday,ihour,imin,isec)
IF(sectorize) THEN
!
! Find rotating direction and starting azimuth
!
irot=1
dazim=azmvol(2,itilt)-azmvol(1,itilt)
IF(dazim < -180.) dazim=dazim+360.
IF(dazim < 0.) irot=-1
IF( irot > 0 ) THEN
WRITE(6,'(a)') ' Clockwise rotation detected'
ELSE
WRITE(6,'(a)') ' Counter-clockwise rotation detected'
END IF
jstart=1
dazmin=361.
IF(irot > 0) THEN
DO jazim=1,nazimin
IF(azmvol(jazim,itilt) >= 0.) THEN
dazim=azmvol(jazim,itilt)-azimbgn
IF(dazim < 0.) dazim=dazim+360.
IF(dazim < dazmin) THEN
dazmin=dazim
jstart=jazim
END IF
END IF
END DO
ELSE
DO jazim=1,nazimin
IF(azmvol(jazim,itilt) >= 0.) THEN
dazim=azimend-azmvol(jazim,itilt)
IF(dazim < 0.) dazim=dazim+360.
IF(dazim < dazmin) THEN
dazmin=dazim
jstart=jazim
END IF
END IF
END DO
END IF
!
kazim=0
DO jazim=jstart,nazimin
IF(azmvol(jazim,itilt) >= 0.) THEN
dazim=azmvol(jazim,itilt)-azimbgn
IF(dazim < 0.) dazim=dazim+360.
IF(dazim <= dazmax) THEN
kazim=kazim+1
azim(kazim)=azmvol(jazim,itilt)
beamw(kazim)=beamwid
gtspc(kazim)=rngvol(2,itilt)-rngvol(1,itilt)
vnyq(kazim)=vnyqvol(itilt)
DO igate=1,ngate
refl(igate,kazim)=refvol(igate,jazim,itilt)
radv(igate,kazim)=velvol(igate,jazim,itilt)
END DO
IF(wrtuaref /= 0) THEN
DO igate=1,ngate
uarefl(igate,kazim)=uarefvol(igate,jazim,itilt)
END DO
END IF
IF(wrtuavel /= 0) THEN
DO igate=1,ngate
uaradv(igate,kazim)=uavelvol(igate,jazim,itilt)
END DO
END IF
IF(wrtvort /= 0) THEN
DO igate=1,ngate
vort(igate,kazim)=vorvol(igate,jazim,itilt)
END DO
END IF
END IF
END IF
END DO
DO jazim=1,(jstart-1)
IF(azmvol(jazim,itilt) >= 0.) THEN
dazim=azmvol(jazim,itilt)-azimbgn
IF(dazim < 0.) dazim=dazim+360.
IF(dazim <= dazmax) THEN
kazim=kazim+1
azim(kazim)=azmvol(jazim,itilt)
beamw(kazim)=beamwid
gtspc(kazim)=rngvol(2,itilt)-rngvol(1,itilt)
vnyq(kazim)=vnyqvol(itilt)
DO igate=1,ngate
refl(igate,kazim)=refvol(igate,jazim,itilt)
radv(igate,kazim)=velvol(igate,jazim,itilt)
END DO
IF(wrtuaref /= 0) THEN
DO igate=1,ngate
uarefl(igate,kazim)=uarefvol(igate,jazim,itilt)
END DO
END IF
IF(wrtuavel /= 0) THEN
DO igate=1,ngate
uaradv(igate,kazim)=uavelvol(igate,jazim,itilt)
END DO
END IF
IF(wrtvort /= 0) THEN
DO igate=1,ngate
vort(igate,kazim)=vorvol(igate,jazim,itilt)
END DO
END IF
END IF
END IF
END DO
!
ELSE ! no sectorizing
!
kazim=0
DO jazim=1,nazimin
azim(jazim)=azmvol(jazim,itilt)
beamw(jazim)=beamwid
gtspc(jazim)=rngvol(2,itilt)-rngvol(1,itilt)
vnyq(jazim)=vnyqvol(itilt)
DO igate=1,ngate
refl(igate,jazim)=refvol(igate,jazim,itilt)
radv(igate,jazim)=velvol(igate,jazim,itilt)
END DO
IF(wrtuaref /= 0) THEN
DO igate=1,ngate
uarefl(igate,jazim)=uarefvol(igate,jazim,itilt)
END DO
END IF
IF(wrtuavel /= 0) THEN
DO igate=1,ngate
uaradv(igate,jazim)=uavelvol(igate,jazim,itilt)
END DO
END IF
IF(wrtvort /= 0) THEN
DO igate=1,ngate
vort(igate,jazim)=vorvol(igate,jazim,itilt)
END DO
END IF
END DO
END IF
!
rfrgate=rngvol(1,itilt)
elv=elvvol(1,itilt)
ielv=INT(elv)
felv=NINT(100.*(elv-ielv))
vnyqstl=vnyqvol(itilt)
WRITE(fname,'(a,i2.2,a,i2.2,a,i4.4,2(i2.2),a,3(i2.2),a)') &
'Reflectivity_',ielv,'.',felv,'_',iyear,imon,iday,'-', &
ihour,imin,isec,'.netcdf'
WRITE(6,'(a,a)') ' Reflectivity data file: ',TRIM(fname)
varname='Reflectivity'
CALL wtrftiltcdf
(ngate,nazim,nazim,fname,outdir,varname, &
radname,radlat,radlon,radelv,vcp,elv, &
rmisval,rngfval,itimcdf,frtime,initime, &
vnyqstl,rfrgate, &
azim,beamw,gtspc,refl)
!
!-----------------------------------------------------------------------
!
! Write index record
!
!-----------------------------------------------------------------------
!
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '<item>'
WRITE(idxunit,'(a,f8.6,a,i10,a)') &
'<time fractional="',frtime,'">',itimcdf,'</time>'
WRITE(idxunit,'(a,a,a,a)') '<params>netcdf {indexlocation} ', &
TRIM(fname),TRIM(cmprext),'</params>'
WRITE(idxunit,'(a,i4.4,2i2.2,a,3i2.2,1x,a,1x,i2.2,a1,i2.2,a)') &
'<selections>',iyear,imon,iday,'-', &
ihour,imin,isec,'Reflectivity',ielv,'.',felv, &
'</selections>'
WRITE(idxunit,'(a)') '</item>'
END IF
!
IF(wrtuaref > 0) THEN
WRITE(fname,'(a,i2.2,a,i2.2,a,i4.4,2(i2.2),a,3(i2.2),a)') &
'ReflectivityUnatten_',ielv,'.',felv,'_',iyear,imon,iday,'-',&
ihour,imin,isec,'.netcdf'
WRITE(6,'(a,a)') ' Unattenuated Reflectivity: ',TRIM(fname)
varname='UnattenuatedReflectivity'
CALL wtrftiltcdf
(ngate,nazim,nazim,fname,outdir,varname, &
radname,radlat,radlon,radelv,vcp,elv, &
rmisval,rngfval,itimcdf,frtime,initime, &
vnyqstl,rfrgate, &
azim,beamw,gtspc,uarefl)
!
!-----------------------------------------------------------------------
!
! Write index record
!
!-----------------------------------------------------------------------
!
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '<item>'
WRITE(idxunit,'(a,f8.6,a,i10,a)') &
'<time fractional="',frtime,'">',itimcdf,'</time>'
WRITE(idxunit,'(a,a,a,a)') '<params>netcdf {indexlocation} ', &
TRIM(fname),TRIM(cmprext),'</params>'
WRITE(idxunit,'(a,i4.4,2i2.2,a,3i2.2,1x,a,1x,i2.2,a1,i2.2,a)')&
'<selections>',iyear,imon,iday,'-', &
ihour,imin,isec,'UnattenuatedReflectivity',ielv, &
'.',felv,'</selections>'
WRITE(idxunit,'(a)') '</item>'
END IF
END IF
!
!-----------------------------------------------------------------------
!
! Write tilt netCDF file - Velocity
!
!-----------------------------------------------------------------------
!
WRITE(fname,'(a,i2.2,a,i2.2,a,i4.4,2(i2.2),a,3(i2.2),a)') &
'Velocity_',ielv,'.',felv,'_',iyear,imon,iday,'-', &
ihour,imin,isec,'.netcdf'
WRITE(6,'(a,a)') ' Velocity data file: ',TRIM(fname)
varname='Velocity'
CALL wtvrtiltcdf
(ngate,nazim,nazim,fname,outdir,varname, &
radname,radlat,radlon,radelv,vcp,elv, &
rmisval,rngfval,itimcdf,frtime,initime, &
vnyqstl,rfrgate, &
azim,beamw,gtspc,vnyq,radv)
!
!
!-----------------------------------------------------------------------
!
! Write index record
!
!-----------------------------------------------------------------------
!
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '<item>'
WRITE(idxunit,'(a,f8.6,a,i10,a)') &
'<time fractional="',frtime,'">',itimcdf,'</time>'
WRITE(idxunit,'(a,a,a,a)') '<params>netcdf {indexlocation} ', &
TRIM(fname),TRIM(cmprext),'</params>'
WRITE(idxunit,'(a,i4.4,2i2.2,a,3i2.2,1x,a,1x,i2.2,a1,i2.2,a)') &
'<selections>',iyear,imon,iday,'-', &
ihour,imin,isec,'Velocity',ielv,'.',felv, &
'</selections>'
WRITE(idxunit,'(a)') '</item>'
END IF
IF(wrtuavel > 0) THEN
WRITE(fname,'(a,i2.2,a,i2.2,a,i4.4,2(i2.2),a,3(i2.2),a)') &
'VelocityUnatten_',ielv,'.',felv,'_',iyear,imon,iday,'-', &
ihour,imin,isec,'.netcdf'
WRITE(6,'(a,a)') ' Unattended Velocity: ',TRIM(fname)
varname='UnattenuatedVelocity'
CALL wtvrtiltcdf
(ngate,nazim,nazim,fname,outdir,varname, &
radname,radlat,radlon,radelv,vcp,elv, &
rmisval,rngfval,itimcdf,frtime,initime, &
vnyqstl,rfrgate, &
azim,beamw,gtspc,vnyq,radv)
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '<item>'
WRITE(idxunit,'(a,f8.6,a,i10,a)') &
'<time fractional="',frtime,'">',itimcdf,'</time>'
WRITE(idxunit,'(a,a,a,a)') '<params>netcdf {indexlocation} ', &
TRIM(fname),TRIM(cmprext),'</params>'
WRITE(idxunit,'(a,i4.4,2i2.2,a,3i2.2,1x,a,1x,i2.2,a1,i2.2,a)')&
'<selections>',iyear,imon,iday,'-', &
ihour,imin,isec,'Velocity',ielv,'.',felv, &
'</selections>'
WRITE(idxunit,'(a)') '</item>'
END IF
END IF
IF(wrtvort > 0) THEN
WRITE(fname,'(a,i2.2,a,i2.2,a,i4.4,2(i2.2),a,3(i2.2),a)') &
'Vorticity_',ielv,'.',felv,'_',iyear,imon,iday,'-', &
ihour,imin,isec,'.netcdf'
WRITE(6,'(a,a)') ' Vertical Vorticity: ',TRIM(fname)
varname='VerticalVorticity'
CALL wtvvtiltcdf
(ngate,nazim,nazim,fname,outdir,varname, &
radname,radlat,radlon,radelv,vcp,elv, &
rmisval,rngfval,itimcdf,frtime,initime, &
vnyqstl,rfrgate, &
azim,beamw,gtspc,vort)
!
!-----------------------------------------------------------------------
!
! Write index record
!
!-----------------------------------------------------------------------
!
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '<item>'
WRITE(idxunit,'(a,f8.6,a,i10,a)') &
'<time fractional="',frtime,'">',itimcdf,'</time>'
WRITE(idxunit,'(a,a,a,a)') '<params>netcdf {indexlocation} ', &
TRIM(fname),TRIM(cmprext),'</params>'
WRITE(idxunit,'(a,i4.4,2i2.2,a,3i2.2,1x,a,1x,i2.2,a1,i2.2,a)')&
'<selections>',iyear,imon,iday,'-', &
ihour,imin,isec,'Vorticity',ielv,'.',felv, &
'</selections>'
WRITE(idxunit,'(a)') '</item>'
END IF
END IF
!
!-----------------------------------------------------------------------
!
!
END DO ! itilt
!
! Free memory as next file may be larger or smaller
!
DEALLOCATE(itimvol)
DEALLOCATE(vnyqvol)
DEALLOCATE(rngvol)
DEALLOCATE(azmvol)
DEALLOCATE(elvvol)
DEALLOCATE(refvol)
IF( wrtuaref > 0) DEALLOCATE(uarefvol)
DEALLOCATE(velvol)
IF( wrtuavel > 0) DEALLOCATE(uavelvol)
IF( wrtvort > 0) DEALLOCATE(vorvol)
DEALLOCATE(azim)
DEALLOCATE(beamw)
DEALLOCATE(gtspc)
DEALLOCATE(vnyq)
DEALLOCATE(refl)
IF( wrtuaref > 0) DEALLOCATE(uarefl)
DEALLOCATE(radv)
IF( wrtuavel > 0) DEALLOCATE(uaradv)
IF( wrtvort > 0) DEALLOCATE(vort)
IF(cmprsd) CALL cmprsgz
(rfnamevol)
!
!-----------------------------------------------------------------------
END DO ! ifile
!
! Finish index file and close it out
!
IF( creidx > 0 ) THEN
WRITE(idxunit,'(a)') '</codeindex>'
CLOSE(idxunit)
CALL retunit(idxunit)
END IF
END PROGRAM RADBIN2CDF
SUBROUTINE extrctdir(filestr,dirstr) 1
!
! Extract directory name from filename
! Keith Brewster, CAPS
! March 22, 2005
!
IMPLICIT NONE
CHARACTER (LEN=*) :: filestr
CHARACTER (LEN=*) :: dirstr
INTEGER :: lenfil
INTEGER :: lendir
INTEGER :: i,jloc
lenfil=LEN(filestr)
lendir=LEN(dirstr)
jloc=0
dirstr='.'
DO i=1,lenfil
IF(filestr(i:i) == '/') jloc=i
END DO
IF(jloc > 1) THEN
IF((jloc-1) <= lendir) THEN
dirstr=filestr(1:(jloc-1))
ELSE
WRITE(6,'(a,i6)') 'Insufficient length for dirstr, need',(jloc-1)
END IF
END IF
RETURN
END SUBROUTINE extrctdir