PROGRAM pltradcol,7 ! !################################################################## !################################################################## !###### ###### !###### PROGRAM PLTRADCOL ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! ! PURPOSE: ! ! Plots data written by wtradcol. ! ! ! AUTHOR: ! ! Keith Brewster, CAPS, April, 1996 ! ! LINKING: ! ! ncargf77 -o pltradcol pltradcol.f pltmap.f maproj3d.f timelib3d.f ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE ! INCLUDE 'globcst.inc' INCLUDE 'grid.inc' ! INTEGER :: pltref,pltvel,pltnyq,plttim PARAMETER (pltref=1, & pltvel=1, & pltnyq=0, & plttim=0) CHARACTER (LEN=4) :: radid CHARACTER (LEN=5) :: lvlid INTEGER :: ireftim,itime INTEGER :: vcpnum INTEGER :: mxradvr PARAMETER (mxradvr=10) INTEGER :: iradvr INTEGER :: nradvr !----------------------------------------------------------------------- ! ! Dimension in x, y, and z direction ! !----------------------------------------------------------------------- INTEGER :: nx, ny, nz !----------------------------------------------------------------------- ! ! Read-in variables ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: readk(:) REAL, ALLOCATABLE :: readhgt(:) REAL, ALLOCATABLE :: readref(:) REAL, ALLOCATABLE :: readvel(:) REAL, ALLOCATABLE :: readnyq(:) REAL, ALLOCATABLE :: readtim(:) ! !----------------------------------------------------------------------- ! ! Plotting variables ! !----------------------------------------------------------------------- ! REAL, ALLOCATABLE :: gridref(:,:,:) REAL, ALLOCATABLE :: gridvel(:,:,:) REAL, ALLOCATABLE :: gridnyq(:,:,:) REAL, ALLOCATABLE :: gridtim(:,:,:) ! !----------------------------------------------------------------------- ! ! Statistics variables ! !----------------------------------------------------------------------- ! INTEGER, ALLOCATABLE :: kntref(:) INTEGER, ALLOCATABLE :: kntvel(:) ! REAL :: refint,velint,nyqint,timint PARAMETER (refint=0., & velint=0., & nyqint=0., & timint=0.) ! !----------------------------------------------------------------------- ! ! Map orientation variables ! !----------------------------------------------------------------------- ! INTEGER :: maxpts PARAMETER (maxpts = 100) REAL :: latmap(maxpts),lonmap(maxpts) REAL :: xmap(maxpts),ymap(maxpts) ! !----------------------------------------------------------------------- ! ! Misc local variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=3) :: chplt CHARACTER (LEN=18) :: timplt CHARACTER (LEN=72) :: fname CHARACTER (LEN=72) :: mapfile PARAMETER & (mapfile='spcounty.mapdata') REAL :: rdummy REAL :: x,y,xrd,yrd,gridlat,gridlon,elev REAL :: latnot(2) REAL :: ctrx,ctry,swx,swy,nex,ney INTEGER :: i,j,k,kk,klev,ipt, munit, mapgrid INTEGER :: idummy INTEGER :: iyr, imon, idy, ihr, imin, isec INTEGER :: istatus !----------------------------------------------------------------------- ! ! NAMELIST declaration ! !----------------------------------------------------------------------- NAMELIST /grid_dims/ nx, ny, nz NAMELIST /file_name/ fname !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Execute code begin ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ !----------------------------------------------------------------------- ! ! Read in the dimensions ! !----------------------------------------------------------------------- READ(5,grid_dims,END=100) WRITE(6,'(/a)') 'Namelist block grid_dims successfully read.' !----------------------------------------------------------------------- ! ! Allocate and Initializations ! !----------------------------------------------------------------------- ! ALLOCATE(readk(nz) ,STAT=istatus) readk=0 ALLOCATE(readhgt(nz),STAT=istatus) readhgt=0 ALLOCATE(readref(nz),STAT=istatus) readref=0 ALLOCATE(readvel(nz),STAT=istatus) readvel=0 ALLOCATE(readnyq(nz),STAT=istatus) readnyq=0 ALLOCATE(readtim(nz),STAT=istatus) readtim=0 ALLOCATE(gridref(nx,ny,nz),STAT=istatus) gridref=-999999. ALLOCATE(gridvel(nx,ny,nz),STAT=istatus) gridvel=-999999. ALLOCATE(gridnyq(nx,ny,nz),STAT=istatus) gridnyq=-999999. ALLOCATE(gridtim(nx,ny,nz),STAT=istatus) gridtim=-999999. ALLOCATE(kntref(nz),STAT=istatus) kntref=0 ALLOCATE(kntvel(nz),STAT=istatus) kntvel=0 ! !----------------------------------------------------------------------- ! ! Get user input ! !----------------------------------------------------------------------- ! READ(5,file_name,END=100) WRITE(6,'(/a)') 'Namelist block file_name successfully read.' OPEN(11,FILE=fname,FORM='unformatted',STATUS='old') ! !----------------------------------------------------------------------- ! ! Read radar columns ! !----------------------------------------------------------------------- ! READ(11) radid READ(11) ireftim,itime,vcpnum,idummy,idummy, & idummy,idummy,idummy,idummy,idummy ! READ(11) runname READ(11) hdmpfmt,strhopt,mapproj,idummy,idummy, & idummy,idummy,idummy,idummy,idummy READ(11) dx,dy,dz,dzmin,ctrlat, & ctrlon,trulat1,trulat2,trulon,sclfct, & rdummy,rdummy,rdummy,rdummy,rdummy READ(11) nradvr,iradvr ! DO ipt=1,(nx*ny) READ(11,END=51) i,j,xrd,yrd, & gridlat,gridlon,elev,klev READ(11,END=52) (readk(kk),kk=1,klev) READ(11,END=52) (readhgt(kk),kk=1,klev) READ(11,END=52) (readref(kk),kk=1,klev) READ(11,END=52) (readvel(kk),kk=1,klev) READ(11,END=52) (readnyq(kk),kk=1,klev) READ(11,END=52) (readtim(kk),kk=1,klev) DO kk=1,klev k=nint(readk(kk)) gridref(i,j,k)=readref(kk) gridvel(i,j,k)=readvel(kk) gridnyq(i,j,k)=readnyq(kk) gridtim(i,j,k)=readtim(kk) IF(gridref(i,j,k) > -200. .AND. & gridref(i,j,k) < 200.) kntref(k)=kntref(k)+1 IF(gridvel(i,j,k) > -200. .AND. & gridvel(i,j,k) < 200.) kntvel(k)=kntvel(k)+1 END DO END DO 51 CONTINUE ipt=ipt-1 WRITE(6,'(a,i6,a)') ' End of file reached after reading', & ipt,' columns' GO TO 55 52 CONTINUE WRITE(6,'(a,i6,a)') ' End of file reached while reading', & ipt,' column' 55 CONTINUE CLOSE(11) ! !----------------------------------------------------------------------- ! ! Write statistics ! !----------------------------------------------------------------------- ! WRITE(6,'(a)') ' k n vel n vel' DO k=1,nz WRITE(6,'(i3,2i10)') k,kntref(k),kntvel(k) END DO ! CALL abss2ctim(itime, iyr, imon, idy, ihr, imin, isec ) iyr=MOD(iyr,100) WRITE(timplt,815) imon,idy,iyr,ihr,imin 815 FORMAT(i2.2,'/',i2.2,'/',i2.2,1X,i2.2,':',i2.2,' UTC') ! CALL opngks ! !----------------------------------------------------------------------- ! ! Set up map ! !----------------------------------------------------------------------- ! IF(ctrlon > 180.) ctrlon=ctrlon-360. IF(trulon > 180.) trulon=trulon-360. latnot(1)=trulat1 latnot(2)=trulat2 CALL setmapr(mapproj,sclfct,latnot,trulon) CALL lltoxy(1,1,ctrlat,ctrlon,ctrx,ctry) swx=ctrx-((nx-3)/2)*dx swy=ctry-((ny-3)/2)*dy nex=swx+(nx-3)*dx ney=swy+(ny-3)*dy ! !----------------------------------------------------------------------- ! ! Vertical level loop ! !----------------------------------------------------------------------- ! DO k=10,nz,2 PRINT *, ' plotting k= ',k ! CALL CONREC(gridref(1,1,k), ! + nx,nx,ny,0.,0.,refint,-1,-1,-127) ! WRITE(lvlid,'(a,i3)') 'k=',k ! !----------------------------------------------------------------------- ! ! Plot reflectivity ! !----------------------------------------------------------------------- ! IF( pltref > 0 .AND. kntref(k) > 0 ) THEN CALL set( 0.,1.0,0.0,1.0, & -.1,1.1,-.1,1.1,1) CALL wtstr(0.05,1.05,radid,16,0,0) CALL wtstr(0.2,1.05,lvlid,16,0,0) CALL wtstr(0.6,1.05,timplt,16,0,0) CALL wtstr(0.9,1.05,'Reflectivity',16,0,0) CALL set( 0.,1.0,0.0,1.0, & swx,nex,swy,ney,1) DO j=1,ny DO i=1,nx IF(gridref(i,j,k) > -200. .AND. gridref(i,j,k) < 200.) THEN WRITE(chplt,820) nint(gridref(i,j,k)) 820 FORMAT(i3) x=swx+FLOAT(i-1)*dx y=swy+FLOAT(j-1)*dy CALL wtstr(x,y,chplt,8,0,0) END IF END DO END DO CALL pltmap(maxpts,mapfile,latmap,lonmap,xmap,ymap) CALL frame END IF ! !----------------------------------------------------------------------- ! ! Plot velocity ! !----------------------------------------------------------------------- ! IF( pltvel > 0 .AND. kntvel(k) > 0 ) THEN CALL set( 0.,1.0,0.0,1.0, & -.1,1.1,-.1,1.1,1) CALL wtstr(0.1,1.05,radid,16,0,0) CALL wtstr(0.2,1.05,lvlid,16,0,0) CALL wtstr(0.4,1.05,timplt,16,0,0) CALL wtstr(0.8,1.05,'Radial Velocity',16,0,0) CALL set( 0.,1.0,0.0,1.0, & swx,nex,swy,ney,1) DO j=1,ny DO i=1,nx IF(gridvel(i,j,k) > -200. .AND. gridvel(i,j,k) < 200.) THEN WRITE(chplt,820) nint(gridvel(i,j,k)) x=swx+FLOAT(i-1)*dx y=swy+FLOAT(j-1)*dy CALL wtstr(x,y,chplt,8,0,0) END IF END DO END DO ! CALL CONREC(gridvel(1,1,k), ! + nx,nx,ny,0.,0.,velint,-1,-1,-127) CALL pltmap(maxpts,mapfile,latmap,lonmap,xmap,ymap) CALL frame END IF ! !----------------------------------------------------------------------- ! ! Plot Nyquist velocity ! !----------------------------------------------------------------------- ! IF(pltnyq > 0) THEN CALL set( 0.,1.0,0.0,1.0, & -.1,1.1,-.1,1.1,1) CALL wtstr(0.1,1.05,radid,16,0,0) CALL wtstr(0.2,1.05,lvlid,16,0,0) CALL wtstr(0.4,1.05,timplt,16,0,0) CALL wtstr(0.8,1.05,'Nyquist',16,0,0) CALL set( 0.,1.0,0.0,1.0, & swx,nex,swy,ney,1) DO j=1,ny DO i=1,nx IF(gridnyq(i,j,k) > 0. .AND. gridnyq(i,j,k) < 1000.) THEN WRITE(chplt,820) nint(10.*gridnyq(i,j,k)) x=swx+FLOAT(i-1)*dx y=swy+FLOAT(j-1)*dy CALL wtstr(x,y,chplt,8,0,0) END IF END DO END DO ! CALL CONREC(gridnyq(1,1,k), ! + nx,nx,ny,0.,0.,nyqint,-1,-1,-127) CALL pltmap(maxpts,mapfile,latmap,lonmap,xmap,ymap) CALL frame END IF ! !----------------------------------------------------------------------- ! ! Plot data time ! !----------------------------------------------------------------------- ! IF(plttim > 0) THEN CALL set( 0.,1.0,0.0,1.0, & -.1,1.1,-.1,1.1,1) CALL wtstr(0.1,1.05,radid,16,0,0) CALL wtstr(0.2,1.05,lvlid,16,0,0) CALL wtstr(0.4,1.05,timplt,16,0,0) CALL wtstr(0.8,1.05,'Time ',16,0,0) CALL set( 0.,1.0,0.0,1.0, & swx,nex,swy,ney,1) DO j=1,ny DO i=1,nx IF(gridtim(i,j,k) > -1000. .AND. gridtim(i,j,k) < 1000.) THEN WRITE(chplt,820) nint(0.1*gridtim(i,j,k)) x=swx+FLOAT(i-1)*dx y=swy+FLOAT(j-1)*dy CALL wtstr(x,y,chplt,8,0,0) END IF END DO END DO ! CALL CONREC(gridtim(1,1,k), ! + nx,nx,ny,0.,0.,timint,-1,-1,-127) CALL pltmap(maxpts,mapfile,latmap,lonmap,xmap,ymap) CALL frame END IF ! END DO ! CALL clsgks ! GOTO 101 100 CONTINUE WRITE(6,'(/a,a)') 'Error reading NAMELIST file. The program will abort.' 101 CONTINUE STOP END PROGRAM pltradcol