!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE RDRADCOL ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE rdradcol(nx,ny,nz,nsrc_rad,nvar_radin, & 2,4
mx_rad,nz_rdr,mx_colrad,nradfil,radfname, &
srcrad,isrcrad,stnrad,latrad,lonrad,elvrad, &
latradc,lonradc,irad,nlevrad,hgtradc,obsrad, &
ncolrad,istatus,tem1)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Reads radar data stored as columns on a remapped grid.
! This allows the remapping to occur on a different grid
! than the analysis and allows the radar data to be treated
! as "soundings".
!
!-----------------------------------------------------------------------
!
! AUTHOR: Keith Brewster
! August, 1995
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! nx Number of grid points in the x-direction (east/west)
! ny Number of grid points in the y-direction (north/south)
! nz Number of grid points in the vertical
! nsrc_rad number of sources of radar data
! nvar_radin number of variables in the obsrad array
! mx_rad maximum number of radars
! nz_rdr maximum number of levels in a radar column
! mx_colrad maximum number of radar columns
!
! nradfil number of radar files
! radfname file name for radar datasets
! srcrad name of radar sources
!
! OUTPUT:
!
! isrcrad index of radar source
! stnrad radar site name character*4
! latrad latitude of radar (degrees N)
! lonrad longitude of radar (degrees E)
! elvrad elevation of feed horn of radar (m MSL)
! latradc latitude of radar column (degrees N)
! lonradc longitude of radar column (degrees E)
! irad radar number of each column
! nlevrad number of levels of radar data in each column
! hgtradc height (m MSL) of radar observations
! obsrad radar observations
! ncolrad number of radar columns read-in
! istatus status indicator
!
! tem1 Temporary work array.
!
!-----------------------------------------------------------------------
!
! Variable Declarations:
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz,nsrc_rad,nvar_radin,mx_rad,nz_rdr,mx_colrad
!
INTEGER :: nradfil
CHARACTER (LEN=132) :: radfname(mx_rad)
!
!-----------------------------------------------------------------------
!
! Radar site variables
!
!-----------------------------------------------------------------------
!
CHARACTER (LEN=8) :: srcrad(nsrc_rad)
INTEGER :: isrcrad(mx_rad)
REAL :: latrad(mx_rad),lonrad(mx_rad)
REAL :: elvrad(mx_rad)
CHARACTER (LEN=5) :: stnrad(mx_rad)
!
!-----------------------------------------------------------------------
!
! Radar observation variables
!
!-----------------------------------------------------------------------
!
INTEGER :: irad(mx_colrad)
INTEGER :: nlevrad(mx_colrad)
REAL :: latradc(mx_colrad),lonradc(mx_colrad)
REAL :: hgtradc(nz_rdr,mx_colrad)
REAL :: obsrad(nvar_radin,nz_rdr,mx_colrad)
INTEGER :: ncolrad
INTEGER :: istatus
!
!-----------------------------------------------------------------------
!
! Temporary work array
!
!-----------------------------------------------------------------------
!
REAL :: tem1(nx*ny*nz)
!
!-----------------------------------------------------------------------
!
! Misc. local variables
!
!-----------------------------------------------------------------------
!
INTEGER :: nsrcradin
PARAMETER (nsrcradin=2)
CHARACTER (LEN=8) :: srcradin(nsrcradin)
DATA srcradin /'88D-AII','88D-NIDS'/
!
CHARACTER (LEN=4) :: stn
CHARACTER (LEN=80) :: runname
CHARACTER (LEN=132) :: fname
INTEGER :: ireftim,itime,vcpnum,isource,idummy
INTEGER :: hdmpfmt,strhopt,mapprin
INTEGER :: nchanl,ierr,nradvr,iradvr
INTEGER :: iyr, imon, idy, ihr, imin, isec
INTEGER :: i,j,isrc,icstrt,icol,klev,kk,krad,nfile,maxk
REAL :: dxin,dyin,dzin,dzminin,ctrlatin
REAL :: ctrlonin,tlat1in,tlat2in,tlonin,scalin,rdummy
REAL :: xrd,yrd,elev,dummy
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
maxk=0
icol=0
istatus=0
icstrt=1
nfile=nradfil
IF(nradfil > mx_rad) THEN
WRITE(6,'(a,i3,a,i3/a,i3,a)') &
' WARNING nradfil ',nradfil,' exceeds mx_rad dimension ', &
mx_rad,' only ',mx_rad,' files will be read.'
nfile=mx_rad
END IF
!
!-----------------------------------------------------------------------
!
! Loop through all radars
!
!-----------------------------------------------------------------------
!
DO krad=1,nfile
fname=radfname(krad)
CALL asnctl
('NEWLOCAL', 1, ierr)
CALL asnfile
(fname, '-F f77 -N ieee', ierr)
CALL getunit
( nchanl )
OPEN(UNIT=nchanl,FILE=trim(fname),ERR=400, &
FORM='unformatted',STATUS='old')
istatus=1
!
READ(nchanl) stn
stnrad(krad)=stn
READ(nchanl) ireftim,itime,vcpnum,isource,idummy, &
idummy,idummy,idummy,idummy,idummy
!
!-----------------------------------------------------------------------
!
! Connect source number to source name.
!
!-----------------------------------------------------------------------
!
IF(isource < 1) THEN
WRITE(6,'(a,i5,/a/)') &
' rdradcol: read isource as',isource, &
' Setting isource to default, 1'
isource=1
END IF
IF(isource > nsrcradin) THEN
WRITE(6,'(a,i3,a,i3,a,/a/)') &
' rdradcol: read isource as',isource, &
' only ',nsrcradin,' sources known.', &
' If a new radar source has been added, update rdradcol.f'
STOP
END IF
DO isrc=1,nsrc_rad
IF(srcrad(isrc) == srcradin(isource)) THEN
isrcrad(krad)=isrc
WRITE(6,'(a,i3,a,i3,a,a)') ' rdradcol isource: ',isource, &
' = srcrad(',isrc,') ',srcrad(isrc)
GO TO 25
END IF
END DO
WRITE(6,'(/a,i4,a,a)') ' rdradcol read isource: ',isource, &
' could not find srcrad= ',srcradin(isource)
WRITE(6,'(a//)') ' Check radar source names'
STOP
25 CONTINUE
!
!-----------------------------------------------------------------------
!
! Read more header data
!
!-----------------------------------------------------------------------
!
READ(nchanl) runname
PRINT *, ' runname: ',runname
READ(nchanl) hdmpfmt,strhopt,mapprin,idummy,idummy, &
idummy,idummy,idummy,idummy,idummy
PRINT *, ' hdmpfmt: ',hdmpfmt
PRINT *, ' strhopt: ',strhopt
PRINT *, ' mapprin: ',mapprin
PRINT *, ' idummy: ',idummy
READ(nchanl) dxin,dyin,dzin,dzminin,ctrlatin, &
ctrlonin,tlat1in,tlat2in,tlonin,scalin, &
latrad(krad),lonrad(krad),elvrad(krad), &
rdummy,rdummy
PRINT *, ' dxin,dyin,dzin: ',dxin,dyin,dzin
PRINT *, ' ctrlatin,ctrlonin: ',ctrlatin,ctrlonin
PRINT *, ' tlat1in,tlat2in,tlonin: ',tlat1in,tlat2in,tlonin
PRINT *, ' scalin ',scalin
PRINT *, ' latrad,lonrad,elvrad: ', &
latrad(krad),lonrad(krad),elvrad(krad)
PRINT *, ' rdummy: ',rdummy
READ(nchanl) nradvr,iradvr
!
PRINT *, ' Got nradvr,iradvr: ',nradvr,iradvr
!
CALL abss2ctim
(itime, iyr, imon, idy, ihr, imin, isec )
iyr=MOD(iyr,100)
WRITE(6,815) 'Reading remapped raw radar data for: ', &
imon,idy,iyr,ihr,imin
815 FORMAT(/a,i2.2,'/',i2.2,'/',i2.2,1X,i2.2,':',i2.2,' UTC')
!
!-----------------------------------------------------------------------
!
! Note here the radar data indices:
!
! 1 Reflectivity
! 2 Radial Velocity
! 3 Nyquist Velocity
! 4 Time in seconds from the reference time
!
!-----------------------------------------------------------------------
!
DO icol=icstrt,999999
IF(icol <= mx_colrad) THEN
READ(nchanl,END=101) i,j,xrd,yrd, &
latradc(icol),lonradc(icol),elev,klev
maxk=MAX(maxk,klev)
klev=MIN(klev,nz_rdr)
nlevrad(icol)=klev
irad(icol)=krad
READ(nchanl,END=102) (tem1(kk),kk=1,klev)
READ(nchanl,END=102) (hgtradc(kk,icol),kk=1,klev)
READ(nchanl,END=102) (obsrad(1,kk,icol),kk=1,klev)
READ(nchanl,END=102) (obsrad(2,kk,icol),kk=1,klev)
READ(nchanl,END=102) (obsrad(3,kk,icol),kk=1,klev)
READ(nchanl,END=102) (obsrad(4,kk,icol),kk=1,klev)
ELSE
READ(nchanl,END=101) i,j,xrd,yrd, &
dummy,dummy,elev,klev
maxk=MAX(maxk,klev)
klev=MIN(klev,nz_rdr)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
READ(nchanl,END=101) (tem1(kk),kk=1,klev)
END IF
END DO
101 CONTINUE
icol=icol-1
WRITE(6,'(a,i6,a)') ' End of file reached after reading', &
icol,' columns'
GO TO 105
102 CONTINUE
WRITE(6,'(a,i6,a)') ' End of file reached while reading', &
icol,' column'
105 CONTINUE
CLOSE(nchanl)
CALL retunit( nchanl )
icstrt=icol+1
END DO
400 CONTINUE
IF(icol > mx_colrad) THEN
WRITE(6,'(//a)') &
' #### WARNING max_colrad EXCEEDED ####'
WRITE(6,'(a,i6,a)') &
' increase mx_colrad from ',mx_colrad,' columns'
WRITE(6,'(2x,i6,a//)') &
icol,' columns are needed to read all files'
END IF
ncolrad=MIN(icol,mx_colrad)
WRITE(6,'(a,i5)') ' Maximum number of vert levels read:',maxk
IF(maxk > nz_rdr) THEN
WRITE(6,'(a,i5)') &
' EXCEEDS nz_rdr, increase nz_rdr: ',nz_rdr
STOP
END IF
RETURN
END SUBROUTINE rdradcol