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