You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.0 KiB
218 lines
6.0 KiB
*> \brief \b ALAREQ
|
|
*
|
|
* =========== DOCUMENTATION ===========
|
|
*
|
|
* Online html documentation available at
|
|
* http://www.netlib.org/lapack/explore-html/
|
|
*
|
|
* Definition:
|
|
* ===========
|
|
*
|
|
* SUBROUTINE ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
|
|
*
|
|
* .. Scalar Arguments ..
|
|
* CHARACTER*3 PATH
|
|
* INTEGER NIN, NMATS, NOUT, NTYPES
|
|
* ..
|
|
* .. Array Arguments ..
|
|
* LOGICAL DOTYPE( * )
|
|
* ..
|
|
*
|
|
*
|
|
*> \par Purpose:
|
|
* =============
|
|
*>
|
|
*> \verbatim
|
|
*>
|
|
*> ALAREQ handles input for the LAPACK test program. It is called
|
|
*> to evaluate the input line which requested NMATS matrix types for
|
|
*> PATH. The flow of control is as follows:
|
|
*>
|
|
*> If NMATS = NTYPES then
|
|
*> DOTYPE(1:NTYPES) = .TRUE.
|
|
*> else
|
|
*> Read the next input line for NMATS matrix types
|
|
*> Set DOTYPE(I) = .TRUE. for each valid type I
|
|
*> endif
|
|
*> \endverbatim
|
|
*
|
|
* Arguments:
|
|
* ==========
|
|
*
|
|
*> \param[in] PATH
|
|
*> \verbatim
|
|
*> PATH is CHARACTER*3
|
|
*> An LAPACK path name for testing.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] NMATS
|
|
*> \verbatim
|
|
*> NMATS is INTEGER
|
|
*> The number of matrix types to be used in testing this path.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[out] DOTYPE
|
|
*> \verbatim
|
|
*> DOTYPE is LOGICAL array, dimension (NTYPES)
|
|
*> The vector of flags indicating if each type will be tested.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] NTYPES
|
|
*> \verbatim
|
|
*> NTYPES is INTEGER
|
|
*> The maximum number of matrix types for this path.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] NIN
|
|
*> \verbatim
|
|
*> NIN is INTEGER
|
|
*> The unit number for input. NIN >= 1.
|
|
*> \endverbatim
|
|
*>
|
|
*> \param[in] NOUT
|
|
*> \verbatim
|
|
*> NOUT is INTEGER
|
|
*> The unit number for output. NOUT >= 1.
|
|
*> \endverbatim
|
|
*
|
|
* Authors:
|
|
* ========
|
|
*
|
|
*> \author Univ. of Tennessee
|
|
*> \author Univ. of California Berkeley
|
|
*> \author Univ. of Colorado Denver
|
|
*> \author NAG Ltd.
|
|
*
|
|
*> \ingroup aux_eig
|
|
*
|
|
* =====================================================================
|
|
SUBROUTINE ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
|
|
*
|
|
* -- LAPACK test routine --
|
|
* -- LAPACK is a software package provided by Univ. of Tennessee, --
|
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
|
|
*
|
|
* .. Scalar Arguments ..
|
|
CHARACTER*3 PATH
|
|
INTEGER NIN, NMATS, NOUT, NTYPES
|
|
* ..
|
|
* .. Array Arguments ..
|
|
LOGICAL DOTYPE( * )
|
|
* ..
|
|
*
|
|
* =====================================================================
|
|
*
|
|
* .. Local Scalars ..
|
|
LOGICAL FIRSTT
|
|
CHARACTER C1
|
|
CHARACTER*10 INTSTR
|
|
CHARACTER*80 LINE
|
|
INTEGER I, I1, IC, J, K, LENP, NT
|
|
* ..
|
|
* .. Local Arrays ..
|
|
INTEGER NREQ( 100 )
|
|
* ..
|
|
* .. Intrinsic Functions ..
|
|
INTRINSIC LEN
|
|
* ..
|
|
* .. Data statements ..
|
|
DATA INTSTR / '0123456789' /
|
|
* ..
|
|
* .. Executable Statements ..
|
|
*
|
|
IF( NMATS.GE.NTYPES ) THEN
|
|
*
|
|
* Test everything if NMATS >= NTYPES.
|
|
*
|
|
DO 10 I = 1, NTYPES
|
|
DOTYPE( I ) = .TRUE.
|
|
10 CONTINUE
|
|
ELSE
|
|
DO 20 I = 1, NTYPES
|
|
DOTYPE( I ) = .FALSE.
|
|
20 CONTINUE
|
|
FIRSTT = .TRUE.
|
|
*
|
|
* Read a line of matrix types if 0 < NMATS < NTYPES.
|
|
*
|
|
IF( NMATS.GT.0 ) THEN
|
|
READ( NIN, FMT = '(A80)', END = 90 )LINE
|
|
LENP = LEN( LINE )
|
|
I = 0
|
|
DO 60 J = 1, NMATS
|
|
NREQ( J ) = 0
|
|
I1 = 0
|
|
30 CONTINUE
|
|
I = I + 1
|
|
IF( I.GT.LENP ) THEN
|
|
IF( J.EQ.NMATS .AND. I1.GT.0 ) THEN
|
|
GO TO 60
|
|
ELSE
|
|
WRITE( NOUT, FMT = 9995 )LINE
|
|
WRITE( NOUT, FMT = 9994 )NMATS
|
|
GO TO 80
|
|
END IF
|
|
END IF
|
|
IF( LINE( I: I ).NE.' ' .AND. LINE( I: I ).NE.',' ) THEN
|
|
I1 = I
|
|
C1 = LINE( I1: I1 )
|
|
*
|
|
* Check that a valid integer was read
|
|
*
|
|
DO 40 K = 1, 10
|
|
IF( C1.EQ.INTSTR( K: K ) ) THEN
|
|
IC = K - 1
|
|
GO TO 50
|
|
END IF
|
|
40 CONTINUE
|
|
WRITE( NOUT, FMT = 9996 )I, LINE
|
|
WRITE( NOUT, FMT = 9994 )NMATS
|
|
GO TO 80
|
|
50 CONTINUE
|
|
NREQ( J ) = 10*NREQ( J ) + IC
|
|
GO TO 30
|
|
ELSE IF( I1.GT.0 ) THEN
|
|
GO TO 60
|
|
ELSE
|
|
GO TO 30
|
|
END IF
|
|
60 CONTINUE
|
|
END IF
|
|
DO 70 I = 1, NMATS
|
|
NT = NREQ( I )
|
|
IF( NT.GT.0 .AND. NT.LE.NTYPES ) THEN
|
|
IF( DOTYPE( NT ) ) THEN
|
|
IF( FIRSTT )
|
|
$ WRITE( NOUT, FMT = * )
|
|
FIRSTT = .FALSE.
|
|
WRITE( NOUT, FMT = 9997 )NT, PATH
|
|
END IF
|
|
DOTYPE( NT ) = .TRUE.
|
|
ELSE
|
|
WRITE( NOUT, FMT = 9999 )PATH, NT, NTYPES
|
|
9999 FORMAT( ' *** Invalid type request for ', A3, ', type ',
|
|
$ I4, ': must satisfy 1 <= type <= ', I2 )
|
|
END IF
|
|
70 CONTINUE
|
|
80 CONTINUE
|
|
END IF
|
|
RETURN
|
|
*
|
|
90 CONTINUE
|
|
WRITE( NOUT, FMT = 9998 )PATH
|
|
9998 FORMAT( /' *** End of file reached when trying to read matrix ',
|
|
$ 'types for ', A3, /' *** Check that you are requesting the',
|
|
$ ' right number of types for each path', / )
|
|
9997 FORMAT( ' *** Warning: duplicate request of matrix type ', I2,
|
|
$ ' for ', A3 )
|
|
9996 FORMAT( //' *** Invalid integer value in column ', I2,
|
|
$ ' of input', ' line:', /A79 )
|
|
9995 FORMAT( //' *** Not enough matrix types on input line', /A79 )
|
|
9994 FORMAT( ' ==> Specify ', I4, ' matrix types on this line or ',
|
|
$ 'adjust NTYPES on previous line' )
|
|
WRITE( NOUT, FMT = * )
|
|
STOP
|
|
*
|
|
* End of ALAREQ
|
|
*
|
|
END
|
|
|