1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
|
SUBROUTINE ATIMIN( PATH, LINE, NSUBS, NAMES, TIMSUB, NOUT, INFO )
*
* -- LAPACK timing routine (version 3.0) --
* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
* Courant Institute, Argonne National Lab, and Rice University
* February 29, 1992
*
* .. Scalar Arguments ..
CHARACTER*80 LINE
CHARACTER*( * ) PATH
INTEGER INFO, NOUT, NSUBS
* ..
* .. Array Arguments ..
LOGICAL TIMSUB( * )
CHARACTER*( * ) NAMES( * )
* ..
*
* Purpose
* =======
*
* ATIMIN interprets the input line for the timing routines.
* The LOGICAL array TIMSUB returns .true. for each routine to be
* timed and .false. for the routines which are not to be timed.
*
* Arguments
* =========
*
* PATH (input) CHARACTER*(*)
* The LAPACK path name of the calling routine. The path name
* may be at most 6 characters long. If LINE(1:LEN(PATH)) is
* the same as PATH, then the input line is searched for NSUBS
* non-blank characters, otherwise, the input line is assumed to
* specify a single subroutine name.
*
* LINE (input) CHARACTER*80
* The input line to be evaluated. The path or subroutine name
* must begin in column 1 and the part of the line after the
* name is used to indicate the routines to be timed.
* See below for further details.
*
* NSUBS (input) INTEGER
* The number of subroutines in the LAPACK path name of the
* calling routine.
*
* NAMES (input) CHARACTER*(*) array, dimension (NSUBS)
* The names of the subroutines in the LAPACK path name of the
* calling routine.
*
* TIMSUB (output) LOGICAL array, dimension (NSUBS)
* For each I from 1 to NSUBS, TIMSUB( I ) is set to .true. if
* the subroutine NAMES( I ) is to be timed; otherwise,
* TIMSUB( I ) is set to .false.
*
* NOUT (input) INTEGER
* The unit number on which error messages will be printed.
*
* INFO (output) INTEGER
* The return status of this routine.
* = -1: Unrecognized path or subroutine name
* = 0: Normal return
* = 1: Name was recognized, but no timing requested
*
* Further Details
* ======= =======
*
* An input line begins with a subroutine or path name, optionally
* followed by one or more non-blank characters indicating the specific
* routines to be timed.
*
* If the character string in PATH appears at the beginning of LINE,
* up to NSUBS routines may be timed. If LINE is blank after the path
* name, all the routines in the path will be timed. If LINE is not
* blank after the path name, the rest of the line is searched
* for NSUBS nonblank characters, and if the i-th such character is
* 't' or 'T', then the i-th subroutine in this path will be timed.
* For example, the input line
* SGE T T T T
* requests timing of the first 4 subroutines in the SGE path.
*
* If the character string in PATH does not appear at the beginning of
* LINE, then LINE is assumed to begin with a subroutine name. The name
* is assumed to end in column 6 or in column i if column i+1 is blank
* and i+1 <= 6. If LINE is completely blank after the subroutine name,
* the routine will be timed. If LINE is not blank after the subroutine
* name, then the subroutine will be timed if the first non-blank after
* the name is 't' or 'T'.
*
* =====================================================================
*
* .. Local Scalars ..
LOGICAL REQ
CHARACTER*6 CNAME
INTEGER I, ISTART, ISTOP, ISUB, LCNAME, LNAMES, LPATH
* ..
* .. External Functions ..
LOGICAL LSAME, LSAMEN
EXTERNAL LSAME, LSAMEN
* ..
* .. Intrinsic Functions ..
INTRINSIC LEN, MIN
* ..
* .. Executable Statements ..
*
*
* Initialize
*
INFO = 0
LCNAME = 1
DO 10 I = 2, 6
IF( LINE( I: I ).EQ.' ' )
$ GO TO 20
LCNAME = I
10 CONTINUE
20 CONTINUE
LPATH = MIN( LCNAME+1, LEN( PATH ) )
LNAMES = MIN( LCNAME+1, LEN( NAMES( 1 ) ) )
CNAME = LINE( 1: LCNAME )
*
DO 30 I = 1, NSUBS
TIMSUB( I ) = .FALSE.
30 CONTINUE
ISTOP = 0
*
* Check for a valid path or subroutine name.
*
IF( LCNAME.LE.LEN( PATH ) .AND. LSAMEN( LPATH, CNAME, PATH ) )
$ THEN
ISTART = 1
ISTOP = NSUBS
ELSE IF( LCNAME.LE.LEN( NAMES( 1 ) ) ) THEN
DO 40 I = 1, NSUBS
IF( LSAMEN( LNAMES, CNAME, NAMES( I ) ) ) THEN
ISTART = I
ISTOP = I
END IF
40 CONTINUE
END IF
*
IF( ISTOP.EQ.0 ) THEN
WRITE( NOUT, FMT = 9999 )CNAME
9999 FORMAT( 1X, A, ': Unrecognized path or subroutine name', / )
INFO = -1
GO TO 110
END IF
*
* Search the rest of the input line for 1 or NSUBS nonblank
* characters, where 'T' or 't' means 'Time this routine'.
*
ISUB = ISTART
DO 50 I = LCNAME + 1, 80
IF( LINE( I: I ).NE.' ' ) THEN
TIMSUB( ISUB ) = LSAME( LINE( I: I ), 'T' )
ISUB = ISUB + 1
IF( ISUB.GT.ISTOP )
$ GO TO 60
END IF
50 CONTINUE
60 CONTINUE
*
* If no characters appear after the routine or path name, then
* time the routine or all the routines in the path.
*
IF( ISUB.EQ.ISTART ) THEN
DO 70 I = ISTART, ISTOP
TIMSUB( I ) = .TRUE.
70 CONTINUE
ELSE
*
* Test to see if any timing was requested.
*
REQ = .FALSE.
DO 80 I = ISTART, ISUB - 1
REQ = REQ .OR. TIMSUB( I )
80 CONTINUE
IF( .NOT.REQ ) THEN
WRITE( NOUT, FMT = 9998 )CNAME
9998 FORMAT( 1X, A, ' was not timed', / )
INFO = 1
GO TO 110
END IF
90 CONTINUE
*
* If fewer than NSUBS characters are specified for a path name,
* the rest are assumed to be 'F'.
*
DO 100 I = ISUB, ISTOP
TIMSUB( I ) = .FALSE.
100 CONTINUE
END IF
110 CONTINUE
RETURN
*
* End of ATIMIN
*
END
|