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 RESULT( 2 ), RWORK( * )
150 COMPLEX*16 A( 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, UNFL, WNORM
165 DOUBLE PRECISION DLAMCH, ZLANGE
166 EXTERNAL dlamch, zlange
172 INTRINSIC dcmplx, max, min
184 unfl = dlamch(
'Safe minimum' )
185 eps = dlamch(
'Precision' )
187 smlnum = unfl*n / eps
194 CALL zlacpy(
' ', n, n, a, lda, work, ldwork )
198 CALL zgemm(
'No transpose',
'No transpose', n, n, n,
199 $ dcmplx( one ), q, ldq, h, ldh, dcmplx( zero ),
200 $ work( ldwork*n+1 ), ldwork )
204 CALL zgemm(
'No transpose',
'Conjugate transpose', n, n, n,
205 $ dcmplx( -one ), work( ldwork*n+1 ), ldwork, q, ldq,
206 $ dcmplx( one ), work, ldwork )
208 anorm = max( zlange(
'1', n, n, a, lda, rwork ), unfl )
209 wnorm = zlange(
'1', n, n, work, ldwork, rwork )
213 result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
217 CALL zunt01(
'Columns', n, n, q, ldq, work, lwork, rwork,
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
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