!
!##################################################################
!##################################################################
!######                                                      ######
!######                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