! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE RDRADCOL ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE rdradcol(nx,ny,nz,nsrc_rad,nvar_radin, & 2,4 mx_rad,nz_rdr,mx_colrad,nradfil,radfname, & srcrad,isrcrad,stnrad,latrad,lonrad,elvrad, & latradc,lonradc,irad,nlevrad,hgtradc,obsrad, & ncolrad,istatus,tem1) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Reads radar data stored as columns on a remapped grid. ! This allows the remapping to occur on a different grid ! than the analysis and allows the radar data to be treated ! as "soundings". ! !----------------------------------------------------------------------- ! ! AUTHOR: Keith Brewster ! August, 1995 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nx Number of grid points in the x-direction (east/west) ! ny Number of grid points in the y-direction (north/south) ! nz Number of grid points in the vertical ! nsrc_rad number of sources of radar data ! nvar_radin number of variables in the obsrad array ! mx_rad maximum number of radars ! nz_rdr maximum number of levels in a radar column ! mx_colrad maximum number of radar columns ! ! nradfil number of radar files ! radfname file name for radar datasets ! srcrad name of radar sources ! ! OUTPUT: ! ! isrcrad index of radar source ! stnrad radar site name character*4 ! latrad latitude of radar (degrees N) ! lonrad longitude of radar (degrees E) ! elvrad elevation of feed horn of radar (m MSL) ! latradc latitude of radar column (degrees N) ! lonradc longitude of radar column (degrees E) ! irad radar number of each column ! nlevrad number of levels of radar data in each column ! hgtradc height (m MSL) of radar observations ! obsrad radar observations ! ncolrad number of radar columns read-in ! istatus status indicator ! ! tem1 Temporary work array. ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nx,ny,nz,nsrc_rad,nvar_radin,mx_rad,nz_rdr,mx_colrad ! INTEGER :: nradfil CHARACTER (LEN=132) :: radfname(mx_rad) ! !----------------------------------------------------------------------- ! ! Radar site variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=8) :: srcrad(nsrc_rad) INTEGER :: isrcrad(mx_rad) REAL :: latrad(mx_rad),lonrad(mx_rad) REAL :: elvrad(mx_rad) CHARACTER (LEN=5) :: stnrad(mx_rad) ! !----------------------------------------------------------------------- ! ! Radar observation variables ! !----------------------------------------------------------------------- ! INTEGER :: irad(mx_colrad) INTEGER :: nlevrad(mx_colrad) REAL :: latradc(mx_colrad),lonradc(mx_colrad) REAL :: hgtradc(nz_rdr,mx_colrad) REAL :: obsrad(nvar_radin,nz_rdr,mx_colrad) INTEGER :: ncolrad INTEGER :: istatus ! !----------------------------------------------------------------------- ! ! Temporary work array ! !----------------------------------------------------------------------- ! REAL :: tem1(nx*ny*nz) ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! INTEGER :: nsrcradin PARAMETER (nsrcradin=2) CHARACTER (LEN=8) :: srcradin(nsrcradin) DATA srcradin /'88D-AII','88D-NIDS'/ ! CHARACTER (LEN=4) :: stn CHARACTER (LEN=80) :: runname CHARACTER (LEN=132) :: fname INTEGER :: ireftim,itime,vcpnum,isource,idummy INTEGER :: hdmpfmt,strhopt,mapprin INTEGER :: nchanl,ierr,nradvr,iradvr INTEGER :: iyr, imon, idy, ihr, imin, isec INTEGER :: i,j,isrc,icstrt,icol,klev,kk,krad,nfile,maxk REAL :: dxin,dyin,dzin,dzminin,ctrlatin REAL :: ctrlonin,tlat1in,tlat2in,tlonin,scalin,rdummy REAL :: xrd,yrd,elev,dummy ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! maxk=0 icol=0 istatus=0 icstrt=1 nfile=nradfil IF(nradfil > mx_rad) THEN WRITE(6,'(a,i3,a,i3/a,i3,a)') & ' WARNING nradfil ',nradfil,' exceeds mx_rad dimension ', & mx_rad,' only ',mx_rad,' files will be read.' nfile=mx_rad END IF ! !----------------------------------------------------------------------- ! ! Loop through all radars ! !----------------------------------------------------------------------- ! DO krad=1,nfile fname=radfname(krad) CALL asnctl ('NEWLOCAL', 1, ierr) CALL asnfile(fname, '-F f77 -N ieee', ierr) CALL getunit( nchanl ) OPEN(UNIT=nchanl,FILE=trim(fname),ERR=400, & FORM='unformatted',STATUS='old') istatus=1 ! READ(nchanl) stn stnrad(krad)=stn READ(nchanl) ireftim,itime,vcpnum,isource,idummy, & idummy,idummy,idummy,idummy,idummy ! !----------------------------------------------------------------------- ! ! Connect source number to source name. ! !----------------------------------------------------------------------- ! IF(isource < 1) THEN WRITE(6,'(a,i5,/a/)') & ' rdradcol: read isource as',isource, & ' Setting isource to default, 1' isource=1 END IF IF(isource > nsrcradin) THEN WRITE(6,'(a,i3,a,i3,a,/a/)') & ' rdradcol: read isource as',isource, & ' only ',nsrcradin,' sources known.', & ' If a new radar source has been added, update rdradcol.f' STOP END IF DO isrc=1,nsrc_rad IF(srcrad(isrc) == srcradin(isource)) THEN isrcrad(krad)=isrc WRITE(6,'(a,i3,a,i3,a,a)') ' rdradcol isource: ',isource, & ' = srcrad(',isrc,') ',srcrad(isrc) GO TO 25 END IF END DO WRITE(6,'(/a,i4,a,a)') ' rdradcol read isource: ',isource, & ' could not find srcrad= ',srcradin(isource) WRITE(6,'(a//)') ' Check radar source names' STOP 25 CONTINUE ! !----------------------------------------------------------------------- ! ! Read more header data ! !----------------------------------------------------------------------- ! READ(nchanl) runname PRINT *, ' runname: ',runname READ(nchanl) hdmpfmt,strhopt,mapprin,idummy,idummy, & idummy,idummy,idummy,idummy,idummy PRINT *, ' hdmpfmt: ',hdmpfmt PRINT *, ' strhopt: ',strhopt PRINT *, ' mapprin: ',mapprin PRINT *, ' idummy: ',idummy READ(nchanl) dxin,dyin,dzin,dzminin,ctrlatin, & ctrlonin,tlat1in,tlat2in,tlonin,scalin, & latrad(krad),lonrad(krad),elvrad(krad), & rdummy,rdummy PRINT *, ' dxin,dyin,dzin: ',dxin,dyin,dzin PRINT *, ' ctrlatin,ctrlonin: ',ctrlatin,ctrlonin PRINT *, ' tlat1in,tlat2in,tlonin: ',tlat1in,tlat2in,tlonin PRINT *, ' scalin ',scalin PRINT *, ' latrad,lonrad,elvrad: ', & latrad(krad),lonrad(krad),elvrad(krad) PRINT *, ' rdummy: ',rdummy READ(nchanl) nradvr,iradvr ! PRINT *, ' Got nradvr,iradvr: ',nradvr,iradvr ! CALL abss2ctim(itime, iyr, imon, idy, ihr, imin, isec ) iyr=MOD(iyr,100) WRITE(6,815) 'Reading remapped raw radar data for: ', & imon,idy,iyr,ihr,imin 815 FORMAT(/a,i2.2,'/',i2.2,'/',i2.2,1X,i2.2,':',i2.2,' UTC') ! !----------------------------------------------------------------------- ! ! Note here the radar data indices: ! ! 1 Reflectivity ! 2 Radial Velocity ! 3 Nyquist Velocity ! 4 Time in seconds from the reference time ! !----------------------------------------------------------------------- ! DO icol=icstrt,999999 IF(icol <= mx_colrad) THEN READ(nchanl,END=101) i,j,xrd,yrd, & latradc(icol),lonradc(icol),elev,klev maxk=MAX(maxk,klev) klev=MIN(klev,nz_rdr) nlevrad(icol)=klev irad(icol)=krad READ(nchanl,END=102) (tem1(kk),kk=1,klev) READ(nchanl,END=102) (hgtradc(kk,icol),kk=1,klev) READ(nchanl,END=102) (obsrad(1,kk,icol),kk=1,klev) READ(nchanl,END=102) (obsrad(2,kk,icol),kk=1,klev) READ(nchanl,END=102) (obsrad(3,kk,icol),kk=1,klev) READ(nchanl,END=102) (obsrad(4,kk,icol),kk=1,klev) ELSE READ(nchanl,END=101) i,j,xrd,yrd, & dummy,dummy,elev,klev maxk=MAX(maxk,klev) klev=MIN(klev,nz_rdr) READ(nchanl,END=101) (tem1(kk),kk=1,klev) READ(nchanl,END=101) (tem1(kk),kk=1,klev) READ(nchanl,END=101) (tem1(kk),kk=1,klev) READ(nchanl,END=101) (tem1(kk),kk=1,klev) READ(nchanl,END=101) (tem1(kk),kk=1,klev) READ(nchanl,END=101) (tem1(kk),kk=1,klev) END IF END DO 101 CONTINUE icol=icol-1 WRITE(6,'(a,i6,a)') ' End of file reached after reading', & icol,' columns' GO TO 105 102 CONTINUE WRITE(6,'(a,i6,a)') ' End of file reached while reading', & icol,' column' 105 CONTINUE CLOSE(nchanl) CALL retunit( nchanl ) icstrt=icol+1 END DO 400 CONTINUE IF(icol > mx_colrad) THEN WRITE(6,'(//a)') & ' #### WARNING max_colrad EXCEEDED ####' WRITE(6,'(a,i6,a)') & ' increase mx_colrad from ',mx_colrad,' columns' WRITE(6,'(2x,i6,a//)') & icol,' columns are needed to read all files' END IF ncolrad=MIN(icol,mx_colrad) WRITE(6,'(a,i5)') ' Maximum number of vert levels read:',maxk IF(maxk > nz_rdr) THEN WRITE(6,'(a,i5)') & ' EXCEEDS nz_rdr, increase nz_rdr: ',nz_rdr STOP END IF RETURN END SUBROUTINE rdradcol