133 SUBROUTINE cstt21( N, KBAND, AD, AE, SD, SE, U, LDU, WORK, RWORK,
142 INTEGER KBAND, LDU, N
145 REAL AD( * ), AE( * ), RESULT( 2 ), RWORK( * ),
147 COMPLEX U( LDU, * ), WORK( * )
154 parameter( zero = 0.0e+0, one = 1.0e+0 )
156 parameter( czero = ( 0.0e+0, 0.0e+0 ),
157 $ cone = ( 1.0e+0, 0.0e+0 ) )
161 REAL ANORM, TEMP1, TEMP2, ULP, UNFL, WNORM
164 REAL CLANGE, CLANHE, SLAMCH
165 EXTERNAL clange, clanhe, slamch
171 INTRINSIC abs, cmplx, max, min, real
182 unfl = slamch(
'Safe minimum' )
183 ulp = slamch(
'Precision' )
189 CALL claset(
'Full', n, n, czero, czero, work, n )
195 work( ( n+1 )*( j-1 )+1 ) = ad( j )
196 work( ( n+1 )*( j-1 )+2 ) = ae( j )
197 temp2 = abs( ae( j ) )
198 anorm = max( anorm, abs( ad( j ) )+temp1+temp2 )
202 work( n**2 ) = ad( n )
203 anorm = max( anorm, abs( ad( n ) )+temp1, unfl )
208 CALL cher(
'L', n, -sd( j ), u( 1, j ), 1, work, n )
211 IF( n.GT.1 .AND. kband.EQ.1 )
THEN
213 CALL cher2(
'L', n, -cmplx( se( j ) ), u( 1, j ), 1,
214 $ u( 1, j+1 ), 1, work, n )
218 wnorm = clanhe(
'1',
'L', n, work, n, rwork )
220 IF( anorm.GT.wnorm )
THEN
221 result( 1 ) = ( wnorm / anorm ) / ( n*ulp )
223 IF( anorm.LT.one )
THEN
224 result( 1 ) = ( min( wnorm, n*anorm ) / anorm ) / ( n*ulp )
226 result( 1 ) = min( wnorm / anorm, real( n ) ) / ( n*ulp )
234 CALL cgemm(
'N',
'C', n, n, n, cone, u, ldu, u, ldu, czero, work,
238 work( ( n+1 )*( j-1 )+1 ) = work( ( n+1 )*( j-1 )+1 ) - cone
241 result( 2 ) = min( real( n ), clange(
'1', n, n, work, n,
242 $ rwork ) ) / ( n*ulp )