161 SUBROUTINE zhet22( 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 DOUBLE PRECISION D( * ), E( * ), RESULT( 2 ), RWORK( * )
175 COMPLEX*16 A( LDA, * ), TAU( * ), U( LDU, * ),
176 $ v( ldv, * ), work( * )
182 DOUBLE PRECISION ZERO, ONE
183 parameter( zero = 0.0d0, one = 1.0d0 )
184 COMPLEX*16 CZERO, CONE
185 parameter( czero = ( 0.0d0, 0.0d0 ),
186 $ cone = ( 1.0d0, 0.0d0 ) )
189 INTEGER J, JJ, JJ1, JJ2, NN, NNP1
190 DOUBLE PRECISION ANORM, ULP, UNFL, WNORM
193 DOUBLE PRECISION DLAMCH, ZLANHE
194 EXTERNAL dlamch, zlanhe
200 INTRINSIC dble, max, min
206 IF( n.LE.0 .OR. m.LE.0 )
209 unfl = dlamch(
'Safe minimum' )
210 ulp = dlamch(
'Precision' )
216 anorm = max( zlanhe(
'1', uplo, n, a, lda, rwork ), unfl )
222 CALL zhemm(
'L', uplo, n, m, cone, a, lda, u, ldu, czero, work,
226 CALL zgemm(
'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 = zlanhe(
'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, dble( m ) ) / ( m*ulp )
257 $
CALL zunt01(
'Columns', n, m, u, ldu, work, 2*n*n, rwork,