138 SUBROUTINE zhst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
139 $ LWORK, RWORK, RESULT )
146 INTEGER IHI, ILO, LDA, LDH, LDQ, LWORK, N
149 DOUBLE PRECISION ( 2 ), ( * )
150 COMPLEX*16 ( LDA, * ), H( LDH, * ), Q( LDQ, * ),
157 DOUBLE PRECISION ONE, ZERO
158 parameter( one = 1.0d+0, zero = 0.0d+0 )
162 DOUBLE PRECISION ANORM, EPS, OVFL, SMLNUM, , WNORM
165 DOUBLE PRECISION DLAMCH, ZLANGE
166 EXTERNAL dlamch, zlange
172 INTRINSIC dcmplx,
max,
min
184 unfl = dlamch(
'Safe minimum' )
185 eps = dlamch(
'Precision' )
188 smlnum = unfl*n / eps
195 CALL zlacpy(
' ', n, n, a, lda, work, ldwork )
199 CALL zgemm(
'No transpose',
'No transpose', n, n, n,
200 $ dcmplx( one ), q, ldq, h, ldh, dcmplx( zero ),
201 $ work( ldwork*n+1 ), ldwork )
205 CALL zgemm(
'No transpose',
'Conjugate transpose', n, n, n,
206 $ dcmplx( -one ), work( ldwork*n+1 ), ldwork, q, ldq,
207 $ dcmplx( one ), work, ldwork )
209 anorm =
max( zlange(
'1', n, n, a, lda, rwork ), unfl )
210 wnorm = zlange(
'1', n, n, work, ldwork, rwork )
214 result( 1 ) =
min( wnorm, anorm ) /
max( smlnum, anorm*eps ) / n
218 CALL zunt01( 'columns
', N, N, Q, LDQ, WORK, LWORK, RWORK,
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zhst01(n, ilo, ihi, a, lda, h, ldh, q, ldq, work, lwork, rwork, result)
ZHST01
subroutine zunt01(rowcol, m, n, u, ldu, work, lwork, rwork, resid)
ZUNT01