!
!##################################################################
!##################################################################
!######                                                      ######
!######             SUBROUTINE GET_DIMS_FROM_RAD             ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!

SUBROUTINE get_grid_from_rad(radfname,dx,dy,dz,dzmin,strhopt,          & 1,24
                  mapproj,ctrlat,ctrlon,trulat1,trulat2,trulon,sclfct, &
                  istatus)
!
!-----------------------------------------------------------------------
!
!  PURPOSE:
!
!
!-----------------------------------------------------------------------
!
!  MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
!  INPUT:
!
!    radfname   file name for radar datasets
!
!  OUTPUT:
!
!    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
!
!    istatus  status indicator
!
!
!-----------------------------------------------------------------------
!
!  Variable Declarations:
!
!-----------------------------------------------------------------------
!
  IMPLICIT NONE
!
  CHARACTER (LEN=*) :: radfname
!
  REAL    :: dx,dy,dz,dzmin
  INTEGER :: strhopt,mapproj
  REAL    :: ctrlat,ctrlon
  REAL    :: trulat1,trulat2,trulon
  REAL    :: sclfct
!
  INTEGER :: istatus
!
!-----------------------------------------------------------------------
!
!  Misc. local variables
!
!-----------------------------------------------------------------------
!
  CHARACTER (LEN=4) :: stn
  CHARACTER (LEN=80) :: runname
  INTEGER :: ierr,lens,dmpfmt,nchanl
  INTEGER :: ireftim,itime,vcpnum,idummy
  INTEGER :: iradfmt,irngmin,irngmax
  INTEGER :: iyr, imon, idy, ihr, imin, isec
!
!-----------------------------------------------------------------------
!
! hdf variables
!
!-----------------------------------------------------------------------
!
  INTEGER :: sd_id,isource
!
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!  Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
  istatus=0
!
!-----------------------------------------------------------------------
!
! Open file
!
!-----------------------------------------------------------------------
!
  CALL asnctl ('NEWLOCAL', 1, ierr)
  CALL asnfile(radfname, '-F f77 -N ieee', ierr)

  lens=LEN(trim(radfname))
  IF(radfname(lens-3:lens)=='hdf4')THEN
    dmpfmt=2
  ELSE
    dmpfmt=1
  ENDIF
  print*,'radfname=',TRIM(radfname),'dmpfmt=',dmpfmt

  IF(dmpfmt==1)THEN
    CALL getunit( nchanl )
    OPEN(UNIT=nchanl,FILE=trim(radfname),ERR=399,                       &
         FORM='unformatted',STATUS='old')
!
!-----------------------------------------------------------------------
!
!  Read radar description variables
!
!-----------------------------------------------------------------------
!
    istatus=1
!
    READ(nchanl) stn
    READ(nchanl) ireftim,itime,vcpnum,idummy,idummy,                    &
                 idummy,idummy,idummy,idummy,idummy
!
    CALL abss2ctim(itime, iyr, imon, idy, ihr, imin, isec )
    WRITE(6,'(/a,i2.2,a,i2.2,a,i4.4,1X,i2.2,a,i2.2,a)')                 &
       'Getting grid info from data recorded at: ',                     &
       imon,'/',idy,'/',iyr,ihr,':',imin,' UTC'
!
    READ(nchanl) runname
    READ(nchanl) iradfmt,strhopt,mapproj,irngmin,irngmax,               &
               idummy,idummy,idummy,idummy,idummy

    READ(nchanl) dx,dy,dz,dzmin,ctrlat,                                 &
           ctrlon,trulat1,trulat2,trulon,sclfct
!
    CLOSE(nchanl)
    CALL retunit( nchanl )

    GO TO 400

    399     CONTINUE
    PRINT*,'Error reading the radar file:',radfname

    400     CONTINUE
  ELSE !HDF4 file 

    CALL hdfopen(trim(radfname), 1, sd_id)
    IF (sd_id < 0) THEN
      WRITE (6,*) "get_grid_from_rad: ERROR opening ",                  &
                trim(radfname)," for reading."
      istatus = 1
      STOP
    END IF
    CALL hdfrdc(sd_id, 4, 'radid', stn, istatus)
    CALL hdfrdi(sd_id, 'ireftim', ireftim, istatus)
    CALL hdfrdi(sd_id, 'itime', itime, istatus)
    CALL hdfrdc(sd_id, 40, 'runname', runname, istatus)
    CALL hdfrdi(sd_id, 'iradfmt', iradfmt, istatus)
    CALL hdfrdi(sd_id, 'strhopt', strhopt, istatus)
    CALL hdfrdi(sd_id, 'mapproj', mapproj, istatus)
    CALL hdfrdr(sd_id, 'dx', dx, istatus)
    CALL hdfrdr(sd_id, 'dy', dy, istatus)
    CALL hdfrdr(sd_id, 'dz', dz, istatus)
    CALL hdfrdr(sd_id, 'dzmin', dzmin, istatus)
    CALL hdfrdr(sd_id, 'ctrlat', ctrlat, istatus)
    CALL hdfrdr(sd_id, 'ctrlon', ctrlon, istatus)
    CALL hdfrdr(sd_id, 'trulat1', trulat1, istatus)
    CALL hdfrdr(sd_id, 'trulat2', trulat2, istatus)
    CALL hdfrdr(sd_id, 'trulon', trulon, istatus)
    CALL hdfrdr(sd_id, 'sclfct', sclfct, istatus)
    CALL abss2ctim(itime, iyr, imon, idy, ihr, imin, isec )
    iyr=MOD(iyr,100)
    WRITE(6,'(/a,i2.2,a,i2.2,a,i2.2,1X,i2.2,a,i2.2,a)')               &
       'Read grid info from remapped raw radar recorded at: ',        &
       imon,'/',idy,'/',iyr,ihr,':',imin,' UTC'

    CALL hdfclose(sd_id,istatus)
    istatus=1
  END IF

  RETURN
!
!  Destination for hdf read error
!

  115   CONTINUE
  WRITE(6,'(/a/)') ' Error reading data in get_grid_from_rad.'

  istatus=-11

  RETURN

END SUBROUTINE get_grid_from_rad