260 SUBROUTINE zlasyf_rk( UPLO, N, NB, KB, A, LDA, E, IPIV, W, LDW,
269 INTEGER INFO, KB, LDA, LDW, , NB
273 COMPLEX*16 ( LDA, * ), E( * ), W( LDW, * )
279 DOUBLE PRECISION ZERO, ONE
280 parameter( zero = 0.0d+0, one = 1.0d+0 )
281 DOUBLE PRECISION EIGHT,
282 parameter( eight = 8.0d+0, sevten = 17.0d+0 )
283 COMPLEX*16 CONE, CZERO
284 parameter( cone = ( 1.0d+0, 0.0d+0 ),
285 $ czero = ( 0.0d+0, 0.0d+0 ) )
289 INTEGER IMAX, ITEMP, J, JB, JJ, , K, KK, KW, KKW,
291 DOUBLE PRECISION ABSAKK, ALPHA, COLMAX, , SFMIN, DTEMP
292 COMPLEX*16 D11, D12, D21, D22, R1, T, Z
298 EXTERNAL lsame, izamax,
dlamch
304 INTRINSIC abs, dble, dimag,
max,
min, sqrt
307 DOUBLE PRECISION CABS1
310 cabs1( z ) = abs( dble( z ) ) + abs( dimag( z ) )
318 alpha = ( one+sqrt( sevten ) ) / eight
324 IF( lsame( uplo,
'U' ) )
THEN
346 IF( ( k.LE.n-nb+1 .AND. nb.LT.n ) .OR. k.LT.1 )
354 CALL zcopy( k, a( 1, k ), 1, w( 1, kw ), 1 )
356 $
CALL zgemv(
'No transpose', k, n-k, -cone, a( 1, k+1 ),
357 $ lda, w( k, kw+1 ), ldw, cone, w( 1, kw ), 1 )
362 absakk = cabs1( w( k, kw ) )
369 imax = izamax( k-1, w( 1, kw ), 1 )
370 colmax = cabs1( w( imax, kw ) )
375 IF(
max( absakk, colmax ).EQ.zero )
THEN
382 CALL zcopy( k, w( 1, kw ), 1, a( 1, k ), 1 )
398 IF( .NOT.( absakk.LT.alpha*colmax ) )
THEN
417 CALL zcopy( imax, a( 1, imax ), 1, w( 1, kw-1 ), 1 )
418 CALL zcopy( k-imax, a( imax, imax+1 ), lda,
419 $ w( imax+1, kw-1 ), 1 )
422 $
CALL zgemv(
'No transpose', k, n-k, -cone,
423 $ a( 1, k+1 ), lda, w( imax, kw+1 ), ldw,
424 $ cone, w( 1, kw-1 ), 1 )
431 jmax = imax + izamax( k-imax, w( imax+1, kw-1 ),
433 rowmax = cabs1( w( jmax, kw-1 ) )
439 itemp = izamax( imax-1, w( 1, kw-1 ), 1 )
440 dtemp = cabs1( w( itemp, kw-1 ) )
441 IF( dtemp.GT.rowmax )
THEN
451 IF( .NOT.(cabs1( w( imax, kw-1 ) ).LT.alpha*rowmax ) )
461 CALL zcopy( k, w( 1, kw-1 ), 1, w( 1, kw ), 1 )
468 ELSE IF( ( p.EQ.jmax ) .OR. ( rowmax.LE.colmax ) )
487 CALL zcopy( k, w( 1, kw-1 ), 1, w( 1, kw ), 1 )
493 IF( .NOT. done )
GOTO 12
505 IF( ( kstep.EQ.2 ) .AND. ( p.NE.k ) )
THEN
509 CALL zcopy( k-p, a( p+1, k ), 1, a( p, p+1 ), lda )
510 CALL zcopy( p, a( 1, k ), 1, a( 1, p ), 1 )
515 CALL zswap( n-k+1, a( k, k ), lda, a( p, k ), lda )
516 CALL zswap( n-kk+1, w( k, kkw ), ldw, w( p, kkw ), ldw )
525 a( kp, k ) = a( kk, k )
526 CALL zcopy( k-1-kp, a( kp+1, kk ), 1, a( kp, kp+1 ),
528 CALL zcopy( kp, a( 1, kk ), 1, a( 1, kp ), 1 )
533 CALL zswap( n-kk+1, a( kk, kk ), lda, a( kp, kk ), lda )
534 CALL zswap( n-kk+1, w( kk, kkw ), ldw, w( kp, kkw ),
538 IF( kstep.EQ.1 )
THEN
548 CALL zcopy( k, w( 1, kw ), 1, a( 1, k ), 1 )
550 IF( cabs1( a( k, k ) ).GE.sfmin )
THEN
551 r1 = cone / a( k, k )
552 CALL zscal( k-1, r1, a( 1, k ), 1 )
553 ELSE IF( a( k, k ).NE.czero )
THEN
555 a( ii, k ) = a( ii, k ) / a( k, k )
580 d11 = w( k, kw ) / d12
581 d22 = w( k-1, kw-1 ) / d12
582 t = cone / ( d11*d22-cone )
584 a( j, k-1 ) = t*( (d11*w( j, kw-1 )-w( j, kw ) ) /
586 a( j, k ) = t*( ( d22*w( j, kw )-w( j, kw-1 ) ) /
595 a( k-1, k-1 ) = w( k-1, kw-1 )
597 a( k, k ) = w( k, kw )
598 e( k ) = w( k-1, kw )
609 IF( kstep.EQ.1 )
THEN
629 DO 50 j = ( ( k-1 ) / nb )*nb + 1, 1, -nb
630 jb =
min( nb, k-j+1 )
634 DO 40 jj = j, j + jb - 1
635 CALL zgemv(
'No transpose', jj-j+1, n-k, -cone,
636 $ a( j, k+1 ), lda, w( jj, kw+1 ), ldw, cone,
643 $
CALL zgemm(
'No transpose',
'Transpose', j-1, jb,
644 $ n-k, -cone, a( 1, k+1 ), lda, w( j, kw+1 ),
645 $ ldw, cone, a( 1, j ), lda )
669 IF( ( k.GE.nb .AND. nb.LT.n ) .OR. k.GT.n )
677 CALL zcopy( n-k+1, a( k, k ), 1, w( k, k ), 1 )
679 $
CALL zgemv( 'no transpose
', N-K+1, K-1, -CONE, A( K, 1 ),
680 $ LDA, W( K, 1 ), LDW, CONE, W( K, K ), 1 )
685 ABSAKK = CABS1( W( K, K ) )
692 IMAX = K + IZAMAX( N-K, W( K+1, K ), 1 )
693 COLMAX = CABS1( W( IMAX, K ) )
698.EQ.
IF( MAX( ABSAKK, COLMAX )ZERO ) THEN
705 CALL ZCOPY( N-K+1, W( K, K ), 1, A( K, K ), 1 )
721.NOT..LT.
IF( ( ABSAKKALPHA*COLMAX ) ) THEN
740 CALL ZCOPY( IMAX-K, A( IMAX, K ), LDA, W( K, K+1 ), 1)
741 CALL ZCOPY( N-IMAX+1, A( IMAX, IMAX ), 1,
742 $ W( IMAX, K+1 ), 1 )
744 $ CALL ZGEMV( 'no transpose
', N-K+1, K-1, -CONE,
745 $ A( K, 1 ), LDA, W( IMAX, 1 ), LDW,
746 $ CONE, W( K, K+1 ), 1 )
753 JMAX = K - 1 + IZAMAX( IMAX-K, W( K, K+1 ), 1 )
754 ROWMAX = CABS1( W( JMAX, K+1 ) )
760 ITEMP = IMAX + IZAMAX( N-IMAX, W( IMAX+1, K+1 ), 1)
761 DTEMP = CABS1( W( ITEMP, K+1 ) )
762.GT.
IF( DTEMPROWMAX ) THEN
772.NOT..LT.
IF( ( CABS1( W( IMAX, K+1 ) )ALPHA*ROWMAX ) )
782 CALL ZCOPY( N-K+1, W( K, K+1 ), 1, W( K, K ), 1 )
789.EQ..OR..LE.
ELSE IF( ( PJMAX ) ( ROWMAXCOLMAX ) )
808 CALL ZCOPY( N-K+1, W( K, K+1 ), 1, W( K, K ), 1 )
814.NOT.
IF( DONE ) GOTO 72
822.EQ..AND..NE.
IF( ( KSTEP2 ) ( PK ) ) THEN
826 CALL ZCOPY( P-K, A( K, K ), 1, A( P, K ), LDA )
827 CALL ZCOPY( N-P+1, A( P, K ), 1, A( P, P ), 1 )
832 CALL ZSWAP( K, A( K, 1 ), LDA, A( P, 1 ), LDA )
833 CALL ZSWAP( KK, W( K, 1 ), LDW, W( P, 1 ), LDW )
842 A( KP, K ) = A( KK, K )
843 CALL ZCOPY( KP-K-1, A( K+1, KK ), 1, A( KP, K+1 ), LDA )
844 CALL ZCOPY( N-KP+1, A( KP, KK ), 1, A( KP, KP ), 1 )
848 CALL ZSWAP( KK, A( KK, 1 ), LDA, A( KP, 1 ), LDA )
849 CALL ZSWAP( KK, W( KK, 1 ), LDW, W( KP, 1 ), LDW )
852.EQ.
IF( KSTEP1 ) THEN
862 CALL ZCOPY( N-K+1, W( K, K ), 1, A( K, K ), 1 )
864.GE.
IF( CABS1( A( K, K ) )SFMIN ) THEN
865 R1 = CONE / A( K, K )
866 CALL ZSCAL( N-K, R1, A( K+1, K ), 1 )
867.NE.
ELSE IF( A( K, K )CZERO ) THEN
869 A( II, K ) = A( II, K ) / A( K, K )
893 D11 = W( K+1, K+1 ) / D21
894 D22 = W( K, K ) / D21
895 T = CONE / ( D11*D22-CONE )
897 A( J, K ) = T*( ( D11*W( J, K )-W( J, K+1 ) ) /
899 A( J, K+1 ) = T*( ( D22*W( J, K+1 )-W( J, K ) ) /
908 A( K, K ) = W( K, K )
910 A( K+1, K+1 ) = W( K+1, K+1 )
922.EQ.
IF( KSTEP1 ) THEN
943 JB = MIN( NB, N-J+1 )
947 DO 100 JJ = J, J + JB - 1
948 CALL ZGEMV( 'no transpose
', J+JB-JJ, K-1, -CONE,
949 $ A( JJ, 1 ), LDA, W( JJ, 1 ), LDW, CONE,
956 $ CALL ZGEMM( 'no transpose
', 'transpose
', N-J-JB+1, JB,
957 $ K-1, -CONE, A( J+JB, 1 ), LDA, W( J, 1 ),
958 $ LDW, CONE, A( J+JB, J ), LDA )