155 SUBROUTINE ztrt02( UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B,
156 $ LDB, WORK, RWORK, RESID )
163 CHARACTER DIAG, TRANS, UPLO
164 INTEGER LDA, LDB, LDX, N, NRHS
165 DOUBLE PRECISION RESID
168 DOUBLE PRECISION RWORK( * )
169 COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * ),
176 DOUBLE PRECISION ZERO, ONE
177 parameter( zero = 0.0d+0, one = 1.0d+0 )
181 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
185 DOUBLE PRECISION DLAMCH, DZASUM, ZLANTR
186 EXTERNAL lsame, dlamch, dzasum, zlantr
192 INTRINSIC dcmplx, max
198 IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
205 IF( lsame( trans,
'N' ) )
THEN
206 anorm = zlantr(
'1', uplo, diag, n, n, a, lda, rwork )
208 anorm = zlantr(
'I', uplo, diag, n, n, a, lda, rwork )
213 eps = dlamch(
'Epsilon' )
214 IF( anorm.LE.zero )
THEN
224 CALL zcopy( n, x( 1, j ), 1, work, 1 )
225 CALL ztrmv( uplo, trans, diag, n, a, lda, work, 1 )
226 CALL zaxpy( n, dcmplx( -one ), b( 1, j ), 1, work, 1 )
227 bnorm = dzasum( n, work, 1 )
228 xnorm = dzasum( n, x( 1, j ), 1 )
229 IF( xnorm.LE.zero )
THEN
232 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine ztrmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
ZTRMV
subroutine ztrt02(UPLO, TRANS, DIAG, N, NRHS, A, LDA, X, LDX, B, LDB, WORK, RWORK, RESID)
ZTRT02