203 DOUBLE PRECISION A( LDA, * )
209 DOUBLE PRECISION ZERO, ONE
210 parameter( zero = 0.0d+0, one = 1.0d+0 )
211 DOUBLE PRECISION EIGHT, SEVTEN
212 parameter( eight = 8.0d+0, sevten = 17.0d+0 )
216 INTEGER I, IMAX, J, JMAX, ITEMP, K, KK, KP, KSTEP,
218 DOUBLE PRECISION ABSAKK, ALPHA, COLMAX, D11, D12, D21, D22,
219 $ ROWMAX, DTEMP, T, WK, WKM1, WKP1, SFMIN
224 DOUBLE PRECISION DLAMCH
225 EXTERNAL lsame, idamax, dlamch
231 INTRINSIC abs, max, sqrt
238 upper = lsame( uplo,
'U' )
239 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
241 ELSE IF( n.LT.0 )
THEN
243 ELSE IF( lda.LT.max( 1, n ) )
THEN
247 CALL xerbla(
'DSYTF2_ROOK', -info )
253 alpha = ( one+sqrt( sevten ) ) / eight
257 sfmin = dlamch(
'S' )
279 absakk = abs( a( k, k ) )
286 imax = idamax( k-1, a( 1, k ), 1 )
287 colmax = abs( a( imax, k ) )
292 IF( (max( absakk, colmax ).EQ.zero) )
THEN
306 IF( .NOT.( absakk.LT.alpha*colmax ) )
THEN
327 jmax = imax + idamax( k-imax, a( imax, imax+1 ),
329 rowmax = abs( a( imax, jmax ) )
335 itemp = idamax( imax-1, a( 1, imax ), 1 )
336 dtemp = abs( a( itemp, imax ) )
337 IF( dtemp.GT.rowmax )
THEN
346 IF( .NOT.( abs( a( imax, imax ) ).LT.alpha*rowmax ) )
358 ELSE IF( ( p.EQ.jmax ).OR.( rowmax.LE.colmax ) )
THEN
377 IF( .NOT. done )
GOTO 12
385 IF( ( kstep.EQ.2 ) .AND. ( p.NE.k ) )
THEN
391 $
CALL dswap( p-1, a( 1, k ), 1, a( 1, p ), 1 )
393 $
CALL dswap( k-p-1, a( p+1, k ), 1, a( p, p+1 ),
396 a( k, k ) = a( p, p )
409 $
CALL dswap( kp-1, a( 1, kk ), 1, a( 1, kp ), 1 )
410 IF( ( kk.GT.1 ) .AND. ( kp.LT.(kk-1) ) )
411 $
CALL dswap( kk-kp-1, a( kp+1, kk ), 1, a( kp,
415 a( kk, kk ) = a( kp, kp )
417 IF( kstep.EQ.2 )
THEN
419 a( k-1, k ) = a( kp, k )
426 IF( kstep.EQ.1 )
THEN
439 IF( abs( a( k, k ) ).GE.sfmin )
THEN
445 d11 = one / a( k, k )
446 CALL dsyr( uplo, k-1, -d11, a( 1, k ), 1, a,
451 CALL dscal( k-1, d11, a( 1, k ), 1 )
458 a( ii, k ) = a( ii, k ) / d11
466 CALL dsyr( uplo, k-1, -d11, a( 1, k ), 1, a,
490 d22 = a( k-1, k-1 ) / d12
491 d11 = a( k, k ) / d12
492 t = one / ( d11*d22-one )
494 DO 30 j = k - 2, 1, -1
496 wkm1 = t*( d11*a( j, k-1 )-a( j, k ) )
497 wk = t*( d22*a( j, k )-a( j, k-1 ) )
500 a( i, j ) = a( i, j ) - (a( i, k ) / d12 )*wk -
501 $ ( a( i, k-1 ) / d12 )*wkm1
507 a( j, k-1 ) = wkm1 / d12
518 IF( kstep.EQ.1 )
THEN
550 absakk = abs( a( k, k ) )
557 imax = k + idamax( n-k, a( k+1, k ), 1 )
558 colmax = abs( a( imax, k ) )
563 IF( ( max( absakk, colmax ).EQ.zero ) )
THEN
577 IF( .NOT.( absakk.LT.alpha*colmax ) )
THEN
597 jmax = k - 1 + idamax( imax-k, a( imax, k ),
599 rowmax = abs( a( imax, jmax ) )
605 itemp = imax + idamax( n-imax, a( imax+1,
608 dtemp = abs( a( itemp, imax ) )
609 IF( dtemp.GT.rowmax )
THEN
618 IF( .NOT.( abs( a( imax, imax ) ).LT.alpha*rowmax ) )
630 ELSE IF( ( p.EQ.jmax ).OR.( rowmax.LE.colmax ) )
THEN
649 IF( .NOT. done )
GOTO 42
657 IF( ( kstep.EQ.2 ) .AND. ( p.NE.k ) )
THEN
663 $
CALL dswap( n-p, a( p+1, k ), 1, a( p+1, p ), 1 )
665 $
CALL dswap( p-k-1, a( k+1, k ), 1, a( p, k+1 ),
668 a( k, k ) = a( p, p )
681 $
CALL dswap( n-kp, a( kp+1, kk ), 1, a( kp+1, kp ),
683 IF( ( kk.LT.n ) .AND. ( kp.GT.(kk+1) ) )
684 $
CALL dswap( kp-kk-1, a( kk+1, kk ), 1, a( kp,
688 a( kk, kk ) = a( kp, kp )
690 IF( kstep.EQ.2 )
THEN
692 a( k+1, k ) = a( kp, k )
699 IF( kstep.EQ.1 )
THEN
712 IF( abs( a( k, k ) ).GE.sfmin )
THEN
718 d11 = one / a( k, k )
719 CALL dsyr( uplo, n-k, -d11, a( k+1, k ), 1,
720 $ a( k+1, k+1 ), lda )
724 CALL dscal( n-k, d11, a( k+1, k ), 1 )
731 a( ii, k ) = a( ii, k ) / d11
739 CALL dsyr( uplo, n-k, -d11, a( k+1, k ), 1,
740 $ a( k+1, k+1 ), lda )
764 d11 = a( k+1, k+1 ) / d21
765 d22 = a( k, k ) / d21
766 t = one / ( d11*d22-one )
772 wk = t*( d11*a( j, k )-a( j, k+1 ) )
773 wkp1 = t*( d22*a( j, k+1 )-a( j, k ) )
778 a( i, j ) = a( i, j ) - ( a( i, k ) / d21 )*wk -
779 $ ( a( i, k+1 ) / d21 )*wkp1
785 a( j, k+1 ) = wkp1 / d21
796 IF( kstep.EQ.1 )
THEN