118 SUBROUTINE ddrvrf3( NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2,
119 + D_WORK_DLANGE, D_WORK_DGEQRF, TAU )
127 INTEGER LDA, NN, NOUT
128 DOUBLE PRECISION THRESH
132 DOUBLE PRECISION A( LDA, * ), ARF( * ), B1( LDA, * ),
133 + b2( lda, * ), d_work_dgeqrf( * ),
134 + d_work_dlange( * ), tau( * )
140 DOUBLE PRECISION ZERO, ONE
141 parameter( zero = ( 0.0d+0, 0.0d+0 ) ,
142 + one = ( 1.0d+0, 0.0d+0 ) )
144 parameter( ntests = 1 )
147 CHARACTER UPLO, CFORM, DIAG, TRANS, SIDE
148 INTEGER I, IFORM, IIM, IIN, INFO, IUPLO, J, M, N, NA,
149 + nfail, nrun, iside, idiag, ialpha, itrans
150 DOUBLE PRECISION EPS, ALPHA
153 CHARACTER UPLOS( 2 ), FORMS( 2 ), TRANSS( 2 ),
154 + diags( 2 ), sides( 2 )
155 INTEGER ISEED( 4 ), ISEEDY( 4 )
156 DOUBLE PRECISION RESULT( NTESTS )
159 DOUBLE PRECISION DLAMCH, DLANGE, DLARND
160 EXTERNAL dlamch, dlange, dlarnd
172 COMMON / srnamc / srnamt
175 DATA iseedy / 1988, 1989, 1990, 1991 /
176 DATA uplos /
'U',
'L' /
177 DATA forms /
'N',
'T' /
178 DATA sides /
'L',
'R' /
179 DATA transs /
'N',
'T' /
180 DATA diags /
'N',
'U' /
190 iseed( i ) = iseedy( i )
192 eps = dlamch(
'Precision' )
204 cform = forms( iform )
208 uplo = uplos( iuplo )
212 side = sides( iside )
216 trans = transs( itrans )
220 diag = diags( idiag )
224 IF ( ialpha.EQ. 1)
THEN
226 ELSE IF ( ialpha.EQ. 2)
THEN
229 alpha = dlarnd( 2, iseed )
239 IF ( iside.EQ.1 )
THEN
265 a( i, j) = dlarnd( 2, iseed )
269 IF ( iuplo.EQ.1 )
THEN
275 CALL dgeqrf( na, na, a, lda, tau,
276 + d_work_dgeqrf, lda,
284 CALL dgelqf( na, na, a, lda, tau,
285 + d_work_dgeqrf, lda,
292 CALL dtrttf( cform, uplo, na, a, lda, arf,
300 b1( i, j) = dlarnd( 2, iseed )
301 b2( i, j) = b1( i, j)
309 CALL dtrsm( side, uplo, trans, diag, m, n,
310 + alpha, a, lda, b1, lda )
316 CALL dtfsm( cform, side, uplo, trans,
317 + diag, m, n, alpha, arf, b2,
324 b1( i, j) = b2( i, j ) - b1( i, j )
328 result(1) = dlange(
'I', m, n, b1, lda,
331 result(1) = result(1) / sqrt( eps )
332 + / max( max( m, n), 1 )
334 IF( result(1).GE.thresh )
THEN
335 IF( nfail.EQ.0 )
THEN
337 WRITE( nout, fmt = 9999 )
339 WRITE( nout, fmt = 9997 )
'DTFSM',
340 + cform, side, uplo, trans, diag, m,
356 IF ( nfail.EQ.0 )
THEN
357 WRITE( nout, fmt = 9996 )
'DTFSM', nrun
359 WRITE( nout, fmt = 9995 )
'DTFSM', nfail, nrun
362 9999
FORMAT( 1x,
' *** Error(s) or Failure(s) while testing DTFSM
364 9997
FORMAT( 1x,
' Failure in ',a5,
', CFORM=''',a1,
''',',
365 +
' SIDE=''',a1,
''',',
' UPLO=''',a1,
''',',
' TRANS=''',a1,
''',',
366 +
' DIAG=''',a1,
''',',
' M=',i3,
', N =', i3,
', test=',g12.5)
367 9996
FORMAT( 1x,
'All tests for ',a5,
' auxiliary routine passed the ',
368 +
'threshold ( ',i5,
' tests run)')
369 9995
FORMAT( 1x, a6,
' auxiliary routine: ',i5,
' out of ',i5,
370 +
' tests failed to pass the threshold')