! ! The file contain Cray PVP (C90, J90, T90 etc) UniCOS system ! specific subroutines ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE DUMMY ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE dummy ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Dummy subroutine to substitute Cray function ASNCTL. ! !----------------------------------------------------------------------- ! RETURN END SUBROUTINE dummy ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE UNIXCMD ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE unixcmd(cmd) 17 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! To executable a system command by making a system call. ! !----------------------------------------------------------------------- ! ! Author: Ming Xue ! Date: 4/15/95 ! ! MODIFICATION HISTORY: ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE CHARACTER (LEN=*) :: cmd INTEGER :: ishell,istat ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! istat = ishell( cmd ) RETURN END SUBROUTINE unixcmd ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE CMPRS ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE cmprs(filename) 4,9 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Make a system call to compress the file 'filename' with ! using gzip or when gzip fails compress. ! !----------------------------------------------------------------------- ! ! Author: Ming Xue ! Date: 11/30/93 ! ! MODIFICATION HISTORY: ! ! 9/1/94 (Y. Lu) ! Cleaned up documentation. ! ! 11/27/95 (M. Xue) ! Options to compress using gzip and compress. ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE CHARACTER (LEN=*) :: filename CHARACTER (LEN=132) :: CHAR INTEGER :: lenstr,ishell,istat ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! lenstr = LEN( filename ) CALL strlnth( filename, lenstr) CHAR = 'gzip --fast ' CHAR(13:12+lenstr) = filename IF( 12+lenstr > 132) THEN WRITE(6,'(1x,a)') & 'Work character char too small in CMPRS, call returned.' END IF WRITE(6,'(1x,a,a,a)') 'Compressing file ',filename,' ...' istat = ishell( CHAR(1:12+lenstr) ) IF( istat /= 0) THEN CHAR = 'compress ' CHAR(10:9+lenstr) = filename istat = ishell( CHAR(1:9+lenstr) ) IF( istat /= 0) WRITE(6,'(1x,a,a,a)') & 'Compression of file ',filename(1:lenstr), & ' was unsucessful in CMPRS.' END IF RETURN END SUBROUTINE cmprs ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE UNCMPRS ###### !###### ###### !###### Developed by ###### !###### Center for Analysis and Prediction of Storms ###### !###### University of Oklahoma ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE uncmprs(filename) 14,9 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! Make a system call to uncompress the file 'filename' with gunzip ! format developed by Free Software Foundation. ! !----------------------------------------------------------------------- ! ! Author: Ming Xue ! Date: 11/30/93 ! ! MODIFICATION HISTORY: ! ! 9/1/94 (Y. Lu) ! Cleaned up documentation. ! ! 11/27/1995 (M. Xue) ! Decompression for both .Z and .gz files. ! !----------------------------------------------------------------------- ! ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE CHARACTER (LEN=*) :: filename CHARACTER (LEN=132) :: CHAR INTEGER :: lenstr,lenfn,ishell,istat ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! lenfn = LEN( filename ) CALL strlnth( filename, lenfn) lenstr=lenfn IF(filename(lenstr-1:lenstr) == '.Z') THEN CHAR = 'uncompress ' CHAR(12:12+lenstr) = filename lenstr=lenstr+12 ELSE IF(filename(lenstr-2:lenstr) == '.gz') THEN CHAR = 'gunzip ' CHAR(8:7+lenstr) = filename lenstr = lenstr+8 ELSE WRITE(6,'(1x,a,/1x,a)') & 'File name does not have the right affix.', & 'No decompressing was done on file ',filename RETURN END IF IF( lenstr > 132 ) THEN WRITE(6,'(1x,a)') & 'Work character char too small in UNCMPRS, call returned.' END IF WRITE(6,'(1x,a,a,a)') 'Decompressing file ',filename,' ...' istat = ishell( CHAR(1:lenstr) ) IF( istat /= 0) WRITE(6,'(1x,a,a,a)') & 'Compression of file ',filename(1:lenfn), & ' was unsucessful in CMPRS.' RETURN END SUBROUTINE uncmprs ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE GRBSBYTE ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE grbsbyte(iout,in,iskip,nbits) 2 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! SBYTE - Insert a number of bit fields. Cray routine. ! ! Reverses the action of gbytes, taking fields from s and ! inserting them into a bit string in d. see GBYTE. ! !----------------------------------------------------------------------- ! ! AUTHOR: D. Robertson ! Aug. 1981 ! MODIFICATIONS: ! ! 12/05/95 (Yuhe Liu) ! Converted to ARPS standard format and added documents ! !----------------------------------------------------------------------- ! ! INPUT: ! ! in Integer array to be packed ! iskip ! nbits bits number of packing ! ! OUTPUT: ! ! iout Packed stream ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: in INTEGER :: nbits INTEGER :: iskip INTEGER :: iout(*) ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: nbpw PARAMETER (nbpw=64) INTEGER :: iw, id INTEGER :: iskip1, ibits INTEGER :: icon, INDEX INTEGER :: mask, msk INTEGER :: movel, iwords INTEGER :: itemp INTEGER :: sh1,sh2,sh3 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! id = 1 + iskip/nbpw iskip1 = MOD(iskip,nbpw) sh1 = iskip1 + nbits IF (sh1 > nbpw) GO TO 50 sh2 = nbpw - sh1 IF (sh2 < 0) sh2 = nbpw-sh2 ! !----------------------------------------------------------------------- ! ! Byte goes into 1 word of iout. ! !----------------------------------------------------------------------- ! iout(1) = shift( OR( AND(shift(iout(1),sh1),mask(nbpw-nbits)), & AND(in,shift(mask(nbits),nbits))),sh2) RETURN 50 CONTINUE ! !----------------------------------------------------------------------- ! ! Byte goes into 2 words of iout. ! !----------------------------------------------------------------------- ! sh3 = 2*nbpw-sh1 iout(1) = OR( AND(iout(id),mask(iskip1)), & AND(shift(in,sh3),compl(mask(iskip1))) ) iout(2) = OR( AND(iout(id+1),shift(compl(mask(sh1-nbpw)),nbpw)), & shift(AND(in,compl(mask(sh3))),sh3) ) RETURN END SUBROUTINE grbsbyte ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE GRBSBYTES ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE grbsbytes(iout,in,iskip,nbits,nskip,nwrd) 1,1 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! SBYTES - Insert a number of bit fields. Cray routine. ! ! Reverses the action of gbytes, taking fields from s and ! inserting them into a bit string in d. see GBYTES. ! !----------------------------------------------------------------------- ! ! AUTHOR: D. Robertson ! Aug. 1981 ! MODIFICATIONS: ! ! 12/05/95 (Yuhe Liu) ! Converted to ARPS standard format and added documents ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nwrd Number of word to be packed ! in Integer array to be packed ! iskip ! nbits bits number of packing ! nskip ! ! OUTPUT: ! ! iout Packed stream ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nwrd INTEGER :: in(nwrd) INTEGER :: nbits INTEGER :: iskip INTEGER :: nskip INTEGER :: iout(nwrd) ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: nbpw PARAMETER (nbpw=64) INTEGER :: iw, id INTEGER :: iskip1,ibits INTEGER :: icon, INDEX INTEGER :: mask, msk INTEGER :: movel, iwords, istep INTEGER :: itemp INTEGER :: sh1,sh2,sh3 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! id = 1 + iskip/nbpw iskip1 = MOD(iskip,nbpw) istep = nskip + nbits DO iw=1,nwrd sh1 = iskip1 + nbits IF (sh1 > nbpw) GO TO 50 sh2 = nbpw - sh1 IF (sh2 < 0) sh2 = nbpw-sh2 ! !----------------------------------------------------------------------- ! ! Byte goes into 1 word of iout. ! !----------------------------------------------------------------------- ! iout(id) = shift(OR(AND(shift(iout(id),sh1),mask(nbpw-nbits)), & AND(in(iw),shift(mask(nbits),nbits))),sh2) GO TO 65 50 CONTINUE ! !----------------------------------------------------------------------- ! ! Byte goes into 2 words of iout. ! !----------------------------------------------------------------------- ! sh3 = 2*nbpw-sh1 iout(id) = OR( AND(iout(id),mask(iskip1)), & AND(shift(in(iw),sh3),compl(mask(iskip1))) ) iout(id+1) = OR( AND(iout(id+1),shift(compl(mask(sh1-nbpw)), & nbpw)), & shift(AND(in(iw),compl(mask(sh3))),sh3) ) 65 CONTINUE ! !----------------------------------------------------------------------- ! ! Update starting word and bit position ! !----------------------------------------------------------------------- ! iskip1 = iskip1 + istep IF (iskip1 < nbpw) CYCLE iskip1 = iskip1 - nbpw id = id + 1 + iskip1/nbpw iskip1 = MOD(iskip1,nbpw) END DO RETURN END SUBROUTINE grbsbytes ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE GRBGBYTE ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE grbgbyte(in,iout,iskip,nbits) 156 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! GBYTE - Extract a number of bit fields. Cray routine. ! ! IN is bit string of indefinite length. Gbytes will ! extract a bitstrings, nbits bits long, and store them ! right justified 0 fill, into successive words of d. The ! successive bitstrings start at bit positions ! ! iskip+1+(iw-1)*(nbits+nskip) ! ! In the bit string s. i.e. skip iskip bits at the start, ! and nskip bits between the extracted strings. ! Bit iskp+1 in a string is found in word is=1+iskip/nbpw in IN, ! where nbpw is the number of bits per word. the starting bit ! is found by skipping mod(iskp,nbpw) bits in that word. ! !----------------------------------------------------------------------- ! ! AUTHOR: D. Robertson ! Aug. 1981 ! MODIFICATIONS: ! ! 12/05/95 (Yuhe Liu) ! Converted to ARPS standard format and added documents ! !----------------------------------------------------------------------- ! ! INPUT: ! ! in Integer array to be packed ! iskip ! nbits bits number of packing ! ! OUTPUT: ! ! iout Packed stream ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: in(*) INTEGER :: nbits INTEGER :: iskip INTEGER :: iout ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: nbpw PARAMETER (nbpw=64) INTEGER :: iw, id INTEGER :: iskip1, ibits INTEGER :: icon, INDEX INTEGER :: mask, msk INTEGER :: movel, iwords INTEGER :: itemp INTEGER :: sh1,sh2,sh3 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! id = 1 + iskip/nbpw iskip1 = MOD(iskip,nbpw) sh1 = iskip1 + nbits IF(sh1 > nbpw) GO TO 50 ! !----------------------------------------------------------------------- ! ! Byte comes fromm 1 word of IN ! !----------------------------------------------------------------------- ! iout = AND( shift(in(id),sh1), shift(mask(nbits),nbits) ) RETURN 50 CONTINUE sh1 = sh1 - nbpw ! !----------------------------------------------------------------------- ! ! Byte comes from 2 words of IN. ! !----------------------------------------------------------------------- ! iout = OR( shift(AND(in(id),compl(mask(iskip1))),sh1), & shift(AND(in(id+1),mask(sh1)),sh1) ) RETURN END SUBROUTINE grbgbyte ! !################################################################## !################################################################## !###### ###### !###### SUBROUTINE GRBGBYTES ###### !###### ###### !################################################################## !################################################################## ! SUBROUTINE grbgbytes(in,iout,iskip,nbits,nskip,nwrd) 7 ! !----------------------------------------------------------------------- ! ! PURPOSE: ! ! GBYTES - Extract a number of bit fields. Cray routine. ! ! IN is bit string of indefinite length. Gbytes will ! extract nwrd bitstrings, nbits bits long, and store them ! right justified 0 fill, into successive words of d. The ! successive bitstrings start at bit positions ! ! iskip+1+(iw-1)*(nbits+nskip) ! ! In the bit string s. i.e. skip iskip bits at the start, ! and nskip bits between the extracted strings. ! Bit iskp+1 in a string is found in word is=1+iskip/nbpw in IN, ! where nbpw is the number of bits per word. the starting bit ! is found by skipping mod(iskp,nbpw) bits in that word. ! !----------------------------------------------------------------------- ! ! AUTHOR: D. Robertson ! Aug. 1981 ! MODIFICATIONS: ! ! 12/05/95 (Yuhe Liu) ! Converted to ARPS standard format and added documents ! !----------------------------------------------------------------------- ! ! INPUT: ! ! nwrd Number of word to be packed ! in Integer array to be packed ! iskip ! nbits bits number of packing ! nskip ! ! OUTPUT: ! ! iout Packed stream ! !----------------------------------------------------------------------- ! ! Variable Declarations. ! !----------------------------------------------------------------------- ! IMPLICIT NONE INTEGER :: nwrd INTEGER :: in(nwrd) INTEGER :: nbits INTEGER :: iskip INTEGER :: nskip INTEGER :: iout(nwrd) ! !----------------------------------------------------------------------- ! ! Misc. local variables: ! !----------------------------------------------------------------------- ! INTEGER :: nbpw PARAMETER (nbpw=64) INTEGER :: iw, id INTEGER :: iskip1,ibits INTEGER :: icon, INDEX INTEGER :: mask, msk INTEGER :: movel, iwords, istep INTEGER :: itemp INTEGER :: sh1,sh2,sh3 ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! ! Beginning of executable code... ! !@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ! id = 1 + iskip/nbpw iskip1 = MOD(iskip,nbpw) istep = nskip + nbits DO iw=1,nwrd sh1 = iskip1 + nbits IF(sh1 > nbpw) GO TO 50 ! !----------------------------------------------------------------------- ! ! Byte comes fromm 1 word of IN ! !----------------------------------------------------------------------- ! iout(iw) = AND( shift(in(id),sh1), shift(mask(nbits),nbits) ) GO TO 65 50 CONTINUE sh1 = sh1 - nbpw ! !----------------------------------------------------------------------- ! ! Byte comes from 2 words of IN. ! !----------------------------------------------------------------------- ! iout(iw) = OR( shift(AND(in(id),compl(mask(iskip1))),sh1), & shift(AND(in(id+1),mask(sh1)),sh1) ) 65 CONTINUE ! !----------------------------------------------------------------------- ! ! Update starting word and bit position ! !----------------------------------------------------------------------- ! iskip1 = iskip1 + istep IF(iskip1 < nbpw) CYCLE iskip1 = iskip1 - nbpw id = id + 1 + iskip1/nbpw iskip1 = MOD(iskip1,nbpw) END DO RETURN END SUBROUTINE grbgbytes REAL FUNCTION f_cputime() 31 !------------------------------------------------------------------------------ ! CRAY DEFINITION FOR TIMING !------------------------------------------------------------------------------ f_cputime = second() RETURN END FUNCTION f_cputime INTEGER FUNCTION lnblnk(str),3 CHARACTER (LEN=*) :: str lnblnk = LEN(str) CALL strlnth( str, lnblnk) RETURN END FUNCTION lnblnk