LAPACK 3.3.0
|
00001 SUBROUTINE DDRVRF2( NOUT, NN, NVAL, A, LDA, ARF, AP, ASAV ) 00002 * 00003 * -- LAPACK test routine (version 3.2.0) -- 00004 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 00005 * November 2008 00006 * 00007 * .. Scalar Arguments .. 00008 INTEGER LDA, NN, NOUT 00009 * .. 00010 * .. Array Arguments .. 00011 INTEGER NVAL( NN ) 00012 DOUBLE PRECISION A( LDA, * ), ARF( * ), AP(*), ASAV( LDA, * ) 00013 * .. 00014 * 00015 * Purpose 00016 * ======= 00017 * 00018 * DDRVRF2 tests the LAPACK RFP convertion routines. 00019 * 00020 * Arguments 00021 * ========= 00022 * 00023 * NOUT (input) INTEGER 00024 * The unit number for output. 00025 * 00026 * NN (input) INTEGER 00027 * The number of values of N contained in the vector NVAL. 00028 * 00029 * NVAL (input) INTEGER array, dimension (NN) 00030 * The values of the matrix dimension N. 00031 * 00032 * A (workspace) DOUBLE PRECISION array, dimension (LDA,NMAX) 00033 * 00034 * LDA (input) INTEGER 00035 * The leading dimension of the array A. LDA >= max(1,NMAX). 00036 * 00037 * ARF (workspace) DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2). 00038 * 00039 * AP (workspace) DOUBLE PRECISION array, dimension ((NMAX*(NMAX+1))/2). 00040 * 00041 * A2 (workspace) DOUBLE PRECISION array, dimension (LDA,NMAX) 00042 * 00043 * ===================================================================== 00044 * .. 00045 * .. Local Scalars .. 00046 LOGICAL LOWER, OK1, OK2 00047 CHARACTER UPLO, CFORM 00048 INTEGER I, IFORM, IIN, INFO, IUPLO, J, N, 00049 + NERRS, NRUN 00050 * .. 00051 * .. Local Arrays .. 00052 CHARACTER UPLOS( 2 ), FORMS( 2 ) 00053 INTEGER ISEED( 4 ), ISEEDY( 4 ) 00054 * .. 00055 * .. External Functions .. 00056 DOUBLE PRECISION DLARND 00057 EXTERNAL DLARND 00058 * .. 00059 * .. External Subroutines .. 00060 EXTERNAL DTFTTR, DTFTTP, DTRTTF, DTRTTP, DTPTTR, DTPTTF 00061 * .. 00062 * .. Scalars in Common .. 00063 CHARACTER*32 SRNAMT 00064 * .. 00065 * .. Common blocks .. 00066 COMMON / SRNAMC / SRNAMT 00067 * .. 00068 * .. Data statements .. 00069 DATA ISEEDY / 1988, 1989, 1990, 1991 / 00070 DATA UPLOS / 'U', 'L' / 00071 DATA FORMS / 'N', 'T' / 00072 * .. 00073 * .. Executable Statements .. 00074 * 00075 * Initialize constants and the random number seed. 00076 * 00077 NRUN = 0 00078 NERRS = 0 00079 INFO = 0 00080 DO 10 I = 1, 4 00081 ISEED( I ) = ISEEDY( I ) 00082 10 CONTINUE 00083 * 00084 DO 120 IIN = 1, NN 00085 * 00086 N = NVAL( IIN ) 00087 * 00088 * Do first for UPLO = 'U', then for UPLO = 'L' 00089 * 00090 DO 110 IUPLO = 1, 2 00091 * 00092 UPLO = UPLOS( IUPLO ) 00093 LOWER = .TRUE. 00094 IF ( IUPLO.EQ.1 ) LOWER = .FALSE. 00095 * 00096 * Do first for CFORM = 'N', then for CFORM = 'T' 00097 * 00098 DO 100 IFORM = 1, 2 00099 * 00100 CFORM = FORMS( IFORM ) 00101 * 00102 NRUN = NRUN + 1 00103 * 00104 DO J = 1, N 00105 DO I = 1, N 00106 A( I, J) = DLARND( 2, ISEED ) 00107 END DO 00108 END DO 00109 * 00110 SRNAMT = 'DTRTTF' 00111 CALL DTRTTF( CFORM, UPLO, N, A, LDA, ARF, INFO ) 00112 * 00113 SRNAMT = 'DTFTTP' 00114 CALL DTFTTP( CFORM, UPLO, N, ARF, AP, INFO ) 00115 * 00116 SRNAMT = 'DTPTTR' 00117 CALL DTPTTR( UPLO, N, AP, ASAV, LDA, INFO ) 00118 * 00119 OK1 = .TRUE. 00120 IF ( LOWER ) THEN 00121 DO J = 1, N 00122 DO I = J, N 00123 IF ( A(I,J).NE.ASAV(I,J) ) THEN 00124 OK1 = .FALSE. 00125 END IF 00126 END DO 00127 END DO 00128 ELSE 00129 DO J = 1, N 00130 DO I = 1, J 00131 IF ( A(I,J).NE.ASAV(I,J) ) THEN 00132 OK1 = .FALSE. 00133 END IF 00134 END DO 00135 END DO 00136 END IF 00137 * 00138 NRUN = NRUN + 1 00139 * 00140 SRNAMT = 'DTRTTP' 00141 CALL DTRTTP( UPLO, N, A, LDA, AP, INFO ) 00142 * 00143 SRNAMT = 'DTPTTF' 00144 CALL DTPTTF( CFORM, UPLO, N, AP, ARF, INFO ) 00145 * 00146 SRNAMT = 'DTFTTR' 00147 CALL DTFTTR( CFORM, UPLO, N, ARF, ASAV, LDA, INFO ) 00148 * 00149 OK2 = .TRUE. 00150 IF ( LOWER ) THEN 00151 DO J = 1, N 00152 DO I = J, N 00153 IF ( A(I,J).NE.ASAV(I,J) ) THEN 00154 OK2 = .FALSE. 00155 END IF 00156 END DO 00157 END DO 00158 ELSE 00159 DO J = 1, N 00160 DO I = 1, J 00161 IF ( A(I,J).NE.ASAV(I,J) ) THEN 00162 OK2 = .FALSE. 00163 END IF 00164 END DO 00165 END DO 00166 END IF 00167 * 00168 IF (( .NOT.OK1 ).OR.( .NOT.OK2 )) THEN 00169 IF( NERRS.EQ.0 ) THEN 00170 WRITE( NOUT, * ) 00171 WRITE( NOUT, FMT = 9999 ) 00172 END IF 00173 WRITE( NOUT, FMT = 9998 ) N, UPLO, CFORM 00174 NERRS = NERRS + 1 00175 END IF 00176 * 00177 100 CONTINUE 00178 110 CONTINUE 00179 120 CONTINUE 00180 * 00181 * Print a summary of the results. 00182 * 00183 IF ( NERRS.EQ.0 ) THEN 00184 WRITE( NOUT, FMT = 9997 ) NRUN 00185 ELSE 00186 WRITE( NOUT, FMT = 9996 ) NERRS, NRUN 00187 END IF 00188 * 00189 9999 FORMAT( 1X, ' *** Error(s) while testing the RFP convertion', 00190 + ' routines ***') 00191 9998 FORMAT( 1X, ' Error in RFP,convertion routines N=',I5, 00192 + ' UPLO=''', A1, ''', FORM =''',A1,'''') 00193 9997 FORMAT( 1X, 'All tests for the RFP convertion routines passed (', 00194 + I5,' tests run)') 00195 9996 FORMAT( 1X, 'RFP convertion routines:',I5,' out of ',I5, 00196 + ' error message recorded') 00197 * 00198 RETURN 00199 * 00200 * End of DDRVRF2 00201 * 00202 END