! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE RADREAD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE radread(filnam,lendtf, & 3,3 isrc,tim,ireturn, & nx,ny,nz,dx,dy,dz, & xor,yor,zor, & tem1,tem2,tem3,tem4,tem5, & ubar,vbar,tem6,tem7,tem8) ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Write history data into channel nchanl as unformatted binary data. ! ! All output data are located at the grid cell centers. ! !----------------------------------------------------------------------- ! ! AUTHOR: Steven Lazarus ! 8/10/95. ! ! MODIFICATION HISTORY: ! ! 02/22/96 (Limin Zhao) ! Added ubar and vbar for mean velocity. Changes are also made to ! incorporate the retrieval data. ! ! 08/08/96 (Limin Zhao) ! Clean up documentation. ! !----------------------------------------------------------------------- ! ! INPUT: ! ! filnam Name of the input file ! 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 ! ! dx x grid spacing ! dy y grid spacing ! dz z grid spacing ! ! xor the location of radar station in x-direction ! yor the location of radar station in y-direction ! zor the location of radar station in z-direction ! ! tim time of retrieval data ! isrc Location of calling routine ! ! OUTPUT: ! ! tem1 Observed radial velocity ! tem6 Retrieved u-component ! tem7 Retrieved v-component ! tem8 Retrieved w-component ! tem5 Observed reflectivity ! ubar Retrieved mean velocity of u-component ! vbar Retrieved mean velocity of v-component ! ! WORK ARRAYS: ! ! tem2 Temporary work array. ! tem3 Temporary work array. ! tem4 Temporary work array. ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nx,ny,nz ! Number of model grid points in 3 directions INTEGER :: nxr,nyr,nzr ! Number of real data in 3 directions INTEGER :: lendtf,i,j,k,ireturn CHARACTER (LEN=128) :: filnam CHARACTER (LEN=10) :: radarsp INTEGER :: iyrrr,imorr,idarr,iharr,imarr,isarr REAL :: dxr,dyr,dzr REAL :: dx,dy,dz REAL :: xor, yor, zor REAL :: bad REAL :: tim REAL :: umean, vmean REAL :: tem1 (nx,ny,nz) ! Temporary work array REAL :: tem2 (nx,ny,nz) ! Temporary work array REAL :: tem3 (nx,ny,nz) ! Temporary work array REAL :: tem4 (nx,ny,nz) ! Temporary work array REAL :: tem5 (nx,ny,nz) ! Temporary work array REAL :: tem6 (nx,ny,nz) ! Temporary work array REAL :: tem7 (nx,ny,nz) ! Temporary work array REAL :: tem8 (nx,ny,nz) ! Temporary work array REAL :: ubar (nx,ny,nz) ! Temporary work array REAL :: vbar (nx,ny,nz) ! Temporary work array ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! REAL :: tref INTEGER :: l INTEGER :: nchanl ! FORTRAN I/O channel number for output INTEGER :: istat INTEGER :: ierr INTEGER :: isrc LOGICAL :: fexist ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! INCLUDE 'assim.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Assign a proper filename, and check to see if the file exist. ! ! Note: Cray routines are used to force binary data file to be ! in the IEEE format or compatable with IBM. ! !----------------------------------------------------------------------- ! CALL asnctl ('NEWLOCAL', 1, ierr) CALL asnfile(filnam(1:lendtf), '-F f77 -N ieee', ierr) CALL getunit(nchanl) WRITE(6,*) 'nchanl,filnam: ',nchanl,filnam(1:lendtf) OPEN(UNIT=nchanl,FILE=filnam(1:lendtf), & STATUS='unknown', FORM='unformatted',IOSTAT= istat ) IF( istat /= 0 ) GO TO 998 100 CONTINUE ! !----------------------------------------------------------------------- ! ! Read data in. ! !----------------------------------------------------------------------- ! ! READ(nchanl,ERR=110,END=120) radarsp,iyrrr,imorr,idarr, & iharr,imarr,isarr READ(nchanl,ERR=110,END=120) tim WRITE(6,'(3x,a,f10.2,a)') 'Data read at ',tim,'seconds' IF(isrc == 1.OR.isrc == 2) THEN CALL retunit( nchanl ) CLOSE(nchanl) ireturn=0 RETURN END IF READ(nchanl,ERR=110,END=120) xor, yor, zor READ(nchanl,ERR=110,END=120) nxr,nyr,nzr,dxr,dyr,dzr ! !----------------------------------------------------------------------- ! ! Check to make sure the dimensions of the input data match that of ! the current model stream. ! !----------------------------------------------------------------------- ! IF((nx /= nxr).OR.(ny /= nyr).OR.(nz /= nzr)) THEN WRITE(6,'(a,/a,i5,a,i5,a,i5,/a,i5,a,i5,a,i5)') & ' Array dimension(s) of the input file inconsistent with ', & ' model definitions, dimensions in input data were nx=',nxr, & ', ny=',nyr,', nz=',nzr,' the model definitions were nx=', & nx,' ny= ', ny, ' nz= ',nz WRITE(6,'(a)') ' Job stopped in subroutine RADREAD.' STOP END IF IF(ABS(dx - dxr) > 0.1.OR.ABS(dy - dyr) > 0.1 .OR.ABS(dz - dzr) > 0.1) THEN WRITE(6,'(a,/a,f10.2,a,f10.2,a,f10.2,/a,f10.2,a,f10.2,a,f10.2)') & 'Grid interval in the input data inconsisent with', & 'model definitions. In the input data dx=',dxr, & ', dy=',dyr,', dz=',dzr,' the model definitions were dx=', & dx,' dy= ', dy, ' dz= ',dz WRITE(6,'(a)') ' Job stopped in subroutine RADREAD.' STOP END IF ! !----------------------------------------------------------------------- ! ! Continue reading ! !----------------------------------------------------------------------- ! READ(nchanl,ERR=110,END=120) tem1 ! input Vr READ(nchanl,ERR=110,END=120) tem2 ! input retrieved u component READ(nchanl,ERR=110,END=120) tem3 ! input retrieved v component READ(nchanl,ERR=110,END=120) tem4 ! input retrieved w component READ(nchanl,ERR=110,END=120) tem5 ! input Zr CALL retunit(nchanl) CLOSE(nchanl) WRITE (*,*) "XXX RADREAD have in nx,ny,nz,dx,dy,dz", & nx,ny,nz,dx,dy,dz WRITE (*,*) "XXX RADREAD read in nx,ny,nz,dx,dy,dz,xor,yor,zor", & nxr,nyr,nzr,dxr,dyr,dzr ! write(31) tem2 ! write(31) tem3 ! write(31) tem4 ! !----------------------------------------------------------------------- ! ! Calculate the mean profiles. ! Note: the retrieval winds are total velocity. No overwritten of ! background wind for current version. ! !----------------------------------------------------------------------- ! ! DO 160 k = 1,nz-1 ! DO 160 i = 1,nx ! DO 160 j = 1,ny-1 DO k = 1,nz DO i = 1,nx DO j = 1,ny ubar(i,j,k) = 0.0 tem6(i,j,k) = tem2(i,j,k) - ubar(i,j,k) END DO END DO END DO ! DO 170 k = 1,nz-1 ! DO 170 i = 1,nx-1 ! DO 170 j = 1,ny DO k = 1,nz DO i = 1,nx DO j = 1,ny vbar(i,j,k) = 0.0 tem7(i,j,k) = tem3(i,j,k) - vbar(i,j,k) END DO END DO END DO ! DO 180 k = 1,nz-1 ! DO 180 i = 1,nx-1 ! DO 180 j = 1,ny DO k = 1,nz DO i = 1,nx DO j = 1,ny tem8(i,j,k) = tem4(i,j,k) END DO END DO END DO ! !----------------------------------------------------------------------- ! ! Friendly exit message ! !---------------------------------------------------------------------- ! 930 CONTINUE WRITE(6,'(/a/)') 'Reading was successfully in RADREAD' ireturn = 0 RETURN ! !----------------------------------------------------------------------- ! ! Error during read ! !---------------------------------------------------------------------- ! 110 CONTINUE WRITE(6,'(/a/)') ' Error reading data in RADREAD' ireturn=1 RETURN ! !----------------------------------------------------------------------- ! ! End-of-file during read ! !---------------------------------------------------------------------- ! 120 CONTINUE WRITE(6,'(/a/)') ' End of file reached in RADREAD' ireturn=2 RETURN 998 CONTINUE WRITE(6,'(/1x,a,/1x,a/)') & 'File '//filnam(1:lendtf) & //' not found.', & 'Program returned from RADREAD.' ireturn=1 RETURN END SUBROUTINE radread