diff options
author | julie <julielangou@users.noreply.github.com> | 2008-12-16 17:06:58 +0000 |
---|---|---|
committer | julie <julielangou@users.noreply.github.com> | 2008-12-16 17:06:58 +0000 |
commit | ff981f106bde4ce6a74aa4f4a572c943f5a395b2 (patch) | |
tree | a386cad907bcaefd6893535c31d67ec9468e693e /TESTING/LIN/ddrvrf1.f | |
parent | e58b61578b55644f6391f3333262b72c1dc88437 (diff) |
Diffstat (limited to 'TESTING/LIN/ddrvrf1.f')
-rw-r--r-- | TESTING/LIN/ddrvrf1.f | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/TESTING/LIN/ddrvrf1.f b/TESTING/LIN/ddrvrf1.f new file mode 100644 index 00000000..0b9413e6 --- /dev/null +++ b/TESTING/LIN/ddrvrf1.f @@ -0,0 +1,216 @@ + SUBROUTINE DDRVRF1( NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK ) +* +* -- LAPACK test routine (version 3.2.0) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2008 +* +* .. Scalar Arguments .. + INTEGER LDA, NN, NOUT + DOUBLE PRECISION THRESH +* .. +* .. Array Arguments .. + INTEGER NVAL( NN ) + DOUBLE PRECISION A( LDA, * ), ARF( * ), WORK( * ) +* .. +* +* Purpose +* ======= +* +* DDRVRF1 tests the LAPACK RFP routines: +* DLANSF +* +* Arguments +* ========= +* +* NOUT (input) INTEGER +* The unit number for output. +* +* NN (input) INTEGER +* The number of values of N contained in the vector NVAL. +* +* NVAL (input) INTEGER array, dimension (NN) +* The values of the matrix dimension N. +* +* THRESH (input) DOUBLE PRECISION +* The threshold value for the test ratios. A result is +* included in the output file if RESULT >= THRESH. To have +* every test ratio printed, use THRESH = 0. +* +* A (workspace) DOUBLE PRECISION array, dimension (LDA,NMAX) +* +* LDA (input) INTEGER +* The leading dimension of the array A. LDA >= max(1,NMAX). +* +* ARF (workspace) DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2). +* +* WORK (workspace) DOUBLE PRECISION array, dimension ( NMAX ) +* +* ===================================================================== +* .. +* .. Parameters .. + DOUBLE PRECISION ONE + PARAMETER ( ONE = 1.0D+0 ) + INTEGER NTESTS + PARAMETER ( NTESTS = 1 ) +* .. +* .. Local Scalars .. + CHARACTER UPLO, CFORM, NORM + INTEGER I, IFORM, IIN, IIT, INFO, INORM, IUPLO, J, N, + + NERRS, NFAIL, NRUN + DOUBLE PRECISION EPS, LARGE, NORMA, NORMARF, SMALL +* .. +* .. Local Arrays .. + CHARACTER UPLOS( 2 ), FORMS( 2 ), NORMS( 4 ) + INTEGER ISEED( 4 ), ISEEDY( 4 ) + DOUBLE PRECISION RESULT( NTESTS ) +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, DLANSY, DLANSF, DLARND + EXTERNAL DLAMCH, DLANSY, DLANSF, DLARND +* .. +* .. External Subroutines .. + EXTERNAL DTRTTF +* .. +* .. Scalars in Common .. + CHARACTER*32 SRNAMT +* .. +* .. Common blocks .. + COMMON / SRNAMC / SRNAMT +* .. +* .. Data statements .. + DATA ISEEDY / 1988, 1989, 1990, 1991 / + DATA UPLOS / 'U', 'L' / + DATA FORMS / 'N', 'T' / + DATA NORMS / 'M', '1', 'I', 'F' / +* .. +* .. Executable Statements .. +* +* Initialize constants and the random number seed. +* + NRUN = 0 + NFAIL = 0 + NERRS = 0 + INFO = 0 + DO 10 I = 1, 4 + ISEED( I ) = ISEEDY( I ) + 10 CONTINUE +* + EPS = DLAMCH( 'Precision' ) + SMALL = DLAMCH( 'Safe minimum' ) + LARGE = ONE / SMALL + SMALL = SMALL * LDA * LDA + LARGE = LARGE / LDA / LDA +* + DO 130 IIN = 1, NN +* + N = NVAL( IIN ) +* + DO 120 IIT = 1, 3 +* +* IIT = 1 : random matrix +* IIT = 2 : random matrix scaled near underflow +* IIT = 3 : random matrix scaled near overflow +* + DO J = 1, N + DO I = 1, N + A( I, J) = DLARND( 2, ISEED ) + END DO + END DO +* + IF ( IIT.EQ.2 ) THEN + DO J = 1, N + DO I = 1, N + A( I, J) = A( I, J ) * LARGE + END DO + END DO + END IF +* + IF ( IIT.EQ.3 ) THEN + DO J = 1, N + DO I = 1, N + A( I, J) = A( I, J) * SMALL + END DO + END DO + END IF +* +* Do first for UPLO = 'U', then for UPLO = 'L' +* + DO 110 IUPLO = 1, 2 +* + UPLO = UPLOS( IUPLO ) +* +* Do first for CFORM = 'N', then for CFORM = 'C' +* + DO 100 IFORM = 1, 2 +* + CFORM = FORMS( IFORM ) +* + SRNAMT = 'DTRTTF' + CALL DTRTTF( CFORM, UPLO, N, A, LDA, ARF, INFO ) +* +* Check error code from DTRTTF +* + IF( INFO.NE.0 ) THEN + IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) THEN + WRITE( NOUT, * ) + WRITE( NOUT, FMT = 9999 ) + END IF + WRITE( NOUT, FMT = 9998 ) SRNAMT, UPLO, CFORM, N + NERRS = NERRS + 1 + GO TO 100 + END IF +* + DO 90 INORM = 1, 4 +* +* Check all four norms: 'M', '1', 'I', 'F' +* + NORM = NORMS( INORM ) + NORMARF = DLANSF( NORM, CFORM, UPLO, N, ARF, WORK ) + NORMA = DLANSY( NORM, UPLO, N, A, LDA, WORK ) +* + RESULT(1) = ( NORMA - NORMARF ) / NORMA / EPS + NRUN = NRUN + 1 +* + IF( RESULT(1).GE.THRESH ) THEN + IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) THEN + WRITE( NOUT, * ) + WRITE( NOUT, FMT = 9999 ) + END IF + WRITE( NOUT, FMT = 9997 ) 'DLANSF', + + N, IIT, UPLO, CFORM, NORM, RESULT(1) + NFAIL = NFAIL + 1 + END IF + 90 CONTINUE + 100 CONTINUE + 110 CONTINUE + 120 CONTINUE + 130 CONTINUE +* +* Print a summary of the results. +* + IF ( NFAIL.EQ.0 ) THEN + WRITE( NOUT, FMT = 9996 ) 'DLANSF', NRUN + ELSE + WRITE( NOUT, FMT = 9995 ) 'DLANSF', NFAIL, NRUN + END IF + IF ( NERRS.NE.0 ) THEN + WRITE( NOUT, FMT = 9994 ) NERRS, 'DLANSF' + END IF +* + 9999 FORMAT( 1X, ' *** Error(s) or Failure(s) while testing DLANSF + + ***') + 9998 FORMAT( 1X, ' Error in ',A6,' with UPLO=''',A1,''', FORM=''', + + A1,''', N=',I5) + 9997 FORMAT( 1X, ' Failure in ',A6,' N=',I5,' TYPE=',I5,' UPLO=''', + + A1, ''', FORM =''',A1,''', NORM=''',A1,''', test=',G12.5) + 9996 FORMAT( 1X, 'All tests for ',A6,' auxiliary routine passed the ', + + 'threshold (',I5,' tests run)') + 9995 FORMAT( 1X, A6, ' auxiliary routine:',I5,' out of ',I5, + + ' tests failed to pass the threshold') + 9994 FORMAT( 26X, I5,' error message recorded (',A6,')') +* + RETURN +* +* End of DDRVRF1 +* + END |