157 SUBROUTINE ssyt22( ITYPE, UPLO, N, M, KBAND, A, LDA, D, E, U, LDU,
158 $ V, LDV, TAU, WORK, RESULT )
167 INTEGER ITYPE, KBAND, LDA, LDU, LDV, M, N
170 REAL A( LDA, * ), D( * ), E( * ), RESULT( 2 ),
171 $ tau( * ), u( ldu, * ), v( ldv, * ), work( * )
178 parameter( zero = 0.0e0, one = 1.0e0 )
181 INTEGER J, JJ, JJ1, JJ2, NN, NNP1
182 REAL ANORM, ULP, UNFL, WNORM
186 EXTERNAL slamch, slansy
192 INTRINSIC max, min, real
198 IF( n.LE.0 .OR. m.LE.0 )
201 unfl = slamch(
'Safe minimum' )
202 ulp = slamch(
'Precision' )
208 anorm = max( slansy(
'1', uplo, n, a, lda, work ), unfl )
214 CALL ssymm(
'L', uplo, n, m, one, a, lda, u, ldu, zero, work, n )
217 CALL sgemm(
'T',
'N', m, m, n, one, u, ldu, work, n, zero,
220 jj = nn + ( j-1 )*n + j
221 work( jj ) = work( jj ) - d( j )
223 IF( kband.EQ.1 .AND. n.GT.1 )
THEN
225 jj1 = nn + ( j-1 )*n + j - 1
226 jj2 = nn + ( j-2 )*n + j
227 work( jj1 ) = work( jj1 ) - e( j-1 )
228 work( jj2 ) = work( jj2 ) - e( j-1 )
231 wnorm = slansy(
'1', uplo, m, work( nnp1 ), n, work( 1 ) )
233 IF( anorm.GT.wnorm )
THEN
234 result( 1 ) = ( wnorm / anorm ) / ( m*ulp )
236 IF( anorm.LT.one )
THEN
237 result( 1 ) = ( min( wnorm, m*anorm ) / anorm ) / ( m*ulp )
239 result( 1 ) = min( wnorm / anorm, real( m ) ) / ( m*ulp )
248 $
CALL sort01(
'Columns', n, m, u, ldu, work, 2*n*n,