131 SUBROUTINE cstt21( N, KBAND, AD, AE, SD, SE, U, LDU, WORK, RWORK,
139 INTEGER KBAND, LDU, N
142 REAL AD( * ), AE( * ), RESULT( 2 ), RWORK( * ),
144 COMPLEX U( LDU, * ), WORK( * )
151 parameter( zero = 0.0e+0, one = 1.0e+0 )
153 parameter( czero = ( 0.0e+0, 0.0e+0 ),
154 $ cone = ( 1.0e+0, 0.0e+0 ) )
158 REAL ANORM, TEMP1, TEMP2, ULP, UNFL, WNORM
161 REAL CLANGE, CLANHE, SLAMCH
162 EXTERNAL clange, clanhe, slamch
179 unfl = slamch(
'Safe minimum' )
180 ulp = slamch(
'Precision' )
186 CALL claset( 'full
', N, N, CZERO, CZERO, WORK, N )
192 WORK( ( N+1 )*( J-1 )+1 ) = AD( J )
193 WORK( ( N+1 )*( J-1 )+2 ) = AE( J )
194 TEMP2 = ABS( AE( J ) )
195 ANORM = MAX( ANORM, ABS( AD( J ) )+TEMP1+TEMP2 )
199 WORK( N**2 ) = AD( N )
200 ANORM = MAX( ANORM, ABS( AD( N ) )+TEMP1, UNFL )
205 CALL CHER( 'l
', N, -SD( J ), U( 1, J ), 1, WORK, N )
208.GT..AND..EQ.
IF( N1 KBAND1 ) THEN
210 CALL CHER2( 'l
', N, -CMPLX( SE( J ) ), U( 1, J ), 1,
211 $ U( 1, J+1 ), 1, WORK, N )
215 WNORM = CLANHE( '1
', 'l
', N, WORK, N, RWORK )
217.GT.
IF( ANORMWNORM ) THEN
218 RESULT( 1 ) = ( WNORM / ANORM ) / ( N*ULP )
220.LT.
IF( ANORMONE ) THEN
221 RESULT( 1 ) = ( MIN( WNORM, N*ANORM ) / ANORM ) / ( N*ULP )
223 RESULT( 1 ) = MIN( WNORM / ANORM, REAL( N ) ) / ( N*ULP )
231 CALL CGEMM( 'n
', 'c
', N, N, N, CONE, U, LDU, U, LDU, CZERO, WORK,
235 WORK( ( N+1 )*( J-1 )+1 ) = WORK( ( N+1 )*( J-1 )+1 ) - CONE
238 RESULT( 2 ) = MIN( REAL( N ), CLANGE( '1
', N, N, WORK, N,
239 $ RWORK ) ) / ( N*ULP )
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine cher(uplo, n, alpha, x, incx, a, lda)
CHER
subroutine cher2(uplo, n, alpha, x, incx, y, incy, a, lda)
CHER2
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine cstt21(n, kband, ad, ae, sd, se, u, ldu, work, rwork, result)
CSTT21