@@ -156,9 +156,10 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
156156 REAL RESULT( NTESTS )
157157* ..
158158* .. External Functions ..
159+ LOGICAL LSAME
159160 REAL SLAMCH, CLANGE
160161 COMPLEX CLARND
161- EXTERNAL SLAMCH, CLARND, CLANGE
162+ EXTERNAL SLAMCH, CLARND, CLANGE, LSAME
162163* ..
163164* .. External Subroutines ..
164165 EXTERNAL CTRTTF, CGEQRF, CGEQLF, CTFSM, CTRSM
@@ -222,9 +223,9 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
222223*
223224 DO 100 IALPHA = 1 , 3
224225*
225- IF ( IALPHA.EQ. 1 ) THEN
226+ IF ( IALPHA.EQ. 1 ) THEN
226227 ALPHA = ZERO
227- ELSE IF ( IALPHA.EQ. 2 ) THEN
228+ ELSE IF ( IALPHA.EQ. 2 ) THEN
228229 ALPHA = ONE
229230 ELSE
230231 ALPHA = CLARND( 4 , ISEED )
@@ -263,7 +264,7 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
263264*
264265 DO J = 1 , NA
265266 DO I = 1 , NA
266- A( I, J) = CLARND( 4 , ISEED )
267+ A( I, J ) = CLARND( 4 , ISEED )
267268 END DO
268269 END DO
269270*
@@ -276,6 +277,20 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
276277 CALL CGEQRF( NA, NA, A, LDA, TAU,
277278 + C_WORK_CGEQRF, LDA,
278279 + INFO )
280+ *
281+ * Forcing main diagonal of test matrix to
282+ * be unit makes it ill-conditioned for
283+ * some test cases
284+ *
285+ IF ( LSAME( DIAG, ' U' ) ) THEN
286+ DO J = 1 , NA
287+ DO I = 1 , J
288+ A( I, J ) = A( I, J ) /
289+ + ( 2.0 * A( J, J ) )
290+ END DO
291+ END DO
292+ END IF
293+ *
279294 ELSE
280295*
281296* The case IUPLO.EQ.2 is when SIDE.EQ.'L'
@@ -285,6 +300,20 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
285300 CALL CGELQF( NA, NA, A, LDA, TAU,
286301 + C_WORK_CGEQRF, LDA,
287302 + INFO )
303+ *
304+ * Forcing main diagonal of test matrix to
305+ * be unit makes it ill-conditioned for
306+ * some test cases
307+ *
308+ IF ( LSAME( DIAG, ' U' ) ) THEN
309+ DO I = 1 , NA
310+ DO J = 1 , I
311+ A( I, J ) = A( I, J ) /
312+ + ( 2.0 * A( I, I ) )
313+ END DO
314+ END DO
315+ END IF
316+ *
288317 END IF
289318*
290319* After the QR factorization, the diagonal
@@ -293,7 +322,8 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
293322* value 1.0E+00.
294323*
295324 DO J = 1 , NA
296- A( J, J) = A(J,J) * CLARND( 5 , ISEED )
325+ A( J, J ) = A( J, J ) *
326+ + CLARND( 5 , ISEED )
297327 END DO
298328*
299329* Store a copy of A in RFP format (in ARF).
@@ -307,8 +337,8 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
307337*
308338 DO J = 1 , N
309339 DO I = 1 , M
310- B1( I, J) = CLARND( 4 , ISEED )
311- B2( I, J) = B1( I, J)
340+ B1( I, J ) = CLARND( 4 , ISEED )
341+ B2( I, J ) = B1( I, J )
312342 END DO
313343 END DO
314344*
@@ -331,24 +361,24 @@ SUBROUTINE CDRVRF3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
331361*
332362 DO J = 1 , N
333363 DO I = 1 , M
334- B1( I, J) = B2( I, J ) - B1( I, J )
364+ B1( I, J ) = B2( I, J ) - B1( I, J )
335365 END DO
336366 END DO
337367*
338- RESULT(1 ) = CLANGE( ' I' , M, N, B1, LDA,
368+ RESULT( 1 ) = CLANGE( ' I' , M, N, B1, LDA,
339369 + S_WORK_CLANGE )
340370*
341- RESULT(1 ) = RESULT(1 ) / SQRT ( EPS )
342- + / MAX ( MAX ( M, N), 1 )
371+ RESULT( 1 ) = RESULT( 1 ) / SQRT ( EPS )
372+ + / MAX ( MAX ( M, N ), 1 )
343373*
344- IF ( RESULT(1 ).GE. THRESH ) THEN
374+ IF ( RESULT( 1 ).GE. THRESH ) THEN
345375 IF ( NFAIL.EQ. 0 ) THEN
346376 WRITE ( NOUT, * )
347377 WRITE ( NOUT, FMT = 9999 )
348378 END IF
349379 WRITE ( NOUT, FMT = 9997 ) ' CTFSM' ,
350380 + CFORM, SIDE, UPLO, TRANS, DIAG, M,
351- + N, RESULT(1 )
381+ + N, RESULT( 1 )
352382 NFAIL = NFAIL + 1
353383 END IF
354384*
0 commit comments