! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE RDRETCOL ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE rdretcol(nx,ny,nz,nvar_ret, & 1,4 mx_ret,nz_ret,mx_colret,nretfil,fretname, & srcret,isrcret,stnret,latret,lonret,elvret, & latretc,lonretc,iret,nlevret,hgtretc,obsret,qrret, & ncolret,istatus,tem1) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Reads retrieval data stored as columns, i.e. psuedo-soundings. ! This allows the retrieval to occur on a different grid ! than the analysis. ! !----------------------------------------------------------------------- ! ! 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 ! nvar_ret number of variables in the obsret array ! mx_ret maximum number of retrieval radars ! nz_ret maximum number of levels in a retreival columns ! mx_colret maximum number of retrieval columns ! ! nretfil number of retrieval files ! fretname file name for retrieval datasets ! srcret name of retrieval sources ! ! OUTPUT: ! ! isrcret index of retrieval source ! stnret retrieval radar site name character*4 ! latret latitude of retrieval radar (degrees N) ! lonret longitude of retrieval radar (degrees E) ! elvret elevation of feed horn of retrieval radar (m MSL) ! latretc latitude of retrieval column (degrees N) ! lonretc longitude of retrieval column (degrees E) ! iret retrieval radar number of each column ! nlevret number of levels of retrieval data in each column ! hgtretc height (m MSL) of retrieval observations ! obsret retrieval observations ! qrret retrieval qr ! ncolret number of retrieval columns read-in ! istatus status indicator ! ! tem1 Temporary work array. ! !----------------------------------------------------------------------- ! ! Variable Declarations: ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nx,ny,nz,nvar_ret,mx_ret,nz_ret,mx_colret ! INTEGER :: nretfil CHARACTER (LEN=132) :: fretname(mx_ret) ! !----------------------------------------------------------------------- ! ! Radar site variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=8) :: srcret(mx_ret) INTEGER :: isrcret(mx_ret) REAL :: latret(mx_ret),lonret(mx_ret) REAL :: elvret(mx_ret) CHARACTER (LEN=5) :: stnret(mx_ret) ! !----------------------------------------------------------------------- ! ! Retrieval observation variables ! !----------------------------------------------------------------------- ! INTEGER :: iret(mx_colret) INTEGER :: nlevret(mx_colret) REAL :: latretc(mx_colret),lonretc(mx_colret) REAL :: hgtretc(nz_ret,mx_colret) REAL :: obsret(nvar_ret,nz_ret,mx_colret) REAL :: qrret(nz_ret,mx_colret) INTEGER :: ncolret INTEGER :: istatus ! !----------------------------------------------------------------------- ! ! Temporary work array ! !----------------------------------------------------------------------- ! REAL :: tem1(nx*ny*nz) ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! CHARACTER (LEN=4) :: stn CHARACTER (LEN=80) :: runname CHARACTER (LEN=132) :: fname INTEGER :: ireftim,itime,vcpnum,idummy INTEGER :: hdmpfmt,strhopt,mapprin INTEGER :: nchanl INTEGER :: ierr INTEGER :: iyr, imon, idy, ihr, imin, isec INTEGER :: i,j,icstrt,icol,klev,kk,kret,nfile,maxk REAL :: dxin,dyin,dzin,dzminin,ctrlatin REAL :: ctrlonin,tlat1in,tlat2in,tlonin,scalin,rdummy REAL :: xrd,yrd,elev ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! maxk=0 icol=0 istatus=0 icstrt=1 nfile=nretfil IF(nretfil > mx_ret) THEN WRITE(6,'(a,i3,a,i3/a,i3,a)') & ' WARNING nretfil ',nretfil,' exceeds mx_ret dimension ', & mx_ret,' only ',mx_ret,' files will be read.' nfile=mx_ret END IF ! !----------------------------------------------------------------------- ! ! Loop through all retrieval files ! !----------------------------------------------------------------------- ! DO kret=1,nfile fname=fretname(kret) CALL asnctl ('NEWLOCAL', 1, ierr) CALL asnfile(fname, '-F f77 -N ieee', ierr) CALL getunit( nchanl ) OPEN(UNIT=nchanl,FILE=trim(fname),ERR=390, & FORM='unformatted',STATUS='old') istatus=1 isrcret(kret)=1 ! READ(nchanl) stn stnret(kret)=stn READ(nchanl) ireftim,itime,vcpnum,idummy,idummy, & idummy,idummy,idummy,idummy,idummy ! READ(nchanl) runname READ(nchanl) hdmpfmt,strhopt,mapprin,idummy,idummy, & idummy,idummy,idummy,idummy,idummy READ(nchanl) dxin,dyin,dzin,dzminin,ctrlatin, & ctrlonin,tlat1in,tlat2in,tlonin,scalin, & latret(kret),lonret(kret),elvret(kret), & rdummy,rdummy ! CALL abss2ctim(itime, iyr, imon, idy, ihr, imin, isec ) iyr=MOD(iyr,100) WRITE(6,815) 'Reading retrieval 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 retrieval data indices: ! ! 1 u wind component ! 2 u wind component ! 3 pressure ! 4 potential temperature ! 5 specific humidity ! !----------------------------------------------------------------------- ! DO icol=icstrt,mx_colret READ(nchanl,END=51) i,j,xrd,yrd, & latretc(icol),lonretc(icol),elev,klev maxk=MAX(maxk,klev) klev=MIN(klev,nz_ret) nlevret(icol)=klev iret(icol)=kret ! print *, ' i,j,xrd,yrd: ',i,j,xrd,yrd ! print *, ' lat,lon,klev: ', ! : latretc(icol),lonretc(icol),klev READ(nchanl,END=52) (tem1(kk),kk=1,klev) READ(nchanl,END=52) (hgtretc(kk,icol),kk=1,klev) READ(nchanl,END=52) (obsret(1,kk,icol),kk=1,klev) READ(nchanl,END=52) (obsret(2,kk,icol),kk=1,klev) READ(nchanl,END=52) (obsret(3,kk,icol),kk=1,klev) READ(nchanl,END=52) (obsret(4,kk,icol),kk=1,klev) READ(nchanl,END=52) (obsret(5,kk,icol),kk=1,klev) READ(nchanl,END=52) (qrret(kk,icol),kk=1,klev) READ(nchanl,END=52) (tem1(kk),kk=1,klev) ! print *, ' icol,hgt(5)=',icol,hgtretc(5,icol) ! print *, ' u(5),v(5) = ',obsret(1,5,icol),obsret(2,5,icol) ! print *, ' p(5),pt(5)= ',obsret(3,5,icol),obsret(4,5,icol) ! print *, ' qv(5) = ',obsret(5,5,icol) ! ! Temporary code to set the thermo variables to missing ! to test, individually, the contributions of each variable. ! ! DO 45 kk=1,klev ! obsret(3,kk,icol)=-999. ! obsret(4,kk,icol)=-999. ! obsret(5,kk,icol)=-999. ! 45 CONTINUE ! END DO icol=icol-1 WRITE(6,'(a,i6,a)') & ' WARNING ran out space, increase mx_colret ', & icol,' columns' GO TO 55 51 CONTINUE icol=icol-1 WRITE(6,'(a,i6,a)') ' End of file reached after reading', & icol,' columns' GO TO 55 52 CONTINUE WRITE(6,'(a,i6,a)') ' End of file reached while reading', & icol,' column' 55 CONTINUE CLOSE(nchanl) CALL retunit( nchanl ) icstrt=icol+1 CYCLE 390 CONTINUE WRITE(6,'(a,a)') ' Error opening file: ',fname END DO ncolret=icol WRITE(6,'(a,i5)') ' Maximum number of vert levels read:',maxk IF(maxk > nz_ret) THEN WRITE(6,'(a,i5)') & ' EXCEEDS nz_ret, increase nz_ret:',nz_ret STOP END IF RETURN END SUBROUTINE rdretcol