161 SUBROUTINE chet22( ITYPE, UPLO, N, M, KBAND, A, LDA, D, E, U, LDU,
162 $ V, LDV, TAU, WORK, RWORK, RESULT )
171 INTEGER ITYPE, KBAND, LDA, LDU, LDV, M, N
174 REAL D( * ), E( * ), RESULT( 2 ), RWORK( * )
175 COMPLEX A( LDA, * ), TAU( * ), U( LDU, * ),
176 $ v( ldv, * ), work( * )
183 parameter( zero = 0.0e0, one = 1.0e0 )
185 parameter( czero = ( 0.0e0, 0.0e0 ),
186 $ cone = ( 1.0e0, 0.0e0 ) )
189 INTEGER J, JJ, JJ1, JJ2, NN, NNP1
190 REAL ANORM, ULP, UNFL, WNORM
194 EXTERNAL clanhe, slamch
200 INTRINSIC max, min, real
206 IF( n.LE.0 .OR. m.LE.0 )
209 unfl = slamch(
'Safe minimum' )
210 ulp = slamch(
'Precision' )
216 anorm = max( clanhe(
'1', uplo, n, a, lda, rwork ), unfl )
222 CALL chemm(
'L', uplo, n, m, cone, a, lda, u, ldu, czero, work,
226 CALL cgemm(
'C',
'N', m, m, n, cone, u, ldu, work, n, czero,
229 jj = nn + ( j-1 )*n + j
230 work( jj ) = work( jj ) - d( j )
232 IF( kband.EQ.1 .AND. n.GT.1 )
THEN
234 jj1 = nn + ( j-1 )*n + j - 1
235 jj2 = nn + ( j-2 )*n + j
236 work( jj1 ) = work( jj1 ) - e( j-1 )
237 work( jj2 ) = work( jj2 ) - e( j-1 )
240 wnorm = clanhe(
'1', uplo, m, work( nnp1 ), n, rwork )
242 IF( anorm.GT.wnorm )
THEN
243 result( 1 ) = ( wnorm / anorm ) / ( m*ulp )
245 IF( anorm.LT.one )
THEN
246 result( 1 ) = ( min( wnorm, m*anorm ) / anorm ) / ( m*ulp )
248 result( 1 ) = min( wnorm / anorm, real( m ) ) / ( m*ulp )
257 $
CALL cunt01(
'Columns', n, m, u, ldu, work, 2*n*n, rwork,