131 SUBROUTINE zget08( TRANS, M, N, NRHS, A, LDA, X, LDX, B, LDB,
140 INTEGER LDA, LDB, LDX, M, N, NRHS
141 DOUBLE PRECISION RESID
144 DOUBLE PRECISION RWORK( * )
145 COMPLEX*16 A( LDA, * ), B( LDB, * ), X( LDX, * )
151 DOUBLE PRECISION ZERO, ONE
152 parameter( zero = 0.0d+0, one = 1.0d+0 )
154 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
158 DOUBLE PRECISION ANORM, BNORM, EPS, XNORM
164 DOUBLE PRECISION DLAMCH, ZLANGE
165 EXTERNAL lsame, izamax, dlamch, zlange
171 INTRINSIC abs, dble, dimag, max
174 DOUBLE PRECISION CABS1
177 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
183 IF( m.LE.0 .OR. n.LE.0 .OR. nrhs.EQ.0 )
THEN
188 IF( lsame( trans,
'T' ) .OR. lsame( trans,
'C' ) )
THEN
198 eps = dlamch(
'Epsilon' )
199 anorm = zlange(
'I', n1, n2, a, lda, rwork )
200 IF( anorm.LE.zero )
THEN
207 CALL zgemm( trans,
'No transpose', n1, nrhs, n2, -cone, a, lda, x,
208 $ ldx, cone, b, ldb )
215 bnorm = cabs1( b( izamax( n1, b( 1, j ), 1 ), j ) )
216 xnorm = cabs1( x( izamax( n2, x( 1, j ), 1 ), j ) )
217 IF( xnorm.LE.zero )
THEN
220 resid = max( resid, ( ( bnorm / anorm ) / xnorm ) / eps )
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zget08(trans, m, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZGET08