203      COMPLEX*16         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, II, IMAX, ITEMP, J, JMAX, K, KK, KP, KSTEP,
 
  218      DOUBLE PRECISION   ABSAKK, ALPHA, COLMAX, D, D11, D22, R1, DTEMP,
 
  220      COMPLEX*16         D12, D21, T, WK, WKM1, WKP1, Z
 
  226      DOUBLE PRECISION   DLAMCH, DLAPY2
 
  227      EXTERNAL           lsame, izamax, dlamch, dlapy2
 
  233      INTRINSIC          abs, dble, dcmplx, dconjg, dimag, max, sqrt
 
  236      DOUBLE PRECISION   CABS1
 
  239      cabs1( z ) = abs( dble( z ) ) + abs( dimag( z ) )
 
  246      upper = lsame( uplo, 
'U' )
 
  247      IF( .NOT.upper .AND. .NOT.lsame( uplo, 
'L' ) ) 
THEN 
  249      ELSE IF( n.LT.0 ) 
THEN 
  251      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  255         CALL xerbla( 
'ZHETF2_ROOK', -info )
 
  261      alpha = ( one+sqrt( sevten ) ) / eight
 
  265      sfmin = dlamch( 
'S' )
 
  287         absakk = abs( dble( a( k, k ) ) )
 
  294            imax = izamax( k-1, a( 1, k ), 1 )
 
  295            colmax = cabs1( a( imax, k ) )
 
  300         IF( ( max( absakk, colmax ).EQ.zero ) ) 
THEN 
  307            a( k, k ) = dble( a( k, k ) )
 
  318            IF( .NOT.( absakk.LT.alpha*colmax ) ) 
THEN 
  340                     jmax = imax + izamax( k-imax, a( imax, imax+1 ),
 
  342                     rowmax = cabs1( a( imax, jmax ) )
 
  348                     itemp = izamax( imax-1, a( 1, imax ), 1 )
 
  349                     dtemp = cabs1( a( itemp, imax ) )
 
  350                     IF( dtemp.GT.rowmax ) 
THEN 
  361                  IF( .NOT.( abs( dble( a( imax, imax ) ) )
 
  362     $                       .LT.alpha*rowmax ) ) 
THEN 
  374                  ELSE IF( ( p.EQ.jmax ) .OR. ( rowmax.LE.colmax ) )
 
  396               IF( .NOT.done ) 
GOTO 12
 
  411            IF( ( kstep.EQ.2 ) .AND. ( p.NE.k ) ) 
THEN 
  414     $            
CALL zswap( p-1, a( 1, k ), 1, a( 1, p ), 1 )
 
  416               DO 14 j = p + 1, k - 1
 
  417                  t = dconjg( a( j, k ) )
 
  418                  a( j, k ) = dconjg( a( p, j ) )
 
  422               a( p, k ) = dconjg( a( p, k ) )
 
  424               r1 = dble( a( k, k ) )
 
  425               a( k, k ) = dble( a( p, p ) )
 
  435     $            
CALL zswap( kp-1, a( 1, kk ), 1, a( 1, kp ), 1 )
 
  437               DO 15 j = kp + 1, kk - 1
 
  438                  t = dconjg( a( j, kk ) )
 
  439                  a( j, kk ) = dconjg( a( kp, j ) )
 
  443               a( kp, kk ) = dconjg( a( kp, kk ) )
 
  445               r1 = dble( a( kk, kk ) )
 
  446               a( kk, kk ) = dble( a( kp, kp ) )
 
  449               IF( kstep.EQ.2 ) 
THEN 
  451                  a( k, k ) = dble( a( k, k ) )
 
  454                  a( k-1, k ) = a( kp, k )
 
  459               a( k, k ) = dble( a( k, k ) )
 
  461     $            a( k-1, k-1 ) = dble( a( k-1, k-1 ) )
 
  466            IF( kstep.EQ.1 ) 
THEN 
  479                  IF( abs( dble( a( k, k ) ) ).GE.sfmin ) 
THEN 
  485                     d11 = one / dble( a( k, k ) )
 
  486                     CALL zher( uplo, k-1, -d11, a( 1, k ), 1, a,
 
  491                     CALL zdscal( k-1, d11, a( 1, k ), 1 )
 
  496                     d11 = dble( a( k, k ) )
 
  498                        a( ii, k ) = a( ii, k ) / d11
 
  506                     CALL zher( uplo, k-1, -d11, a( 1, k ), 1, a,
 
  529                  d = dlapy2( dble( a( k-1, k ) ),
 
  530     $                dimag( a( k-1, k ) ) )
 
  531                  d11 = dble( a( k, k ) / d )
 
  532                  d22 = dble( a( k-1, k-1 ) / d )
 
  533                  d12 = a( k-1, k ) / d
 
  534                  tt = one / ( d11*d22-one )
 
  536                  DO 30 j = k - 2, 1, -1
 
  540                     wkm1 = tt*( d11*a( j, k-1 )-dconjg( d12 )*
 
  542                     wk = tt*( d22*a( j, k )-d12*a( j, k-1 ) )
 
  547                        a( i, j ) = a( i, j ) -
 
  548     $                              ( a( i, k ) / d )*dconjg( wk ) -
 
  549     $                              ( a( i, k-1 ) / d )*dconjg( wkm1 )
 
  555                     a( j, k-1 ) = wkm1 / d
 
  557                     a( j, j ) = dcmplx( dble( a( j, j ) ), zero )
 
  569         IF( kstep.EQ.1 ) 
THEN 
  601         absakk = abs( dble( a( k, k ) ) )
 
  608            imax = k + izamax( n-k, a( k+1, k ), 1 )
 
  609            colmax = cabs1( a( imax, k ) )
 
  614         IF( max( absakk, colmax ).EQ.zero ) 
THEN 
  621            a( k, k ) = dble( a( k, k ) )
 
  632            IF( .NOT.( absakk.LT.alpha*colmax ) ) 
THEN 
  654                     jmax = k - 1 + izamax( imax-k, a( imax, k ),
 
  656                     rowmax = cabs1( a( imax, jmax ) )
 
  662                     itemp = imax + izamax( n-imax, a( imax+1,
 
  665                     dtemp = cabs1( a( itemp, imax ) )
 
  666                     IF( dtemp.GT.rowmax ) 
THEN 
  677                  IF( .NOT.( abs( dble( a( imax, imax ) ) )
 
  678     $                       .LT.alpha*rowmax ) ) 
THEN 
  690                  ELSE IF( ( p.EQ.jmax ) .OR. ( rowmax.LE.colmax ) )
 
  713               IF( .NOT.done ) 
GOTO 42
 
  728            IF( ( kstep.EQ.2 ) .AND. ( p.NE.k ) ) 
THEN 
  731     $            
CALL zswap( n-p, a( p+1, k ), 1, a( p+1, p ), 1 )
 
  733               DO 44 j = k + 1, p - 1
 
  734                  t = dconjg( a( j, k ) )
 
  735                  a( j, k ) = dconjg( a( p, j ) )
 
  739               a( p, k ) = dconjg( a( p, k ) )
 
  741               r1 = dble( a( k, k ) )
 
  742               a( k, k ) = dble( a( p, p ) )
 
  752     $            
CALL zswap( n-kp, a( kp+1, kk ), 1, a( kp+1, kp ),
 
  755               DO 45 j = kk + 1, kp - 1
 
  756                  t = dconjg( a( j, kk ) )
 
  757                  a( j, kk ) = dconjg( a( kp, j ) )
 
  761               a( kp, kk ) = dconjg( a( kp, kk ) )
 
  763               r1 = dble( a( kk, kk ) )
 
  764               a( kk, kk ) = dble( a( kp, kp ) )
 
  767               IF( kstep.EQ.2 ) 
THEN 
  769                  a( k, k ) = dble( a( k, k ) )
 
  772                  a( k+1, k ) = a( kp, k )
 
  777               a( k, k ) = dble( a( k, k ) )
 
  779     $            a( k+1, k+1 ) = dble( a( k+1, k+1 ) )
 
  784            IF( kstep.EQ.1 ) 
THEN 
  799                  IF( abs( dble( a( k, k ) ) ).GE.sfmin ) 
THEN 
  805                     d11 = one / dble( a( k, k ) )
 
  806                     CALL zher( uplo, n-k, -d11, a( k+1, k ), 1,
 
  807     $                          a( k+1, k+1 ), lda )
 
  811                     CALL zdscal( n-k, d11, a( k+1, k ), 1 )
 
  816                     d11 = dble( a( k, k ) )
 
  818                        a( ii, k ) = a( ii, k ) / d11
 
  826                     CALL zher( uplo, n-k, -d11, a( k+1, k ), 1,
 
  827     $                          a( k+1, k+1 ), lda )
 
  850                  d = dlapy2( dble( a( k+1, k ) ),
 
  851     $                dimag( a( k+1, k ) ) )
 
  852                  d11 = dble( a( k+1, k+1 ) ) / d
 
  853                  d22 = dble( a( k, k ) ) / d
 
  854                  d21 = a( k+1, k ) / d
 
  855                  tt = one / ( d11*d22-one )
 
  861                     wk = tt*( d11*a( j, k )-d21*a( j, k+1 ) )
 
  862                     wkp1 = tt*( d22*a( j, k+1 )-dconjg( d21 )*
 
  868                        a( i, j ) = a( i, j ) -
 
  869     $                              ( a( i, k ) / d )*dconjg( wk ) -
 
  870     $                              ( a( i, k+1 ) / d )*dconjg( wkp1 )
 
  876                     a( j, k+1 ) = wkp1 / d
 
  878                     a( j, j ) = dcmplx( dble( a( j, j ) ), zero )
 
  890         IF( kstep.EQ.1 ) 
THEN