!
!##################################################################
!##################################################################
!######                                                      ######
!######      Advanced Regional Prediction System (ARPS)      ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!
!

PROGRAM PLT_RADAR_TILT,4
!
!-----------------------------------------------------------------------
!
!  PURPOSE:
!     Plot radar reflectivity and radial velocity in a tilt and
!     vertical cross-sections 
!
!-----------------------------------------------------------------------
!
!  AUTHOR: Ming Xue
!  03/19/02.
!
!  MODIFICATION HISTORY:
!  6/12/2005 Keith Brewster, CAPS
!  Added reading of radar emulator volume files (radfmt=2)
!
!
!-----------------------------------------------------------------------
!
!  Variable Declarations.
!
!-----------------------------------------------------------------------
!
  IMPLICIT NONE


  INTEGER, PARAMETER :: mxmapfile= 100
  INTEGER, PARAMETER :: nref_tilts_max=14
  INTEGER, PARAMETER :: nvel_tilts_max=14
  INTEGER, PARAMETER :: n_elevation_max=14
  INTEGER, PARAMETER :: n_azimuth_max=361

!
!-----------------------------------------------------------------------
!
!  Namelist 
!
!-----------------------------------------------------------------------
!

  CHARACTER (LEN=132) :: filepath
  CHARACTER (LEN=132) :: filetitle
  INTEGER :: radfmt
  INTEGER :: numfiles
  CHARACTER (LEN=132) :: files(mxmapfile)
  NAMELIST /input_data/ filepath,filetitle,radfmt,numfiles,files

  CHARACTER(LEN=4)    :: radar_symbol
  REAL :: ctrlat
  REAL :: ctrlon
  NAMELIST /radar_index/ radar_symbol,ctrlat,ctrlon

  INTEGER :: iout_ref_regular
  INTEGER :: iout_vel_regular
  CHARACTER (LEN=132) :: ref_regular_file 
  CHARACTER (LEN=132) :: vel_regular_file 
  CHARACTER (LEN=132) :: filetrailer 
  NAMELIST /output/ iout_ref_regular,iout_vel_regular,filetrailer

  INTEGER :: mapproj
  REAL :: trulat1
  REAL :: trulat2
  REAL :: trulon
  REAL :: sclfct
  NAMELIST /projection/ mapproj,trulat1,trulat2,trulon,sclfct

  INTEGER :: overlayrefcontour
  INTEGER :: n_elevation_ref
  INTEGER :: n_elevation_vel
  INTEGER :: n_azimuth_ref
  INTEGER :: n_azimuth_vel
  REAL :: elevations_ref(n_elevation_max)
  REAL :: elevations_vel(n_elevation_max)
  REAL :: azimuth_ref(n_azimuth_max)
  REAL :: azimuth_vel(n_azimuth_max)
  REAL :: h_range_max,h_range_max_e,h_range_max_w,h_range_max_s,h_range_max_n
  REAL :: z_range_max
  REAL :: elev_error_range
  INTEGER :: coltab_ref
  INTEGER :: ibgncol_ref
  INTEGER :: iendcol_ref
  CHARACTER(LEN=80) :: coltabfn_ref
  INTEGER :: coltab_vel
  INTEGER :: ibgncol_vel
  INTEGER :: iendcol_vel
  CHARACTER(LEN=80) :: coltabfn_vel
  NAMELIST /plotting/ h_range_max_e,h_range_max_w,h_range_max_s, &
                      h_range_max_n,z_range_max,elev_error_range,       &
                      overlayrefcontour,                                &
                      n_elevation_ref,elevations_ref,                   &
                      n_elevation_vel,elevations_vel,                   &
                      n_azimuth_ref,azimuth_ref,                        &
                      n_azimuth_vel,azimuth_vel,                        &
                      coltab_ref,ibgncol_ref,iendcol_ref,coltabfn_ref,  &
                      coltab_vel,ibgncol_vel,iendcol_vel,coltabfn_vel  


  INTEGER :: ovrmap
  INTEGER :: mapgrid
  INTEGER :: nmapfile
  CHARACTER (LEN=132) :: mapfile(mxmapfile)
  REAL :: latgrid
  REAL :: longrid
  NAMELIST /map_plot/ ovrmap,mapgrid,latgrid,longrid,nmapfile,mapfile
  INTEGER :: lmapfile
  REAL :: xorig, yorig
!
!-----------------------------------------------------------------------
!
!  plot variable 
!
!-----------------------------------------------------------------------
!
  REAL :: cl(100)

  REAL, ALLOCATABLE :: x(:,:)
  REAL, ALLOCATABLE :: y(:,:)
  REAL, ALLOCATABLE :: zp(:,:)
  REAL, ALLOCATABLE :: radialp(:,:)
  REAL, ALLOCATABLE :: zm(:,:)
  REAL, ALLOCATABLE :: radialm(:,:)
  REAL, ALLOCATABLE :: xw(:)
  REAL, ALLOCATABLE :: yw(:)
  REAL, ALLOCATABLE :: ref_rz(:,:) 
  REAL, ALLOCATABLE :: vel_rz(:,:) 

  INTEGER, ALLOCATABLE :: iw(:,:)

  INTEGER :: ncl
  INTEGER :: mode
!
!-----------------------------------------------------------------------
!
!  INPUT RADAR PARAMETER AND OBSERVATION 
!
!-----------------------------------------------------------------------
!
  REAL :: radar_lat
  REAL :: radar_lon
  REAL :: radar_elevation

  INTEGER :: iyear,imon,iday,ihour,imin,isec
  INTEGER, ALLOCATABLE :: iryear(:),irmon(:),irday(:),irhour(:),irmin(:),irsec(:)
  INTEGER, ALLOCATABLE :: ivyear(:),ivmon(:),ivday(:),ivhour(:),ivmin(:),ivsec(:)

  INTEGER :: nrefgate
  INTEGER :: nrefray
  REAL ::    rfstgat
  REAL ::    refgatsp

  INTEGER :: nvelgate
  INTEGER :: nvelray
  REAL ::    vfstgat
  REAL ::    velgatsp

  REAL ::    azmlutint

  CHARACTER(LEN=80) :: runname
  INTEGER :: lfnkey,abstsec
  INTEGER :: wrtuaref,wrtuavel,wrtvort,idummy,vcp
  REAL :: beamwid,rmisval,rngfval,curtim

  REAL, ALLOCATABLE :: razim(:)
  REAL, ALLOCATABLE :: razim_tem(:)

  REAL, ALLOCATABLE :: ref(:,:)
  REAL, ALLOCATABLE :: ref_tem(:,:)
  REAL, ALLOCATABLE :: ref_volume(:,:,:) ! Array containing one           
                                         ! full volume scan of
                                         ! reflectivity intepolated to 
                                         ! 1-degree spaced polar angles 
  REAL, ALLOCATABLE :: vel(:,:)
  REAL, ALLOCATABLE :: vel_tem(:,:)
  REAL, ALLOCATABLE :: vel_volume(:,:,:) ! Array containing one           
                                         ! full volume scan of
                                         ! reflectivity intepolated to 
                                         ! 1-degree spaced polar angles 
  REAL :: int_razim(361)
  REAL :: ref_eleva(nref_tilts_max)
  REAL :: vel_eleva(nvel_tilts_max)

  INTEGER :: maxgatevel
  INTEGER :: maxgateref
  INTEGER :: maxazim
  INTEGER :: maxelev

  REAL, ALLOCATABLE :: rngvvol(:,:)
  REAL, ALLOCATABLE :: azmvvol(:,:)
  REAL, ALLOCATABLE :: elvvvol(:,:)
  REAL, ALLOCATABLE :: velvol(:,:,:)

  REAL, ALLOCATABLE :: rngrvol(:,:)
  REAL, ALLOCATABLE :: azmrvol(:,:)
  REAL, ALLOCATABLE :: elvrvol(:,:)
  REAL, ALLOCATABLE :: refvol(:,:,:)

  REAL, ALLOCATABLE :: vnyquist(:)
  REAL, ALLOCATABLE :: uarefvol(:,:,:)
  REAL, ALLOCATABLE :: uavelvol(:,:,:)
  REAL, ALLOCATABLE :: vorvol(:,:,:)
!
!-----------------------------------------------------------------------
!
!  Misc. local variables:
!
!-----------------------------------------------------------------------
!
  INTEGER :: nref_tilts
  INTEGER :: nvel_tilts
  INTEGER :: ifiles   
  CHARACTER(LEN=100) :: string 
  CHARACTER(LEN=100) :: stringtime
  real :: radmax ,rad
  INTEGER :: j_razim_start
  INTEGER :: iazimuth
  real :: razim_start

  REAL :: elev_to_plot, xscale, yscale

  INTEGER :: kref,kvel,ktilt
  INTEGER :: kref_tilts,kvel_tilts
  REAL :: refmax, refmin
  REAL :: velmax, velmin
  REAL :: eleva, deg2rad

  REAL :: xradar, yradar, tem0,tem1,tem2,tem3,tem4
  LOGICAL :: fexist
  INTEGER :: zxplot_initialized = 0
  REAL :: missing_value = -999.0
  INTEGER :: iunit

  INTEGER :: i,j,k
  INTEGER :: jj

  CHARACTER(LEN=100) :: psfilename
  INTEGER :: ilen

  REAL :: factorx,factory

!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!  Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!


!-----------------------------------------------------------------------
! Input data file name and grid 
!-----------------------------------------------------------------------

  READ(5,input_data,ERR=100)
  WRITE(6,'(a)') 'Namelist input_data was sucessfully read in.'
! WRITE(*,input_data)
! WRITE(*,*)

  READ(5,radar_index) 
  WRITE(6,'(a)') 'Namelist radar_index was sucessfully read in.'
! WRITE(*,radar_index)
! WRITE(*,*)

  READ(5,output) 
  WRITE(6,'(a)') 'Namelist output was sucessfully read in.'


!-----------------------------------------------------------------------
! Input map projection parameters
!-----------------------------------------------------------------------
 
  sclfct = 1.0
  READ (5,projection,ERR=100)
  WRITE(6,'(a)') 'Namelist projection was sucessfully read in.'
! WRITE(*,projection)
! WRITE(*,*)

  READ(5,plotting)
  WRITE(6,'(a)') 'Namelist plotting sucessfully read in.'

  READ(5,map_plot,ERR=100)
  WRITE(6,'(a)') 'Namelist map_plot sucessfully read in.'
!
!
  h_range_max = (h_range_max_e+h_range_max_w)/2.0

!-----------------------------------------------------------------------
! Read in reflectivity data and interpolate into INTEGER azimuth grid
!-----------------------------------------------------------------------

  DO j=1,361
     int_razim(j)=(j-1)*1.0
  ENDDO

  DO ifiles=1,numfiles
!
!  read in data on a tilt
!
    INQUIRE(FILE=trim(filepath)//trim(files(ifiles)),EXIST = fexist )
    IF( .not. fexist) THEN
        write(6,'(a,a,a)') 'Radar data file ',                          &
                           trim(files(ifiles)),' not found.'
        cycle
    ENDIF

    WRITE(6,'(a,i4)') ' Radar format = ',radfmt
    IF( radfmt == 1 ) THEN
      print*,'To read file ', trim(files(ifiles))
      OPEN(27,file=trim(filepath)//trim(files(ifiles)),form='unformatted',  &
                                             status='old')

      READ(27) maxgatevel,maxgateref,maxazim,maxelev
      READ(27) radar_elevation,radar_lat, radar_lon
      READ(27) iyear,imon,iday,ihour,imin,isec

!      write(*,*) maxgatevel,maxgateref,maxazim,maxelev 
!      write(*,*) radar_elevation,radar_lat, radar_lon
!      write(*,*) iyear,imon,iday,ihour,imin,isec

      ALLOCATE( rngrvol(maxgateref,maxelev) )
      ALLOCATE( azmrvol(maxazim,maxelev) )
      ALLOCATE( elvrvol(maxazim,maxelev) )
      ALLOCATE( refvol(maxgateref,maxazim,maxelev) )

      ALLOCATE( rngvvol(maxgatevel,maxelev) )
      ALLOCATE( azmvvol(maxazim,maxelev) )
      ALLOCATE( elvvvol(maxazim,maxelev) )
      ALLOCATE( velvol(maxgatevel,maxazim,maxelev) )

      READ(27) rngrvol
      READ(27) azmrvol
      READ(27) elvrvol
      READ(27) refvol
  
      READ(27) rngvvol
      READ(27) azmvvol
      READ(27) elvvvol
      READ(27) velvol

      close(27)

      psfilename=trim(files(ifiles))
      ilen=len(trim(psfilename))
      iday=ICHAR(psfilename(ilen-12:ilen-12))-ICHAR("0")
      iday=iday*10+(ICHAR(psfilename(ilen-11:ilen-11))-ICHAR("0"))
      ihour=ICHAR(psfilename(ilen-9:ilen-9))-ICHAR("0")
      ihour=ihour*10+(ICHAR(psfilename(ilen-8:ilen-8))-ICHAR("0"))
      imin=ICHAR(psfilename(ilen-7:ilen-7))-ICHAR("0")
      imin=imin*10+(ICHAR(psfilename(ilen-6:ilen-6))-ICHAR("0"))

    ELSE IF (radfmt == 2) THEN   ! radar emulator binary file
      iunit=27
      WRITE(6,'(a,a)') ' Opening: ',TRIM(filepath)//TRIM(files(ifiles))
      OPEN(iunit,FILE=trim(filepath)//trim(files(ifiles)),STATUS='old', &
           FORM='unformatted')
      print *, ' opened file OK'
      READ(iunit) runname
      !print *, ' runname: ',runname
      lfnkey=80
      CALL gtlfnkey(runname,lfnkey)
!      WRITE(6,'(a,a)') ' Runname:',runname(1:lfnkey)
      READ(iunit) radar_symbol
!      WRITE(6,'(a,a)') ' Radar name:',radar_symbol
      READ(iunit) maxgatevel,maxgateref,maxazim,maxelev
!      WRITE(6,'(a,i6,a,i6,a,i6)')                                          &
!        ' Ngate : ',maxgatevel,' Nazim: ',maxazim,' maxelev: ',maxelev
      READ(iunit) iyear,imon,iday,ihour,imin,isec
!      WRITE(6,'(2(a,i2.2),a,i4.4,3(a,i2.2))')                              &
!        ' Date: ',imon,'/',iday,'/',iyear,' Time: ',ihour,':',imin,':',isec
      READ(iunit) radar_elevation,radar_lat,radar_lon
!      WRITE(6,'(a,f9.2,a,f9.2,a,f9.2)')                                      &
!        ' Latitude:',radar_lat,'  Longitude:',radar_lon, &
!        ' Elevation:',radar_elevation
      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(iyear,imon,iday,ihour,imin,isec,abstsec)
      READ(iunit) wrtuaref,wrtuavel,wrtvort,                                 &
                idummy,idummy,idummy,idummy,idummy

      WRITE(6,'(a)') ' Allocating volume memory '
      ALLOCATE(rngrvol(maxgateref,maxelev))
      ALLOCATE(azmrvol(maxazim,maxelev))
      ALLOCATE(elvrvol(maxazim,maxelev))
      ALLOCATE(refvol(maxgateref,maxazim,maxelev))
      IF(wrtuaref /= 0) ALLOCATE(uarefvol(maxgateref,maxazim,maxelev))

      ALLOCATE(vnyquist(maxelev))
      ALLOCATE(rngvvol(maxgatevel,maxelev))
      ALLOCATE(azmvvol(maxazim,maxelev))
      ALLOCATE(elvvvol(maxazim,maxelev))
      ALLOCATE(velvol(maxgatevel,maxazim,maxelev))
      IF(wrtuavel /= 0) ALLOCATE(uavelvol(maxgatevel,maxazim,maxelev))
      IF(wrtvort  /= 0) ALLOCATE(vorvol(maxgatevel,maxazim,maxelev))
                     
      WRITE(6,'(a)') ' Reading Reflectiving Arrays'
      READ(iunit) rngrvol
      READ(iunit) azmrvol
      READ(iunit) elvrvol
      READ(iunit) refvol
      IF( wrtuaref /= 0 ) READ(iunit) uarefvol
                                                                                           
      WRITE(6,'(a)') ' Reading Velocity Arrays'
      READ(iunit) vnyquist
      READ(iunit) rngvvol
      READ(iunit) azmvvol
      READ(iunit) elvvvol
      READ(iunit) velvol
      IF( wrtuavel /= 0 ) READ(iunit) uavelvol
      IF( wrtvort  /= 0 ) READ(iunit) vorvol
!
      WRITE(6,'(a)') ' Reading successfully completed'
      CLOSE(iunit)

    ELSE IF (radfmt == 4) THEN   ! CASA-formatted NetCDF file
      WRITE(6,'(a,i6,a)') ' Radar format number ',radfmt,' not yet implemented'
      STOP
    ELSE
      WRITE(6,'(a,i6,a)') ' Radar format number ',radfmt,' not supported.'
      STOP
    END IF

    IF ( mapproj == 0 ) THEN
        trulat1 = radar_lat
        trulat2 = radar_lat
        trulon  = radar_lon
    END IF

    kref_tilts=0
    DO k=1,maxelev
      if(elvrvol(1,k) >= -100 ) THEN
        kref_tilts=kref_tilts+1
        ref_eleva(kref_tilts) = elvrvol(1,k)
      ENDIF
    ENDDO
    nref_tilts = kref_tilts

!    WRITE(6,'(a)') ' Radar elevations read: '
!    write(6,'(10f8.1)') (ref_eleva(i),i=1,nref_tilts)
    nrefgate=0
    DO j=1,maxgateref
        if(rngrvol(j,1) >= -700 ) THEN
           nrefgate=nrefgate+1
        ENDIF
    ENDDO
    rfstgat=rngrvol(1,1)
    refgatsp=rngrvol(3,1)-rngrvol(2,1)

    ALLOCATE( ref_volume(nrefgate,361,nref_tilts) )
    ALLOCATE( razim(maxazim) )
    ALLOCATE( razim_tem(maxazim) )
 
    print *, ' Begin Reflectivity Interpolation'
    DO ktilt=1,nref_tilts
      nrefray=0
      DO j=1,maxazim
        if(azmrvol(j,ktilt) >= -100 ) THEN
           nrefray=nrefray+1
           razim(nrefray)=azmrvol(j,ktilt)
        ENDIF
      ENDDO
      IF( nrefray == maxazim) nrefray=nrefray-1
      
      ALLOCATE( ref(nrefgate,nrefray+1) )
      ALLOCATE( ref_tem(nrefgate,nrefray+1) )

      j_razim_start = 1
      razim_start = razim(1)

      DO j=2,nrefray
        if( razim(j).lt.razim_start ) then 
          j_razim_start = j
          exit
        endif
      ENDDO 

      DO j=1,nrefray
        DO i=1,nrefgate  
          ref(i,j)= refvol(i,j,ktilt)
        ENDDO
      ENDDO

      DO j=1,nrefray
        DO i=1,nrefgate
          IF(abs(ref(i,j)) >= 800.0 ) ref(i,j)= missing_value
        ENDDO
      ENDDO

!
! resort the data
!
      DO j=j_razim_start,nrefray
        razim_tem(j-j_razim_start+1) = razim(j)
      ENDDO
      DO j=1,j_razim_start-1
        razim_tem(nrefray-j_razim_start+1+j) = razim(j)
      ENDDO

      razim_tem(nrefray+1) = razim_tem(1) + 360.0

      DO i=1,nrefgate
        DO j=j_razim_start,nrefray
          ref_tem(i,j-j_razim_start+1) = ref(i,j)
        ENDDO
        DO j=1,j_razim_start-1
          ref_tem(i,nrefray-j_razim_start+1+j)=ref(i,j)
        ENDDO
        ref_tem(i,nrefray+1)=ref_tem(i,1)
      ENDDO

      razim = razim_tem 
      ref = ref_tem
!
! interpolate into regular azimuth value and save in 3d space
!
      DO i=1,nrefgate
        DO j=1,361
          tem0 = int_razim(j)

          IF( tem0 == 0.0 .and. tem0.lt. razim(1) ) then
            tem0 = 360.0
          ENDIF

          DO jj=max(1,nint(tem0-20.0)),nrefray
            tem1 = razim(jj)
            tem2 = razim(jj+1)
            IF((tem0.ge.tem1).and.(tem0.lt.tem2)) then
              tem3 = ref(i,jj)
              tem4 = ref(i,jj+1)
               IF( abs(tem3-missing_value) <=0.001 .and.                &
                   abs(tem4-missing_value) <=0.001  ) THEN
                ref_volume(i,j,ktilt) =                            &
                            tem3+(tem4-tem3)*(tem0-tem1)/(tem2-tem1)
              ELSE
                IF( abs(tem0-tem1).lt.abs(tem0-tem2)) THEN
                  ref_volume(i,j,ktilt) = tem3
                ELSE
                  ref_volume(i,j,ktilt) = tem4
                ENDIF
              ENDIF
              GOTO 300
            ENDIF
          ENDDO
          ref_volume(i,j,ktilt) = missing_value 
300       CONTINUE
        ENDDO
      ENDDO

      DEALLOCATE( ref )
      DEALLOCATE( ref_tem )
      DO i=1,nrefgate
          ref_volume(i,361,ktilt) =  ref_volume(i,1,ktilt)
      ENDDO
    ENDDO ! ktilt

    DEALLOCATE( razim )
    DEALLOCATE( razim_tem )

! output data for further retrival

    IF( iout_ref_regular == 1 ) THEN
      write(ref_regular_file,'(a,a,a,a)')  trim(filepath),trim(files(ifiles)),    &
                     '.ref_regular',  trim(filetrailer)
      CALL OUTPUT_REGULAR(ref_regular_file,nref_tilts_max,nref_tilts,     &
                     radar_symbol,radar_lat,radar_lon,radar_elevation,   &
                     nrefgate,361,rfstgat,refgatsp,int_razim,ref_eleva,  &
                     ref_volume )
    ENDIF
!-----------------------------------------------------------------------
!  interpolate radial velocity into integer azimuth grid
!-----------------------------------------------------------------------

    print *, ' Begin velocity interpolation'
    kvel_tilts=0
    DO k=1,maxelev
      if(elvvvol(1,k) >= -100 ) THEN
        kvel_tilts=kvel_tilts+1
        vel_eleva(kvel_tilts) = elvvvol(1,k)
      ENDIF
    ENDDO
    nvel_tilts = kvel_tilts

    nvelgate=0
    DO j=1,maxgatevel
        if(rngvvol(j,1) >= -700 ) THEN
           nvelgate=nvelgate+1
        ENDIF
    ENDDO
    vfstgat=rngvvol(1,1)
    velgatsp=rngvvol(3,1)-rngvvol(2,1)

    ALLOCATE( vel_volume(nvelgate,361,nvel_tilts) )

    ALLOCATE( razim(maxazim) )
    ALLOCATE( razim_tem(maxazim) )

    DO ktilt=1,nvel_tilts

      nrefray=0
      DO j=1,maxazim
        if(azmvvol(j,ktilt) >= -100 ) THEN
           nrefray=nrefray+1
           razim(nrefray)=azmvvol(j,ktilt)
        ENDIF
      ENDDO
      nvelray=nrefray
      if( nrefray == maxazim ) nvelray=nrefray-1

      ALLOCATE( vel(nvelgate,nvelray+1) )
      ALLOCATE( vel_tem(nvelgate,nvelray+1) )

      j_razim_start = 1
      razim_start = razim(1)

      DO j=2,nvelray
        if( razim(j).lt.razim_start ) then 
          j_razim_start = j
          exit
        endif
      ENDDO 

      DO j=1,nvelray
        DO i=1,nvelgate
          vel(i,j)= velvol(i,j,ktilt)
        ENDDO
      ENDDO

! rearrange missing data value
      DO j=1,nvelray
        DO i=1,nvelgate
          IF(abs(vel(i,j)) >= 700.0 ) vel(i,j)= missing_value
        ENDDO
      ENDDO

!
! resort the data
!
      DO j=j_razim_start,nvelray
        razim_tem(j-j_razim_start+1) = razim(j)
      ENDDO
      DO j=1,j_razim_start-1
        razim_tem(nvelray-j_razim_start+1+j) = razim(j)
      ENDDO

      razim_tem(nvelray+1) = razim_tem(1) + 360.0

      DO i=1,nvelgate
        DO j=j_razim_start,nvelray
          vel_tem(i,j-j_razim_start+1) = vel(i,j)
        ENDDO
        DO j=1,j_razim_start-1
          vel_tem(i,nvelray-j_razim_start+1+j)=vel(i,j)
        ENDDO
        vel_tem(i,nvelray+1)=vel_tem(i,1)
      ENDDO

      razim = razim_tem 
      vel = vel_tem

!
! interpolate into regular azimuth value and save in 3d space
!
      DO i=1,nvelgate
        DO j=1,361
          tem0 = int_razim(j)

          IF( tem0 == 0.0 .and. tem0.lt. razim(1) ) then
            tem0 = 360.0
          ENDIF

          DO jj=max(1,nint(tem0-20.0)),nvelray
            tem1 = razim(jj)
            tem2 = razim(jj+1)
            IF((tem0.ge.tem1).and.(tem0.lt.tem2)) then
              tem3 = vel(i,jj)
              tem4 = vel(i,jj+1)
               IF( abs(tem3-missing_value) <=0.001 .and.                &
                   abs(tem4-missing_value) <=0.001  ) THEN
                vel_volume(i,j,ktilt) =                            &
                            tem3+(tem4-tem3)*(tem0-tem1)/(tem2-tem1)
              ELSE
                IF( abs(tem0-tem1).lt.abs(tem0-tem2)) THEN
                  vel_volume(i,j,ktilt) = tem3
                ELSE
                  vel_volume(i,j,ktilt) = tem4
                ENDIF
              ENDIF
              GOTO 200
            ENDIF
          ENDDO
          vel_volume(i,j,ktilt) = missing_value 
200       CONTINUE
        ENDDO
      ENDDO

      DEALLOCATE( vel )
      DEALLOCATE( vel_tem )
      DO i=1,nvelgate
         vel_volume(i,361,ktilt) = vel_volume(i,1,ktilt)
      ENDDO

    ENDDO ! ktilt

    DEALLOCATE( razim )
    DEALLOCATE( razim_tem )

! output data for further retrival

    IF( iout_vel_regular == 1 ) THEN
      write(vel_regular_file,'(a,a,a,a)') trim(filepath),trim(files(ifiles)),  &
                              '.vel_regular', trim(filetrailer)
      CALL OUTPUT_REGULAR(vel_regular_file,nvel_tilts_max,nvel_tilts,    &
                     radar_symbol,radar_lat,radar_lon,radar_elevation,   &
                     nvelgate,361,vfstgat,velgatsp,int_razim,vel_eleva,  &
                     vel_volume )
    ENDIF

!-----------------------------------------------------------------------
! plot
!-----------------------------------------------------------------------
  print *, ' Begin plotting'
  factorx=0.3
  factory=0.3
  if(h_range_max_w + h_range_max_e > h_range_max_s + h_range_max_n ) then
     h_range_max=(h_range_max_e+h_range_max_w)/2
     factory=factorx*(h_range_max_s + h_range_max_n)/(h_range_max_w + h_range_max_e)
  else
     factorx=factory*(h_range_max_w + h_range_max_e)/(h_range_max_s + h_range_max_n)
     h_range_max=(h_range_max_n+h_range_max_s)/2
  endif
!-----------------------------------------------------------------------
! plot reflectivity on a tilt
!-----------------------------------------------------------------------

  deg2rad = atan(1.0)/45.0
  IF( n_elevation_ref > 0 .or. n_azimuth_ref > 0 .or.                    &
      n_elevation_vel > 0 .or. n_azimuth_vel > 0 ) THEN
    IF( zxplot_initialized == 0 ) then 
      CALL xpsfn('zxout'//'.ps', 5) 
                    ! PS output will be called zxout.ps
      CALL xpaprlnth( 1.0 )

      CALL xdevic     ! beigin graphic
      zxplot_initialized = 1 
    ENDIF
  ENDIF

  print *, ' nref_tilts, ref_elva: ',nref_tilts,ref_eleva

  IF(n_elevation_ref > 0) THEN

    IF( nref_tilts <= 0 ) THEN
      WRITE(*,*) ' There are no data to be plotted ???'
      STOP 119
    ENDIF

    ALLOCATE( x(nrefgate,361))
    ALLOCATE( y(nrefgate,361))

    DO ktilt = 1,n_elevation_ref

      elev_to_plot = elevations_ref(ktilt)

      kref = 0 
      DO k = 1,nref_tilts
        IF( abs( ref_eleva(k)-elev_to_plot )                   &
                            < elev_error_range ) THEN
          kref = k
          EXIT
        ENDIF
      ENDDO

      IF(kref == 0 ) CYCLE  ! no elevation angle 
                            ! within error range was found
      refmin = 1000.0
      refmax =-1000.0
      velmin = 1000.0
      refmax =-1000.0

      eleva=ref_eleva(kref)

      DO j=1,361
        DO i=1,nrefgate
          rad = 0.001 * rngrvol(i,kref)
          x(i,j)= rad * cos( (90-int_razim(j))*deg2rad ) 
          y(i,j)= rad * sin( (90-int_razim(j))*deg2rad ) 

          tem0 = ref_volume(i,j,kref)
          IF(tem0 /= missing_value ) then 
            refmax=max(tem0,refmax)
            refmin=min(tem0,refmin)
          ENDIF
        END DO
      END DO

!      print*,'refmin, refmax = ', refmin, refmax
!
!-----------------------------------------------------------------------
! Define plotting space.
!
      CALL xpspac(0.5-factorx,0.5+factorx,0.5-factory,0.5+factory)
      CALL xmap(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)

      CALL xlabmask(1)

      IF( coltab_ref == -1 ) CALL xstctfn(coltabfn_ref)
      CALL xsetclrs(coltab_ref)  ! Use internally defined color map number 6
      CALL xcolor(1)    ! Set color to black
      CALL xcfont(3)
!
      call xaxfmt('(I4)')
!
! Set tentative color interval and limit on the min/max number of contours
!
      cl(1)=0.0
      cl(2)=5.0           ! Set tentative contour interval
      CALL xnctrs(2,100)  ! Set lower and upper limits
                          ! on the number of contours allowed
                          ! It's used by both xcolfil and xclimit
      CALL xnctrs(5,20)   ! Set lower and upper limits
      mode=2

      call xctrbadv(1)    ! Turn on bad value checking
                          !     in contouring routine
      call xbadval( missing_value ) ! Specify bad value flag
!
! plot a color filled contour field for positive values
!
      CALL xctrclr(ibgncol_ref,iendcol_ref)   ! Use colors between 10 and 39 inclusive

      CALL xctrlim(5.0, 75.0) ! Only contours above zero are plotted

      ALLOCATE( iw(nrefgate,361) )
      ALLOCATE( xw(8*nrefgate) )
      ALLOCATE( yw(8*nrefgate) )

      CALL xwindw(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)
      Print*,'To plot reflectivity field at elevation angle = ', eleva
      CALL xcolfil(ref_volume(1,1,kref),x,y,iw,xw,yw,                   &
                       nrefgate,nrefgate,361, cl, ncl,mode)

      if ( overlayrefcontour == 1 ) THEN
!      call XCLFMT('I2')
        call XCLTYP(0)
        CALL xctrclr(14,15)   ! Use colors between 10 and 39 inclusive
        mode=3
        ncl=1
        cl(1)=15.0
        CALL XCONTA(ref_volume(1,1,kref),x,y,IW,nrefgate,nrefgate,361, CL, NCL,MODE)
        cl(1)=30.0
        CALL XCONTA(ref_volume(1,1,kref),x,y,IW,nrefgate,nrefgate,361, CL, NCL,MODE)
        cl(1)=45.0
        CALL XCONTA(ref_volume(1,1,kref),x,y,IW,nrefgate,nrefgate,361, CL, NCL,MODE)
        cl(1)=55.0
        CALL XCONTA(ref_volume(1,1,kref),x,y,IW,nrefgate,nrefgate,361, CL, NCL,MODE)
      endif

      CALL xwdwof
      CALL xaxsca(-h_range_max_w, h_range_max_e, 0.1*h_range_max,          &
                  -h_range_max_s, h_range_max_n, 0.1*h_range_max)

      DEALLOCATE( iw )
      DEALLOCATE( xw )
      DEALLOCATE( yw )


      WRITE(string,'(a,f5.2)') 'Reflectivity at Elevation Angle=',eleva
      CALL xchsiz(0.025*2*h_range_max )  ! Set character size
      CALL xcharc((-h_range_max_w+h_range_max_e)*0.5, &
           h_range_max_n+2*h_range_max*0.04, trim(string) )

      WRITE(stringtime,'(a,i2.2,a,i2.2,a,i4,a,i2.2,a,i2.2)') 'Scan Time:',      &
            imon,'/',iday,'/',iyear, ' ',ihour,':',imin 
      CALL xchsiz(0.025*2*h_range_max )  ! Set character size
      CALL xcharc((-h_range_max_w+h_range_max_e)*0.5, &
           h_range_max_n+2*h_range_max*0.01, trim(stringtime) )

      CALL xchsiz(0.02* 2*h_range_max )  ! Set character size
      CALL xcpalet(1)            ! Plot horizontal color palette

      xscale = h_range_max
      yscale = h_range_max
      xorig = -(h_range_max_e+h_range_max_w)/2.0
      yorig = -(h_range_max_s+h_range_max_n)/2.0

      xradar = 0.0
      yradar = 0.0
      CALL xthick(3)
      CALL xpenup( xradar-xscale*0.02, yradar )
      CALL xpendn( xradar+xscale*0.02, yradar )
      CALL xpenup( xradar, yradar-yscale*0.02 )
      CALL xpendn( xradar, yradar+yscale*0.02 )
      call xthick(1)
      CALL xchsiz(0.02* 2*h_range_max )  ! Set character size
      CALL xcharc(xradar, yradar-0.05*yscale, radar_symbol)

      xscale = h_range_max_e+h_range_max_w
      yscale = h_range_max_s+h_range_max_n
      CALL XSTPJGRD(mapproj,trulat1,trulat2,trulon,ctrlat,ctrlon,       & 
                    xscale,yscale,xorig,yorig)
      CALL xwindw(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)

      IF( ovrmap /= 0 ) THEN
        DO i=1,MIN(mxmapfile,nmapfile)
          lmapfile=len_trim(mapfile(i))
          WRITE(6,'(1x,a,a)') 'Input was ',trim(mapfile(i))

          INQUIRE(FILE=trim(mapfile(i)), EXIST = fexist )
          IF( .NOT.fexist) THEN
            WRITE(6,'(a)') 'Map file '//mapfile(i)(1:lmapfile)//         &
                 ' not found. Corresponding map no plotted.'
          ELSE
            CALL xdrawmap(10,mapfile(i)(1:lmapfile),latgrid,longrid)
          END IF
        END DO
      END IF

      CALL xwdwof

      CALL xframe

    ENDDO ! ktilt 

    DEALLOCATE( x )
    DEALLOCATE( y )

  ENDIF  !  n_elevation_ref>0
!
!-----------------------------------------------------------------------
! To plot vertical cross-sections of reflectivity
!-----------------------------------------------------------------------
!

  IF(n_azimuth_ref > 0) THEN

    IF( nref_tilts <= 0 ) THEN
      WRITE(*,*) ' There are no data to be plotted ???'
      STOP 119
    ENDIF

    ALLOCATE( zp(nrefgate,nref_tilts))
    ALLOCATE( zm(nrefgate,nref_tilts))
    ALLOCATE( radialp(nrefgate,nref_tilts))
    ALLOCATE( radialm(nrefgate,nref_tilts))
    DO k=1,nref_tilts
      DO i=1,nrefgate
        rad = 0.001*(rfstgat + (i-1)*refgatsp)
        radialp(i,k)=rad*cos( ref_eleva(k)*deg2rad )
        zp(i,k)     =rad*sin( ref_eleva(k)*deg2rad )
      END DO
      DO i=1,nrefgate
        rad = 0.001*(rfstgat + (i-1)*refgatsp)
        radialm(i,k)=-rad*cos( ref_eleva(k)*deg2rad )
        zm(i,k)     = rad*sin( ref_eleva(k)*deg2rad )
      END DO
    END DO

    DO iazimuth= 1,n_azimuth_ref

      Print*,'To plot vertical cross-section at azimuth angle = ',      &
                                azimuth_ref(iazimuth)

      CALL xpspac(0.1,0.9,0.2,0.6)
      z_range_max = 12.0

!      CALL xmap(-h_range_max, h_range_max, 0.0, z_range_max)
      CALL xmap(0, h_range_max, 0.0, z_range_max)

      CALL xlabmask(1)

      IF( coltab_ref == -1 ) CALL xstctfn(coltabfn_ref)
      CALL xsetclrs(coltab_ref)  ! Use internally defined color map number 6
      CALL xcolor(1)    ! Set color to black
      CALL xcfont(3)
!
!
! Set tentative color interval and limit on the min/max number of contours
!
      cl(1)=0.0
      cl(2)=5.0           ! Set tentative contour interval
      CALL xnctrs(2,100)  ! Set lower and upper limits
                          ! on the number of contours allowed
                          ! It's used by both xcolfil and xclimit
      CALL xnctrs(5,20)  ! Set lower and upper limits
      mode=2

      CALL xctrbadv(1)   ! Turn on bad value checking
                         ! in contouring routine
      CALL xbadval( missing_value ) ! Specify bad value flag
!
! plot a color filled contour field for positive values
!
      CALL xctrclr(ibgncol_ref,iendcol_ref) ! Use colors between 10 and 39 inclusive

      CALL xctrlim(5.0, 75.0) ! Only contours above zero are plotted
      CALL xwindw(-h_range_max, h_range_max, 0.0, z_range_max)

      ALLOCATE( iw(nrefgate,nref_tilts) )
      ALLOCATE( xw(8*nrefgate) )
      ALLOCATE( yw(8*nrefgate) )
      ALLOCATE( ref_rz(nrefgate,nref_tilts) )

      jj = min(361,max(1,nint(azimuth_ref(iazimuth))+1 )) 
      DO k=1,nref_tilts
        DO i=1,nrefgate
          ref_rz(i,k) = ref_volume(i,jj,k)
        ENDDO
      ENDDO
 
      CALL xcolfil(ref_rz,radialp,zp,iw,xw,yw,nrefgate,nrefgate,        &
                              nref_tilts,cl,ncl,mode)

!      tem0 = azimuth_ref(iazimuth)+180.0

101   CONTINUE
!      IF( tem0 > 360.0 ) then 
!        tem0 = tem0 - 360.0
!        GOTO 101 
!      ENDIF
!
!      jj = nint(tem0)+1
!      DO k=1,nref_tilts
!        DO i=1,nrefgate
!          ref_rz(i,k) = ref_volume(i,jj,k)
!        ENDDO
!      ENDDO
!      CALL xcolfil(ref_rz,radialm,zm,iw,xw,yw,nrefgate,nrefgate,       &
!                           nref_tilts,cl,ncl,mode)

      DEALLOCATE( iw )
      DEALLOCATE( xw )
      DEALLOCATE( yw )
      DEALLOCATE( ref_rz )

      CALL xwdwof

!      CALL xaxsca(-h_range_max, h_range_max, 0.1*h_range_max,           &
!                       0.0, z_range_max, 0.5 )
      CALL xaxsca(0, h_range_max, 10.0,0.0, z_range_max, 1.0)

      WRITE(string,'(a,f6.2)')                                         &
            ' Reflectivity at Azimuth Angle=',int_razim(jj)
      CALL xchsiz(0.06*z_range_max )  ! Set character size
      CALL xcharc(h_range_max/2.0, z_range_max*1.10, trim(string) )

      WRITE(stringtime,'(a,i2.2,a,i2.2,a,i4,a,i2.2,a,i2.2)') 'First Scan Time:',&
            imon,'/',iday,'/',iyear,               &
            ' ',ihour,':',imin
      CALL xchsiz(0.05*z_range_max )  ! Set character size
      CALL xcharc(h_range_max/2.0, z_range_max*1.04, trim(stringtime) )

      CALL xchsiz(0.04*z_range_max )  ! Set character size
      CALL xcpalet(1)            ! Plot horizontal color palette

      CALL xframe

    ENDDO ! iazimuth

    DEALLOCATE(zp)
    DEALLOCATE(zm)
    DEALLOCATE(radialp)
    DEALLOCATE(radialm)

  ENDIF   ! n_azimuth_ref


!-----------------------------------------------------------------------
! plot radial velocity on a tilt
!-----------------------------------------------------------------------

  IF(n_elevation_vel > 0) THEN

    IF( nvel_tilts <= 0 ) THEN
      WRITE(*,*) ' There are no radial velocity data to be plotted ???'
      STOP 119
    ENDIF

    ALLOCATE( x(nvelgate,361))
    ALLOCATE( y(nvelgate,361))

    DO ktilt = 1,n_elevation_vel

      elev_to_plot = elevations_vel(ktilt)

      kvel = 0 
      DO k = 1,nvel_tilts
        IF( abs( vel_eleva(k)-elev_to_plot )                   &
                  < elev_error_range ) THEN
          kvel = k
          EXIT
        ENDIF
      ENDDO

      IF(kvel == 0 ) CYCLE  ! no elevation angle 
                            ! within error range was found

      eleva=vel_eleva(kvel)

      velmin = 1000.0
      velmax =-1000.0

      DO j=1,361
        DO i=1,nvelgate
          rad = rngvvol(i,kvel)
          rad = 0.001 * rad
          x(i,j)= rad * cos( (90-int_razim(j))*deg2rad ) 
          y(i,j)= rad * sin( (90-int_razim(j))*deg2rad ) 

          tem0 = vel_volume(i,j,kvel)
          IF(tem0 /= missing_value ) then 
            velmax=max(tem0,velmax)
            velmin=min(tem0,velmin)
          ENDIF
        END DO
      END DO

      print*,'velmin, velmax = ', velmin, velmax
!
! Define plotting space.
!
      CALL xpspac(0.5-factorx,0.5+factorx,0.5-factory,0.5+factory)
      CALL xmap(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)

      CALL xlabmask(1)

      IF( coltab_vel == -1 ) CALL xstctfn(coltabfn_vel)
      CALL xsetclrs(coltab_vel)  ! Use internally defined color map number 6
      CALL xcolor(1)    ! Set color to black
      CALL xcfont(3)
!
      call xaxfmt('(I4)')
!
! Set tentative color interval and limit on the min/max number of contours
!
      cl(1)=0.0
      cl(2)=4.0          ! Set tentative contour interval
      CALL xnctrs(2,100)  ! Set lower and upper limits
                          ! on the number of contours allowed
                          ! It's used by both xcolfil and xclimit
      CALL xnctrs(2,100)   ! Set lower and upper limits
      mode=2

      call xctrbadv(1)    ! Turn on bad value checking
                          !     in contouring routine
      call xbadval( missing_value ) ! Specify bad value flag
!
! plot a color filled contour field for positive values
!
      CALL xctrclr(ibgncol_vel,iendcol_vel)   ! Use colors between 10 and 39 inclusive

      CALL xctrlim(-40.0, 40.0) ! Only contours above zero are plotted
!      CALL xctrlim(-9999.0, -9999.0) ! Only contours above zero are plotted

      ALLOCATE( iw(nvelgate,361) )
      ALLOCATE( xw(8*nvelgate) )
      ALLOCATE( yw(8*nvelgate) )

      CALL xwindw(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)
      Print*,'To plot radial velocity field at elevation angle =', eleva
      CALL xcolfil(vel_volume(1,1,kvel),x,y,iw,xw,yw,                   &
                       nvelgate,nvelgate,361, cl, ncl,mode)

      DEALLOCATE( iw )
      DEALLOCATE( xw )
      DEALLOCATE( yw )

      CALL xwdwof
      CALL xaxsca(-h_range_max_w, h_range_max_e, 0.1*h_range_max,          &
                  -h_range_max_s, h_range_max_n, 0.1*h_range_max)

      WRITE(string,'(a,f5.2)') 'Radial velocity at Elevation Angle=',eleva
      CALL xchsiz(0.025*2*h_range_max )  ! Set character size
      CALL xcharc((-h_range_max_w+h_range_max_e)*0.5, &
           h_range_max_n+2*h_range_max*0.04, trim(string) )

      WRITE(stringtime,'(a,i2.2,a,i2.2,a,i4.2,a,i2.2,a,i2.2)') 'Scan Time:',      &
            imon,'/',iday,'/',iyear,               &
            ' ',ihour,':',imin
      CALL xchsiz(0.025*2*h_range_max )  ! Set character size
      CALL xcharc((-h_range_max_w+h_range_max_e)*0.5, &
           h_range_max_n+2*h_range_max*0.01, trim(stringtime) )

      CALL xchsiz(0.02* 2*h_range_max )  ! Set character size
      CALL xcpalet(1)            ! Plot horizontal color palette

      xscale = h_range_max
      yscale = h_range_max
      xorig = -(h_range_max_e+h_range_max_w)/2.0
      yorig = -(h_range_max_s+h_range_max_n)/2.0

      xradar = 0.0
      yradar = 0.0
      CALL xthick(3)
      CALL xpenup( xradar-xscale*0.02, yradar )
      CALL xpendn( xradar+xscale*0.02, yradar )
      CALL xpenup( xradar, yradar-yscale*0.02 )
      CALL xpendn( xradar, yradar+yscale*0.02 )
      call xthick(1)
      CALL xchsiz(0.02* 2*h_range_max )  ! Set character size
      CALL xcharc(xradar, yradar-0.05*yscale, radar_symbol)

      xscale = h_range_max_e+h_range_max_w
      yscale = h_range_max_s+h_range_max_n
      CALL XSTPJGRD(mapproj,trulat1,trulat2,trulon,ctrlat,ctrlon,       & 
                    xscale,yscale,xorig,yorig)
      CALL xwindw(-h_range_max_w, h_range_max_e, -h_range_max_s, h_range_max_n)

      IF( ovrmap /= 0 ) THEN
        DO i=1,MIN(mxmapfile,nmapfile)
          lmapfile=len_trim(mapfile(i))
          WRITE(6,'(1x,a,a)') 'Input was ',trim(mapfile(i))

          INQUIRE(FILE=trim(mapfile(i)), EXIST = fexist )
          IF( .NOT.fexist) THEN
            WRITE(6,'(a)') 'Map file '//mapfile(i)(1:lmapfile)//         &
                 ' not found. Corresponding map no plotted.'
          ELSE
            CALL xdrawmap(10,mapfile(i)(1:lmapfile),latgrid,longrid)
          END IF
        END DO
      END IF

      CALL xwdwof

      CALL xframe

    ENDDO ! ktilt 

    DEALLOCATE( x )
    DEALLOCATE( y )

  ENDIF  !  n_elevation_vel>0
!
!-----------------------------------------------------------------------
! To plot vertical cross-sections of radial velocity
!-----------------------------------------------------------------------
!

  IF(n_azimuth_vel > 0) THEN

    IF( nvel_tilts <= 0 ) THEN
      WRITE(*,*) ' There are no radial velocity data to be plotted ???'
      STOP 119
    ENDIF

    ALLOCATE( zp(nvelgate,nvel_tilts))
    ALLOCATE( zm(nvelgate,nvel_tilts))
    ALLOCATE( radialp(nvelgate,nvel_tilts))
    ALLOCATE( radialm(nvelgate,nvel_tilts))
    DO k=1,nvel_tilts
      DO i=1,nvelgate
        rad = 0.001*(vfstgat + (i-1)*velgatsp)
        radialp(i,k)=rad*cos( vel_eleva(k)*deg2rad )
        zp(i,k)     =rad*sin( vel_eleva(k)*deg2rad )
      END DO
      DO i=1,nvelgate
        rad = 0.001*(vfstgat + (i-1)*velgatsp)
        radialm(i,k)=-rad*cos( vel_eleva(k)*deg2rad )
        zm(i,k)     = rad*sin( vel_eleva(k)*deg2rad )
      END DO
    END DO

    DO iazimuth= 1,n_azimuth_vel

      Print*,'To plot vertical cross-section at azimuth angle = ',      &
                                azimuth_vel(iazimuth)

      CALL xpspac(0.1,0.9,0.2,0.6)
      z_range_max = 12.0

!      CALL xmap(-h_range_max, h_range_max, 0.0, z_range_max)
      CALL xmap(0.0, h_range_max, 0.0, z_range_max)

      CALL xlabmask(1)

      IF( coltab_vel == -1 ) CALL xstctfn(coltabfn_vel)
      CALL xsetclrs(coltab_vel)  ! Use internally defined color map number 6
      CALL xcolor(1)    ! Set color to black
      CALL xcfont(3)
!
!
! Set tentative color interval and limit on the min/max number of contours
!
      cl(1)=0.0
      cl(2)=4.0          ! Set tentative contour interval
      CALL xnctrs(2,100)  ! Set lower and upper limits
                          ! on the number of contours allowed
                          ! It's used by both xcolfil and xclimit
      CALL xnctrs(5,20)  ! Set lower and upper limits
      mode=2

      CALL xctrbadv(1)   ! Turn on bad value checking
                         ! in contouring routine
      CALL xbadval( missing_value ) ! Specify bad value flag
!
! plot a color filled contour field for positive values
!
      CALL xctrclr(ibgncol_vel,iendcol_vel) ! Use colors between 10 and 39 inclusive

      CALL xctrlim(-40.0, 40.0) ! Only contours above zero are plotted
      CALL xwindw(-h_range_max, h_range_max, 0.0, z_range_max)

      ALLOCATE( iw(nvelgate,nvel_tilts) )
      ALLOCATE( xw(8*nvelgate) )
      ALLOCATE( yw(8*nvelgate) )
      ALLOCATE( vel_rz(nvelgate,nvel_tilts) )

      jj = min(361,max(1,nint(azimuth_vel(iazimuth))+1 )) 
      DO k=1,nvel_tilts
        DO i=1,nvelgate
          vel_rz(i,k) = vel_volume(i,jj,k)
        ENDDO
      ENDDO
 
      CALL xcolfil(vel_rz,radialp,zp,iw,xw,yw,nvelgate,nvelgate,        &
                              nvel_tilts,cl,ncl,mode)

!      tem0 = azimuth_vel(iazimuth)+180.0
!
!102   CONTINUE
!      IF( tem0 > 360.0 ) then 
!        tem0 = tem0 - 360.0
!        GOTO 102 
!      ENDIF
!
!      jj = nint(tem0)+1
!      DO k=1,nvel_tilts
!        DO i=1,nvelgate
!          vel_rz(i,k) = vel_volume(i,jj,k)
!        ENDDO
!      ENDDO
!      CALL xcolfil(vel_rz,radialm,zm,iw,xw,yw,nvelgate,nvelgate,       &
!                           nvel_tilts,cl,ncl,mode)

      DEALLOCATE( iw )
      DEALLOCATE( xw )
      DEALLOCATE( yw )
      DEALLOCATE( vel_rz )

      CALL xwdwof

!      CALL xaxsca(-h_range_max, h_range_max, 0.1*h_range_max,           &
!                       0.0, z_range_max, 0.5 )
      CALL xaxsca(0.0, h_range_max, 10.0,0.0, z_range_max, 1.0)

      WRITE(string,'(a,f6.2)')                                         &
            ' Radial velocity at Azimuth Angle=',int_razim(jj)
      CALL xchsiz(0.06*z_range_max )  ! Set character size
      CALL xcharc(h_range_max/2.0, z_range_max*1.10, trim(string) )

      WRITE(stringtime,'(a,i2.2,a,i2.2,a,i4,a,i2.2,a,i2.2)') 'First Scan Time:',&
            imon,'/',iday,'/',iyear,               &
            ' ',ihour,':',imin
      CALL xchsiz(0.05*z_range_max )  ! Set character size
      CALL xcharc(h_range_max/2.0, z_range_max*1.04, trim(stringtime) )

      CALL xchsiz(0.04*z_range_max )  ! Set character size
      CALL xcpalet(1)            ! Plot horizontal color palette

      CALL xframe

    ENDDO ! iazimuth

    DEALLOCATE(zp)
    DEALLOCATE(zm)
    DEALLOCATE(radialp)
    DEALLOCATE(radialm)

  ENDIF   ! n_azimuth_vel

!
!-----------------------------------------------------------------------
! END of PLOT
!-----------------------------------------------------------------------
!
    DEALLOCATE( rngvvol)
    DEALLOCATE( azmvvol)
    DEALLOCATE( elvvvol)
    DEALLOCATE( velvol)
    DEALLOCATE( rngrvol)
    DEALLOCATE( azmrvol)
    DEALLOCATE( elvrvol)
    DEALLOCATE( refvol)

    DEALLOCATE( ref_volume )
    DEALLOCATE( vel_volume )

  ENDDO ! ifiles

  IF( zxplot_initialized == 1 ) CALL xgrend  ! End graphics

  STOP  999

100 Continue
  Write(6,'(a)') 'Error reading namelist input file.'
  Write(6,'(a)') 'Program aborted.'
  STOP  123

END PROGRAM PLT_RADAR_TILT

!
!##################################################################
!##################################################################
!######                                                      ######
!######      Advanced Regional Prediction System (ARPS)      ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################
!
!

SUBROUTINE OUTPUT_REGULAR(regular_file, ntilts_max,ntilts,              & 2
                  radar_symbol,radar_lat,radar_lon,radar_elevation,     &
                  ngate,nray,fstgat,gatsp,int_razim,eleva,              &
                  volume )
!
!-----------------------------------------------------------------------
!
!  PURPOSE:
!    Out put 3d regular polar grid data for further retrival.
!
!-----------------------------------------------------------------------
!
!
!  AUTHOR: Ming Hu
!  03/19/02.
!
!  MODIFICATION HISTORY:
!
! INPUT:
!
!   regular_file  file name that data will be saved into
!   ntilts_max    maximum number of tilts
!   ntilts        actual number of tilts in this observation data
!   radar_symbol  radar Name 
!   radar_lat     radar location: latitude
!   radar_lon     radar location: longitude
!   radar_elevation  radar location: elavation
!
!   ngate      number of gates of observation data per radial
!   nray       number of radials of data( here = 361 )
!   fstgat     distance from radar of first gate of data(meters)
!   gatsp      gate spacing of data (meters)
!
!   volume(ngate,nray,ntilts)    Array containing one full volume scan of
!                                observation(reflectivity or radial velocity
!                                which has been intepolated to 1-degree
!                                regular spaced polar angles
!  int_razim(nray)     azimuth angle for each radial (degrees)
!  eleva(ntilts_max)   elevation angle for each tilt
!
!
!
! OUTPUT:
!
!-----------------------------------------------------------------------
!
!  Variable Declarations.
!
!-----------------------------------------------------------------------
!
  IMPLICIT NONE

!-----------------------------------------------------------------------
!
!  INPUT RADAR PARAMETER AND OBSERVATION
!
!-----------------------------------------------------------------------
!
  CHARACTER (LEN=132) :: regular_file
  INTEGER :: ntilts_max
  INTEGER :: ntilts
  CHARACTER(LEN=4) :: radar_symbol
  REAL :: radar_lat
  REAL :: radar_lon
  REAL :: radar_elevation

  INTEGER :: ngate
  INTEGER :: nray
  REAL ::    fstgat
  REAL ::    gatsp

  REAL :: volume(ngate,nray,ntilts)      ! Array containing one
                                         ! full volume scan of
                                         ! reflectivity intepolated to
                                         ! 1-degree spaced polar angles
  REAL :: int_razim(nray)
  REAL :: eleva(ntilts_max)

!
!-----------------------------------------------------------------------
!
!   WRITE(*,*) regular_file
!   WRITE(*,*) ntilts_max,ntilts,ngate,nray,ntilts
!   WRITE(*,*) radar_symbol,radar_lat,radar_lon,radar_elevation
!   WRITE(*,*) ngate,nray,fstgat,gatsp
!   WRITE(*,*) int_razim
!   WRITE(*,*) eleva
!  WRITE(*,*) volume
!
  OPEN(27,file=trim(regular_file),status='unknown',form='unformatted')
  WRITE(27) ntilts_max,ntilts
  WRITE(27) radar_symbol,radar_lat,radar_lon,radar_elevation
  WRITE(27) ngate,nray,fstgat,gatsp
  WRITE(27) int_razim
  WRITE(27) eleva
  WRITE(27) volume
  CLOSE(27)
  
  WRITE(*,*) ' The file:',trim(regular_file),                             &
                 'has been written out successfully'

END SUBROUTINE OUTPUT_REGULAR