125 SUBROUTINE dstt21( N, KBAND, AD, AE, SD, SE, U, LDU, WORK,
133 INTEGER KBAND, LDU, N
136 DOUBLE PRECISION AD( * ), AE( * ), RESULT( 2 ), SD( * ),
137 $ se( * ), u( ldu, * ), work( * )
143 DOUBLE PRECISION ZERO, ONE
144 parameter( zero = 0.0d0, one = 1.0d0 )
148 DOUBLE PRECISION ANORM, TEMP1, TEMP2, ULP, UNFL, WNORM
151 DOUBLE PRECISION DLAMCH, DLANGE,
152 EXTERNAL dlamch, dlange,
dlansy
158 INTRINSIC abs, dble,
max,
min
169 unfl = dlamch(
'Safe minimum' )
170 ulp = dlamch( 'precision
' )
176 CALL DLASET( 'full
', N, N, ZERO, ZERO, WORK, N )
182 WORK( ( N+1 )*( J-1 )+1 ) = AD( J )
183 WORK( ( N+1 )*( J-1 )+2 ) = AE( J )
184 TEMP2 = ABS( AE( J ) )
185 ANORM = MAX( ANORM, ABS( AD( J ) )+TEMP1+TEMP2 )
189 WORK( N**2 ) = AD( N )
190 ANORM = MAX( ANORM, ABS( AD( N ) )+TEMP1, UNFL )
195 CALL DSYR( 'l
', N, -SD( J ), U( 1, J ), 1, WORK, N )
198.GT..AND..EQ.
IF( N1 KBAND1 ) THEN
200 CALL DSYR2( 'l
', N, -SE( J ), U( 1, J ), 1, U( 1, J+1 ), 1,
205 WNORM = DLANSY( '1
', 'l
', N, WORK, N, WORK( N**2+1 ) )
207.GT.
IF( ANORMWNORM ) THEN
208 RESULT( 1 ) = ( WNORM / ANORM ) / ( N*ULP )
210.LT.
IF( ANORMONE ) THEN
211 RESULT( 1 ) = ( MIN( WNORM, N*ANORM ) / ANORM ) / ( N*ULP )
213 RESULT( 1 ) = MIN( WNORM / ANORM, DBLE( N ) ) / ( N*ULP )
221 CALL DGEMM( 'n
', 'c
', N, N, N, ONE, U, LDU, U, LDU, ZERO, WORK,
225 WORK( ( N+1 )*( J-1 )+1 ) = WORK( ( N+1 )*( J-1 )+1 ) - ONE
228 RESULT( 2 ) = MIN( DBLE( N ), DLANGE( '1
', N, N, WORK, N,
229 $ WORK( N**2+1 ) ) ) / ( N*ULP )
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
double precision function dlansy(norm, uplo, n, a, lda, work)
DLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine dsyr(uplo, n, alpha, x, incx, a, lda)
DSYR
subroutine dsyr2(uplo, n, alpha, x, incx, y, incy, a, lda)
DSYR2
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM
subroutine dstt21(n, kband, ad, ae, sd, se, u, ldu, work, result)
DSTT21