169 SUBROUTINE ztrt03( UPLO, TRANS, DIAG, N, NRHS, A, LDA, SCALE,
170 $ CNORM, TSCAL, X, LDX, B, LDB, WORK, RESID )
177 CHARACTER DIAG, TRANS, UPLO
178 INTEGER LDA, LDB, LDX, N, NRHS
179 DOUBLE PRECISION RESID, SCALE, TSCAL
182 DOUBLE PRECISION CNORM( * )
183 COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * ),
190 DOUBLE PRECISION ONE, ZERO
191 parameter( one = 1.0d+0, zero = 0.0d+0 )
195 DOUBLE PRECISION EPS, ERR, SMLNUM, TNORM, XNORM, XSCAL
200 DOUBLE PRECISION DLAMCH
201 EXTERNAL lsame, izamax, dlamch
207 INTRINSIC abs, dble, dcmplx, max
213 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
217 eps = dlamch(
'Epsilon' )
218 smlnum = dlamch(
'Safe minimum' )
224 IF( lsame( diag,
'N' ) )
THEN
226 tnorm = max( tnorm, tscal*abs( a( j, j ) )+cnorm( j ) )
230 tnorm = max( tnorm, tscal+cnorm( j ) )
239 CALL zcopy( n, x( 1, j ), 1, work, 1 )
240 ix = izamax( n, work, 1 )
241 xnorm = max( one, abs( x( ix, j ) ) )
242 xscal = ( one / xnorm ) / dble( n )
243 CALL zdscal( n, xscal, work, 1 )
244 CALL ztrmv( uplo, trans, diag, n, a, lda, work, 1 )
245 CALL zaxpy( n, dcmplx( -scale*xscal ), b( 1, j ), 1, work, 1 )
246 ix = izamax( n, work, 1 )
247 err = tscal*abs( work( ix ) )
248 ix = izamax( n, x( 1, j ), 1 )
249 xnorm = abs( x( ix, j ) )
250 IF( err*smlnum.LE.xnorm )
THEN
257 IF( err*smlnum.LE.tnorm )
THEN
264 resid = max( resid, err )
subroutine ztrmv(uplo, trans, diag, n, a, lda, x, incx)
ZTRMV
subroutine ztrt03(uplo, trans, diag, n, nrhs, a, lda, scale, cnorm, tscal, x, ldx, b, ldb, work, resid)
ZTRT03