132 SUBROUTINE shst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
140 INTEGER IHI, ILO, LDA, LDH, LDQ, LWORK, N
143 REAL A( LDA, * ), H( LDH, * ), Q( LDQ, * ),
144 $ result( 2 ), work( lwork )
151 parameter( one = 1.0e+0, zero = 0.0e+0 )
155 REAL ANORM, EPS, OVFL, SMLNUM, UNFL, WNORM
159 EXTERNAL slamch, slange
177 unfl = slamch(
'Safe minimum' )
178 eps = slamch(
'Precision' )
180 smlnum = unfl*n / eps
187 CALL slacpy(
' ', n, n, a, lda, work, ldwork )
191 CALL sgemm(
'No transpose',
'No transpose', n, n, n, one, q, ldq,
192 $ h, ldh, zero, work( ldwork*n+1 ), ldwork )
196 CALL sgemm(
'No transpose',
'Transpose', n, n, n, -one,
197 $ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
200 anorm = max( slange(
'1', n, n, a, lda, work( ldwork*n+1 ) ),
202 wnorm = slange(
'1', n, n, work, ldwork, work( ldwork*n+1 ) )
206 result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
210 CALL sort01(
'Columns', n, n, q, ldq, work, lwork, result( 2 ) )
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine shst01(n, ilo, ihi, a, lda, h, ldh, q, ldq, work, lwork, result)
SHST01
subroutine sort01(rowcol, m, n, u, ldu, work, lwork, resid)
SORT01