132 SUBROUTINE dhst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
140 INTEGER IHI, ILO, LDA, LDH, LDQ, , N
143 DOUBLE PRECISION A( LDA, * ), H( LDH, * ), Q( LDQ, * ),
144 $ result( 2 ), work( lwork )
150 DOUBLE PRECISION ONE, ZERO
151 parameter( one = 1.0d+0, zero = 0.0d+0 )
155 DOUBLE PRECISION ANORM, EPS, , SMLNUM, UNFL, WNORM
158 DOUBLE PRECISION DLAMCH, DLANGE
159 EXTERNAL dlamch, dlange
177 unfl = dlamch(
'Safe minimum' )
178 eps = dlamch(
'Precision' )
181 smlnum = unfl*n / eps
188 CALL dlacpy(
' ', n, n, a, lda, work, ldwork )
192 CALL dgemm(
'No transpose',
'No transpose', n, n, n, one, q, ldq,
193 $ h, ldh, zero, work( ldwork*n+1 ), ldwork )
197 CALL dgemm(
'No transpose',
'Transpose', n, n, n, -one,
198 $ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
201 anorm =
max( dlange(
'1', n, n, a, lda, work( ldwork*n+1 ) ),
203 wnorm = dlange(
'1', n, n, work, ldwork, work( ldwork*n+1 ) )
207 result( 1 ) =
min( wnorm, anorm ) /
max( smlnum, anorm*eps ) / n
211 CALL dort01(
'Columns', n, n, q, ldq, work, lwork, result( 2 ) )
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dhst01(n, ilo, ihi, a, lda, h, ldh, q, ldq, work, lwork, result)
DHST01
subroutine dort01(rowcol, m, n, u, ldu, work, lwork, resid)
DORT01