132 SUBROUTINE dhst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
140 INTEGER IHI, ILO, LDA, LDH, LDQ, LWORK, 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, OVFL, SMLNUM, UNFL, WNORM
158 DOUBLE PRECISION DLAMCH, DLANGE
159 EXTERNAL dlamch, dlange
177 unfl = dlamch(
'Safe minimum' )
178 eps = dlamch(
'Precision' )
180 smlnum = unfl*n / eps
187 CALL dlacpy(
' ', n, n, a, lda, work, ldwork )
191 CALL dgemm(
'No transpose',
'No transpose', n, n, n, one, q, ldq,
192 $ h, ldh, zero, work( ldwork*n+1 ), ldwork )
196 CALL dgemm(
'No transpose',
'Transpose', n, n, n, -one,
197 $ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
200 anorm = max( dlange(
'1', n, n, a, lda, work( ldwork*n+1 ) ),
202 wnorm = dlange(
'1', n, n, work, ldwork, work( ldwork*n+1 ) )
206 result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
210 CALL dort01(
'Columns', n, n, q, ldq, work, lwork, result( 2 ) )
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
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.