159 SUBROUTINE chet22( ITYPE, UPLO, N, M, KBAND, A, LDA, D, E, U, LDU,
160 $ V, LDV, TAU, WORK, RWORK, RESULT )
168 INTEGER ITYPE, KBAND, LDA, LDU, LDV, M, N
171 REAL D( * ), E( * ), RESULT( 2 ), RWORK( * )
172 COMPLEX A( LDA, * ), TAU( * ), U( LDU, * ),
173 $ v( ldv, * ), work( * )
180 parameter( zero = 0.0e0, one = 1.0e0 )
182 parameter( czero = ( 0.0e0, 0.0e0 ),
183 $ cone = ( 1.0e0, 0.0e0 ) )
186 INTEGER J, JJ, JJ1, JJ2, NN, NNP1
187 REAL ANORM, ULP, UNFL, WNORM
191 EXTERNAL clanhe, slamch
203 IF( n.LE.0 .OR. m.LE.0 )
206 unfl = slamch(
'Safe minimum' )
207 ulp = slamch(
'Precision' )
213 anorm =
max( clanhe(
'1', uplo, n, a, lda, rwork ), unfl )
219 CALL chemm(
'L', uplo, n, m, cone, a, lda, u, ldu, czero, work,
223 CALL cgemm( 'c
', 'n
', M, M, N, CONE, U, LDU, WORK, N, CZERO,
226 JJ = NN + ( J-1 )*N + J
227 WORK( JJ ) = WORK( JJ ) - D( J )
229.EQ..AND..GT.
IF( KBAND1 N1 ) THEN
231 JJ1 = NN + ( J-1 )*N + J - 1
232 JJ2 = NN + ( J-2 )*N + J
233 WORK( JJ1 ) = WORK( JJ1 ) - E( J-1 )
234 WORK( JJ2 ) = WORK( JJ2 ) - E( J-1 )
237 WNORM = CLANHE( '1
', UPLO, M, WORK( NNP1 ), N, RWORK )
239.GT.
IF( ANORMWNORM ) THEN
240 RESULT( 1 ) = ( WNORM / ANORM ) / ( M*ULP )
242.LT.
IF( ANORMONE ) THEN
243 RESULT( 1 ) = ( MIN( WNORM, M*ANORM ) / ANORM ) / ( M*ULP )
245 RESULT( 1 ) = MIN( WNORM / ANORM, REAL( M ) ) / ( M*ULP )
254 $ CALL CUNT01( 'columns
', N, M, U, LDU, WORK, 2*N*N, RWORK,
subroutine chemm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
CHEMM
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine chet22(itype, uplo, n, m, kband, a, lda, d, e, u, ldu, v, ldv, tau, work, rwork, result)
CHET22