! ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE DTAHEAD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE dtahead(nx,ny,nz, & 3,7 hinfmt ,grdbasfn,lengbf,datafn,lendtf,time, & x,y,z,zp, uprt ,vprt ,wprt ,ptprt, pprt , & qvprt, qc, qr, qi, qs, qh, km, & ubar, vbar, wbar, ptbar, pbar, rhobar, qvbar, & ireturn, tem1, tem2, tem3) ! ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Coordinate the reading of history data headers of various formats. ! !----------------------------------------------------------------------- ! ! AUTHOR: Steven Lazarus ! 2/1/1994. ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nx,ny,nz The dimension of data arrays ! ! hinfmt The format of the history data dump ! =1, machine dependent unformatted binary dump, ! =2, formatted ascii dump, ! ! grdbasfn Name of the grid/base state array file ! lengbf Length of the grid/base state data file name string ! datafn Name of the other time dependent data file ! lendtf Length of the data file name string ! ! DATA ARRAYS READ IN: ! ! x x coordinate of grid points in physical/comp. space (m) ! y y coordinate of grid points in physical/comp. space (m) ! z z coordinate of grid points in computational space (m) ! zp z coordinate of grid points in physical space (m) ! ! uprt x component of perturbation velocity (m/s) ! vprt y component of perturbation velocity (m/s) ! wprt vertical component of perturbation velocity in Cartesian ! coordinates (m/s). ! ! ptprt perturbation potential temperature (K) ! pprt perturbation pressure (Pascal) ! ! qvprt perturbation water vapor mixing ratio (kg/kg) ! qc Cloud water mixing ratio (kg/kg) ! qr Rainwater mixing ratio (kg/kg) ! qi Cloud ice mixing ratio (kg/kg) ! qs Snow mixing ratio (kg/kg) ! qh Hail mixing ratio (kg/kg) ! ! km Turbulent mixing coefficient (m**2/s) ! ! ubar Base state x velocity component (m/s) ! vbar Base state y velocity component (m/s) ! wbar Base state z velocity component (m/s) ! ptbar Base state potential temperature (K) ! pbar Base state pressure (Pascal) ! rhobar Base state air density (kg/m**3) ! qvbar Base state water vapor mixing ratio (kg/kg) ! ! OUTPUT: ! ! time The time of the input data (s) ! x x coordinate of grid points in physical/comp. space (m) ! y y coordinate of grid points in physical/comp. space (m) ! z z coordinate of grid points in computational space (m) ! zp z coordinate of grid points in physical space (m) ! ! uprt x component of perturbation velocity (m/s) ! vprt y component of perturbation velocity (m/s) ! wprt vertical component of perturbation velocity in Cartesian ! coordinates (m/s). ! ! ptprt perturbation potential temperature (K) ! pprt perturbation pressure (Pascal) ! ! qvprt perturbation water vapor mixing ratio (kg/kg) ! qc Cloud water mixing ratio (kg/kg) ! qr Rainwater mixing ratio (kg/kg) ! qi Cloud ice mixing ratio (kg/kg) ! qs Snow mixing ratio (kg/kg) ! qh Hail mixing ratio (kg/kg) ! ! km Turbulent mixing coefficient (m**2/s) ! ! ubar Base state x velocity component (m/s) ! vbar Base state y velocity component (m/s) ! wbar Base state z velocity component (m/s) ! ptbar Base state potential temperature (K) ! pbar Base state pressure (Pascal) ! rhobar Base state air density (kg/m**3) ! qvbar Base state water vapor mixing ratio (kg/kg) ! ! WORK ARRAYS: ! ! tem1 Temporary work array. ! tem2 Temporary work array. ! tem3 Temporary work array. ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nx, ny, nz REAL :: time INTEGER :: hinfmt,lengbf,lendtf CHARACTER (LEN=1) :: grdbasfn CHARACTER (LEN=1) :: datafn ! REAL :: x (nx) REAL :: y (ny) REAL :: z (nz) REAL :: zp (nx,ny,nz) REAL :: uprt (nx,ny,nz) REAL :: vprt (nx,ny,nz) REAL :: wprt (nx,ny,nz) REAL :: ptprt(nx,ny,nz) REAL :: pprt (nx,ny,nz) REAL :: qvprt(nx,ny,nz) REAL :: qc (nx,ny,nz) REAL :: qr (nx,ny,nz) REAL :: qi (nx,ny,nz) REAL :: qs (nx,ny,nz) REAL :: qh (nx,ny,nz) REAL :: km (nx,ny,nz) REAL :: ubar (nx,ny,nz) REAL :: vbar (nx,ny,nz) REAL :: wbar (nx,ny,nz) REAL :: ptbar (nx,ny,nz) REAL :: rhobar(nx,ny,nz) REAL :: pbar (nx,ny,nz) REAL :: qvbar (nx,ny,nz) ! REAL :: tem1(nx,ny,nz) REAL :: tem2(nx,ny,nz) REAL :: tem3(nx,ny,nz) INTEGER :: ngchan,nchanl,ireturn,istat INTEGER :: grdbas REAL :: btime ! The time of the base state data REAL :: amin, amax INTEGER :: i,j,k INTEGER :: ierr LOGICAL :: fexist INTEGER :: packed ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! INCLUDE 'indtflg.inc' INCLUDE 'globcst.inc' INCLUDE 'phycst.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Read data fields. ! !----------------------------------------------------------------------- ! CALL getunit(nchanl) grdbas = 0 INQUIRE(FILE=datafn(1:lendtf), EXIST = fexist ) IF( fexist ) GO TO 100 INQUIRE(FILE=datafn(1:lendtf)//'.Z', EXIST = fexist ) IF( fexist ) THEN CALL uncmprs( datafn(1:lendtf)//'.Z' ) GO TO 100 END IF INQUIRE(FILE=datafn(1:lendtf)//'.gz', EXIST = fexist ) IF( fexist ) THEN CALL uncmprs( datafn(1:lendtf)//'.gz' ) GO TO 100 END IF WRITE(6,'(/1x,a,/1x,a/)') & 'File '//datafn(1:lendtf) & //' or its compressed version not found.', & 'Program returned from DTAHEAD.' RETURN 100 CONTINUE IF( hinfmt == 1 ) THEN ! !----------------------------------------------------------------------- ! ! Cray routines to force binary data file to be in the IEEE format ! !----------------------------------------------------------------------- ! CALL asnctl ('NEWLOCAL', 1, ierr) CALL asnfile(datafn(1:lendtf), '-F f77 -N ieee', ierr) OPEN(UNIT=nchanl,FILE=datafn(1:lendtf), & STATUS='old',FORM='unformatted',IOSTAT=istat) IF( istat /= 0 ) GO TO 998 CALL binhead(nchanl,time,ireturn) CLOSE(UNIT=nchanl) ELSE IF( hinfmt == 2 ) THEN OPEN(UNIT=nchanl,FILE=datafn(1:lendtf), & STATUS='old',FORM='formatted',IOSTAT=istat) IF( istat /= 0 ) GO TO 998 CALL aschead(nchanl,time,ireturn) CLOSE(UNIT=nchanl) ! ELSEIF( hinfmt .eq.3 ) THEN ! CALL hdfhead(datafn(1:lendtf),time,ireturn) ! ELSEIF( hinfmt .eq.4 ) THEN ! open(unit=nchanl,file=datafn(1:lendtf), ! : status='old',form='unformatted',iostat=istat) ! IF( istat.ne.0 ) GOTO 998 ! CALL pakhead(nchanl,time,ireturn,grdbas) ! close(unit=nchanl) ! ELSEIF( hinfmt .eq.6 ) THEN ! open(unit=nchanl,file=datafn(1:lendtf), ! : status='old',form='unformatted',iostat=istat) ! IF( istat.ne.0 ) GOTO 998 ! CALL bn2head(nchanl,time,ireturn) ! close(unit=nchanl) ! ELSE IF (hinfmt .eq. 7) THEN ! NetCDF format *NOT AVAILABLE YET* ! packed = 0 ! CALL nethead (datafn(1:lendtf),time,packed) ! ELSE IF (hinfmt .eq. 8) THEN ! NetCDF packed format ! packed = 1 ! CALL nethead (datafn(1:lendtf),time,packed) ELSE WRITE(6,'(a,i3,a)') & ' Data format flag had an invalid value ', & hinfmt ,' program stopped.' STOP END IF CALL retunit(nchanl) CLOSE(UNIT=nchanl) RETURN 998 CONTINUE WRITE(6,'(1x,a,a,/1x,i3,a)') & 'Error occured when opening file ',datafn(1:lendtf), & 'using FORTRAN unit ',nchanl,' Program returned from DTAHEAD.' RETURN END SUBROUTINE dtahead ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE BINHEAD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE binhead(inch,time,ireturn) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Read in data header ONLY from binary dataset created by ARPS. ! ! !----------------------------------------------------------------------- ! ! AUTHOR: Steven Lazarus ! 1/28/94. ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT : ! ! inch Channel number for binary reading. ! This channel must be opened for unformatted reading ! by the calling routine. ! ! OUTPUT: ! ! time Time in seconds of data read from "filename" ! ! ireturn Return status indicator ! =0, successful read of all data ! =1, error reading data ! =2, end-of-file reached during read attempt ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE REAL :: time INTEGER :: inch INTEGER :: ireturn ! !----------------------------------------------------------------------- ! ! Parameters describing routine that wrote the gridded data ! !----------------------------------------------------------------------- ! ! ! ! character*40 fmtver,fmtverin ! parameter (fmtver='003.20 Binary Data') CHARACTER (LEN=40) :: fmtver0,fmtver1,fmtver,fmtverin PARAMETER (fmtver='004.10 Binary Data') PARAMETER (fmtver0='003.20 Binary Data') PARAMETER (fmtver1='004.00 Binary Data') INTEGER :: oldver ! Flag indicating if the file is an old ! (oldver=1) or current format (oldver=0). CHARACTER (LEN=10) :: tmunit ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! INTEGER :: i ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! INCLUDE 'indtflg.inc' INCLUDE 'globcst.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Read header info ! !----------------------------------------------------------------------- ! READ(inch,ERR=110,END=120) fmtverin ! ! ! IF( fmtverin .ne. fmtver ) THEN ! write(6,'(/1x,a,/1x,2a,/1x,3a)') ! : 'Data format incompatible with the data reader.', ! : 'Format of data is ',fmtverin,' Format of reader is ',fmtver, ! : '. Job stopped.' ! STOP ! ENDIF IF( (fmtverin /= fmtver) .AND. (fmtverin /= fmtver0) & .AND. (fmtverin /= fmtver1) ) THEN WRITE(6,'(/1x,a/1x,2a/1x,2a/1x,2a/1x,a)') & 'Data format incompatible with the data reader.', & 'Format of data is ',fmtverin,' Format of reader is ',fmtver1, & 'compitable to ',fmtver0, '. Job stopped.' STOP END IF IF ( fmtverin == fmtver ) THEN oldver = 0 ELSE oldver = 1 END IF READ(inch,ERR=110,END=120) runname READ(inch,ERR=110,END=120) nocmnt IF( nocmnt > 0 ) THEN DO i=1,nocmnt READ(inch,ERR=110,END=120) cmnt(i) END DO END IF WRITE(6,'(//'' THE NAME OF THE INPUT DATA IS: '',A//)') runname READ(inch,ERR=110,END=120) time,tmunit ! !----------------------------------------------------------------------- ! ! Exit message ! !---------------------------------------------------------------------- ! WRITE(6,'(/a,F8.1,a/)') & ' Data header at time=', time,' (sec) were successfully read.' ireturn = 0 RETURN ! !----------------------------------------------------------------------- ! ! Error during read ! !---------------------------------------------------------------------- ! 110 CONTINUE WRITE(6,'(/a/)') ' Error reading data in BINHEAD' ireturn=1 RETURN ! !----------------------------------------------------------------------- ! ! End-of-file during read ! !---------------------------------------------------------------------- ! 120 CONTINUE WRITE(6,'(/a/)') ' End of file reached in BINHEAD' ireturn=2 RETURN END SUBROUTINE binhead ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE ASCHEAD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE aschead(inch,time,ireturn) 1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Read history data header ONLY from channel nchanl in formatted ! ASCII data format. ! ! !----------------------------------------------------------------------- ! ! AUTHOR: Steven Lazarus ! 1/28/94. ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! INPUT : ! ! inch Channel number for ASCII reading. ! This channel must be opened for formatted reading ! by the calling routine. ! ! OUTPUT: ! ! time Time in seconds of data read from "filename" ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: inch INTEGER :: ireturn REAL :: time ! !----------------------------------------------------------------------- ! ! Parameters describing routine that wrote the gridded data ! !----------------------------------------------------------------------- ! CHARACTER (LEN=40) :: fmtver,fmtverin PARAMETER (fmtver='003.20 ASCII Formatted Data') CHARACTER (LEN=10) :: tmunit ! !----------------------------------------------------------------------- ! ! Misc. local variables ! !----------------------------------------------------------------------- ! INTEGER :: i ! !----------------------------------------------------------------------- ! ! Include files: ! !----------------------------------------------------------------------- ! INCLUDE 'indtflg.inc' INCLUDE 'globcst.inc' ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! !----------------------------------------------------------------------- ! ! Read header info ! !----------------------------------------------------------------------- ! READ(inch,'(1x,a40)',ERR=110,END=120) fmtverin IF( fmtverin /= fmtver ) THEN WRITE(6,'(/1x,a,/1x,2a,/1x,3a)') & 'Data format incompatible with the data reader.', & 'Format of data is ',fmtverin,' Format of reader is ',fmtver, & '. Job stopped.' STOP END IF READ(inch,'(1x,a80)',ERR=110,END=120) runname WRITE(6,'(//'' THE NAME OF THIS RUN IS: '',A//)') runname ! READ(inch,'(1x,i4)',ERR=110,END=120) nocmnt IF( nocmnt > 0 ) THEN DO i=1,nocmnt READ(inch,'(1x,a80)',ERR=110,END=120) cmnt(i) END DO END IF ! READ(inch,'(1x,e16.8,1x,a10)',ERR=110,END=120) time,tmunit ! !----------------------------------------------------------------------- ! ! Friendly exit message ! !---------------------------------------------------------------------- ! 930 CONTINUE WRITE(6,'(/a,F8.1,a/)') & 'Header at time=', time,' (sec) was successfully read.' ireturn = 0 RETURN ! !----------------------------------------------------------------------- ! ! Error during read ! !---------------------------------------------------------------------- ! 110 CONTINUE WRITE(6,'(/a/)') ' Error reading data in ASCHEAD' ireturn=1 RETURN ! !----------------------------------------------------------------------- ! ! End-of-file during read ! !---------------------------------------------------------------------- ! 120 CONTINUE WRITE(6,'(/a/)') ' End of file reached in ASCHEAD' ireturn=2 RETURN END SUBROUTINE aschead