LAPACK 3.3.0

zdrvrf1.f

Go to the documentation of this file.
00001       SUBROUTINE ZDRVRF1( NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK )
00002 *
00003       IMPLICIT NONE
00004 *
00005 *  -- LAPACK test routine (version 3.2.0) --
00006 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
00007 *     November 2008
00008 *
00009 *     .. Scalar Arguments ..
00010       INTEGER            LDA, NN, NOUT
00011       DOUBLE PRECISION   THRESH
00012 *     ..
00013 *     .. Array Arguments ..
00014       INTEGER            NVAL( NN )
00015       DOUBLE PRECISION   WORK( * )
00016       COMPLEX*16         A( LDA, * ), ARF( * )
00017 *     ..
00018 *
00019 *  Purpose
00020 *  =======
00021 *
00022 *  ZDRVRF1 tests the LAPACK RFP routines:
00023 *      ZLANHF.F
00024 *
00025 *  Arguments
00026 *  =========
00027 *
00028 *  NOUT          (input) INTEGER
00029 *                The unit number for output.
00030 *
00031 *  NN            (input) INTEGER
00032 *                The number of values of N contained in the vector NVAL.
00033 *
00034 *  NVAL          (input) INTEGER array, dimension (NN)
00035 *                The values of the matrix dimension N.
00036 *
00037 *  THRESH        (input) DOUBLE PRECISION
00038 *                The threshold value for the test ratios.  A result is
00039 *                included in the output file if RESULT >= THRESH.  To have
00040 *                every test ratio printed, use THRESH = 0.
00041 *
00042 *  A             (workspace) COMPLEX*16 array, dimension (LDA,NMAX)
00043 *
00044 *  LDA           (input) INTEGER
00045 *                The leading dimension of the array A.  LDA >= max(1,NMAX).
00046 *
00047 *  ARF           (workspace) COMPLEX*16 array, dimension ((NMAX*(NMAX+1))/2).
00048 *
00049 *  WORK          (workspace) DOUBLE PRECISION array, dimension ( NMAX )
00050 *
00051 *  =====================================================================
00052 *     ..
00053 *     .. Parameters ..
00054       DOUBLE PRECISION   ONE
00055       PARAMETER          ( ONE = 1.0D+0 )
00056       INTEGER            NTESTS
00057       PARAMETER          ( NTESTS = 1 )
00058 *     ..
00059 *     .. Local Scalars ..
00060       CHARACTER          UPLO, CFORM, NORM
00061       INTEGER            I, IFORM, IIN, IIT, INFO, INORM, IUPLO, J, N,
00062      +                   NERRS, NFAIL, NRUN
00063       DOUBLE PRECISION   EPS, LARGE, NORMA, NORMARF, SMALL
00064 *     ..
00065 *     .. Local Arrays ..
00066       CHARACTER          UPLOS( 2 ), FORMS( 2 ), NORMS( 4 )
00067       INTEGER            ISEED( 4 ), ISEEDY( 4 )
00068       DOUBLE PRECISION   RESULT( NTESTS )
00069 *     ..
00070 *     .. External Functions ..
00071       COMPLEX*16         ZLARND
00072       DOUBLE PRECISION   DLAMCH, ZLANHE, ZLANHF
00073       EXTERNAL           DLAMCH, ZLARND, ZLANHE, ZLANHF
00074 *     ..
00075 *     .. External Subroutines ..
00076       EXTERNAL           ZTRTTF
00077 *     ..
00078 *     .. Scalars in Common ..
00079       CHARACTER*32       SRNAMT
00080 *     ..
00081 *     .. Common blocks ..
00082       COMMON             / SRNAMC / SRNAMT
00083 *     ..
00084 *     .. Data statements ..
00085       DATA               ISEEDY / 1988, 1989, 1990, 1991 /
00086       DATA               UPLOS / 'U', 'L' /
00087       DATA               FORMS / 'N', 'C' /
00088       DATA               NORMS / 'M', '1', 'I', 'F' /
00089 *     ..
00090 *     .. Executable Statements ..
00091 *
00092 *     Initialize constants and the random number seed.
00093 *
00094       NRUN = 0
00095       NFAIL = 0
00096       NERRS = 0
00097       INFO = 0
00098       DO 10 I = 1, 4
00099          ISEED( I ) = ISEEDY( I )
00100    10 CONTINUE
00101 *
00102       EPS = DLAMCH( 'Precision' )
00103       SMALL = DLAMCH( 'Safe minimum' )
00104       LARGE = ONE / SMALL
00105       SMALL = SMALL * LDA * LDA 
00106       LARGE = LARGE / LDA / LDA
00107 *
00108       DO 130 IIN = 1, NN
00109 *
00110          N = NVAL( IIN )
00111 *
00112          DO 120 IIT = 1, 3
00113 *
00114 *           IIT = 1 : random matrix
00115 *           IIT = 2 : random matrix scaled near underflow
00116 *           IIT = 3 : random matrix scaled near overflow
00117 *
00118             DO J = 1, N
00119                DO I = 1, N
00120                   A( I, J) = ZLARND( 4, ISEED )
00121                END DO
00122             END DO
00123 *
00124             IF ( IIT.EQ.2 ) THEN
00125                DO J = 1, N
00126                   DO I = 1, N
00127                      A( I, J) = A( I, J ) * LARGE
00128                   END DO
00129                END DO
00130             END IF
00131 *
00132             IF ( IIT.EQ.3 ) THEN
00133                DO J = 1, N
00134                   DO I = 1, N
00135                      A( I, J) = A( I, J) * SMALL
00136                   END DO
00137                END DO
00138             END IF
00139 *
00140 *           Do first for UPLO = 'U', then for UPLO = 'L'
00141 *
00142             DO 110 IUPLO = 1, 2
00143 *
00144                UPLO = UPLOS( IUPLO )
00145 *
00146 *              Do first for CFORM = 'N', then for CFORM = 'C'
00147 *
00148                DO 100 IFORM = 1, 2
00149 *
00150                   CFORM = FORMS( IFORM )
00151 *
00152                   SRNAMT = 'ZTRTTF'
00153                   CALL ZTRTTF( CFORM, UPLO, N, A, LDA, ARF, INFO )
00154 *
00155 *                 Check error code from ZTRTTF
00156 *
00157                   IF( INFO.NE.0 ) THEN
00158                      IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) THEN
00159                         WRITE( NOUT, * )
00160                         WRITE( NOUT, FMT = 9999 )
00161                      END IF
00162                      WRITE( NOUT, FMT = 9998 ) SRNAMT, UPLO, CFORM, N
00163                      NERRS = NERRS + 1
00164                      GO TO 100
00165                   END IF
00166 *
00167                   DO 90 INORM = 1, 4
00168 *
00169 *                    Check all four norms: 'M', '1', 'I', 'F'
00170 *
00171                      NORM = NORMS( INORM )
00172                      NORMARF = ZLANHF( NORM, CFORM, UPLO, N, ARF, WORK )
00173                      NORMA = ZLANHE( NORM, UPLO, N, A, LDA, WORK )
00174 *
00175                      RESULT(1) = ( NORMA - NORMARF ) / NORMA / EPS
00176                      NRUN = NRUN + 1
00177 *
00178                      IF( RESULT(1).GE.THRESH ) THEN
00179                         IF( NFAIL.EQ.0 .AND. NERRS.EQ.0 ) THEN
00180                            WRITE( NOUT, * )
00181                            WRITE( NOUT, FMT = 9999 )
00182                         END IF
00183                         WRITE( NOUT, FMT = 9997 ) 'ZLANHF', 
00184      +                      N, IIT, UPLO, CFORM, NORM, RESULT(1)
00185                         NFAIL = NFAIL + 1
00186                      END IF
00187    90             CONTINUE
00188   100          CONTINUE
00189   110       CONTINUE
00190   120    CONTINUE
00191   130 CONTINUE
00192 *
00193 *     Print a summary of the results.
00194 *
00195       IF ( NFAIL.EQ.0 ) THEN
00196          WRITE( NOUT, FMT = 9996 ) 'ZLANHF', NRUN
00197       ELSE
00198          WRITE( NOUT, FMT = 9995 ) 'ZLANHF', NFAIL, NRUN
00199       END IF
00200       IF ( NERRS.NE.0 ) THEN
00201          WRITE( NOUT, FMT = 9994 ) NERRS, 'ZLANHF'
00202       END IF
00203 *
00204  9999 FORMAT( 1X, 
00205 ' *** Error(s) or Failure(s) while testing ZLANHF     +         ***')
00206  9998 FORMAT( 1X, '     Error in ',A6,' with UPLO=''',A1,''', FORM=''',
00207      +        A1,''', N=',I5)
00208  9997 FORMAT( 1X, '     Failure in ',A6,' N=',I5,' TYPE=',I5,' UPLO=''',
00209      +        A1, ''', FORM =''',A1,''', NORM=''',A1,''', test=',G12.5)
00210  9996 FORMAT( 1X, 'All tests for ',A6,' auxiliary routine passed the ',
00211      +        'threshold (',I5,' tests run)')
00212  9995 FORMAT( 1X, A6, ' auxiliary routine:',I5,' out of ',I5,
00213      +        ' tests failed to pass the threshold')
00214  9994 FORMAT( 26X, I5,' error message recorded (',A6,')')
00215 *
00216       RETURN
00217 *
00218 *     End of ZDRVRF1
00219 *
00220       END
 All Files Functions