161      SUBROUTINE zhbgst( VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB,
 
  163     $                   LDX, WORK, RWORK, INFO )
 
  171      INTEGER            INFO, KA, KB, LDAB, LDBB, LDX, N
 
  174      DOUBLE PRECISION   RWORK( * )
 
  175      COMPLEX*16         AB( LDAB, * ), BB( LDBB, * ), WORK( * ),
 
  182      COMPLEX*16         CZERO, CONE
 
  184      parameter( czero = ( 0.0d+0, 0.0d+0 ),
 
  185     $                   cone = ( 1.0d+0, 0.0d+0 ), one = 1.0d+0 )
 
  188      LOGICAL            UPDATE, UPPER, WANTX
 
  189      INTEGER            I, I0, I1, I2, INCA, J, J1, J1T, J2, J2T, K,
 
  190     $                   ka1, kb1, kbt, l, m, nr, nrt, nx
 
  192      COMPLEX*16         RA, RA1, T
 
  204      INTRINSIC          dble, dconjg, max, min
 
  210      wantx = lsame( vect, 
'V' )
 
  211      upper = lsame( uplo, 
'U' )
 
  215      IF( .NOT.wantx .AND. .NOT.lsame( vect, 
'N' ) ) 
THEN 
  217      ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo, 
'L' ) ) 
THEN 
  219      ELSE IF( n.LT.0 ) 
THEN 
  221      ELSE IF( ka.LT.0 ) 
THEN 
  223      ELSE IF( kb.LT.0 .OR. kb.GT.ka ) 
THEN 
  225      ELSE IF( ldab.LT.ka+1 ) 
THEN 
  227      ELSE IF( ldbb.LT.kb+1 ) 
THEN 
  229      ELSE IF( ldx.LT.1 .OR. wantx .AND. ldx.LT.max( 1, n ) ) 
THEN 
  233         CALL xerbla( 
'ZHBGST', -info )
 
  247     $   
CALL zlaset( 
'Full', n, n, czero, cone, x, ldx )
 
  345            bii = dble( bb( kb1, i ) )
 
  346            ab( ka1, i ) = ( dble( ab( ka1, i ) ) / bii ) / bii
 
  348               ab( i-j+ka1, j ) = ab( i-j+ka1, j ) / bii
 
  350            DO 30 j = max( 1, i-ka ), i - 1
 
  351               ab( j-i+ka1, i ) = ab( j-i+ka1, i ) / bii
 
  353            DO 60 k = i - kbt, i - 1
 
  355                  ab( j-k+ka1, k ) = ab( j-k+ka1, k ) -
 
  357     $                               dconjg( ab( k-i+ka1, i ) ) -
 
  358     $                               dconjg( bb( k-i+kb1, i ) )*
 
  360     $                               dble( ab( ka1, i ) )*
 
  362     $                               dconjg( bb( k-i+kb1, i ) )
 
  364               DO 50 j = max( 1, i-ka ), i - kbt - 1
 
  365                  ab( j-k+ka1, k ) = ab( j-k+ka1, k ) -
 
  366     $                               dconjg( bb( k-i+kb1, i ) )*
 
  371               DO 70 k = max( j-ka, i-kbt ), i - 1
 
  372                  ab( k-j+ka1, j ) = ab( k-j+ka1, j ) -
 
  373     $                               bb( k-i+kb1, i )*ab( i-j+ka1, j )
 
  381               CALL zdscal( n-m, one / bii, x( m+1, i ), 1 )
 
  383     $            
CALL zgerc( n-m, kbt, -cone, x( m+1, i ), 1,
 
  384     $                        bb( kb1-kbt, i ), 1, x( m+1, i-kbt ),
 
  390            ra1 = ab( i-i1+ka1, i1 )
 
  403               IF( i-k+ka.LT.n .AND. i-k.GT.1 ) 
THEN 
  407                  CALL zlartg( ab( k+1, i-k+ka ), ra1,
 
  408     $                         rwork( i-k+ka-m ), work( i-k+ka-m ), ra )
 
  413                  t = -bb( kb1-k, i )*ra1
 
  414                  work( i-k ) = rwork( i-k+ka-m )*t -
 
  415     $                          dconjg( work( i-k+ka-m ) )*
 
  417                  ab( 1, i-k+ka ) = work( i-k+ka-m )*t +
 
  418     $                              rwork( i-k+ka-m )*ab( 1, i-k+ka )
 
  422            j2 = i - k - 1 + max( 1, k-i0+2 )*ka1
 
  423            nr = ( n-j2+ka ) / ka1
 
  424            j1 = j2 + ( nr-1 )*ka1
 
  426               j2t = max( j2, i+2*ka-k+1 )
 
  430            nrt = ( n-j2t+ka ) / ka1
 
  431            DO 90 j = j2t, j1, ka1
 
  436               work( j-m ) = work( j-m )*ab( 1, j+1 )
 
  437               ab( 1, j+1 ) = rwork( j-m )*ab( 1, j+1 )
 
  444     $         
CALL zlargv( nrt, ab( 1, j2t ), inca, work( j2t-m ),
 
  446     $                      rwork( j2t-m ), ka1 )
 
  452                  CALL zlartv( nr, ab( ka1-l, j2 ), inca,
 
  453     $                         ab( ka-l, j2+1 ), inca, rwork( j2-m ),
 
  454     $                         work( j2-m ), ka1 )
 
  460               CALL zlar2v( nr, ab( ka1, j2 ), ab( ka1, j2+1 ),
 
  461     $                      ab( ka, j2+1 ), inca, rwork( j2-m ),
 
  462     $                      work( j2-m ), ka1 )
 
  464               CALL zlacgv( nr, work( j2-m ), ka1 )
 
  469            DO 110 l = ka - 1, kb - k + 1, -1
 
  470               nrt = ( n-j2+l ) / ka1
 
  472     $            
CALL zlartv( nrt, ab( l, j2+ka1-l ), inca,
 
  473     $                         ab( l+1, j2+ka1-l ), inca, rwork( j2-m ),
 
  474     $                         work( j2-m ), ka1 )
 
  481               DO 120 j = j2, j1, ka1
 
  482                  CALL zrot( n-m, x( m+1, j ), 1, x( m+1, j+1 ), 1,
 
  483     $                       rwork( j-m ), dconjg( work( j-m ) ) )
 
  489            IF( i2.LE.n .AND. kbt.GT.0 ) 
THEN 
  494               work( i-kbt ) = -bb( kb1-kbt, i )*ra1
 
  500               j2 = i - k - 1 + max( 2, k-i0+1 )*ka1
 
  502               j2 = i - k - 1 + max( 1, k-i0+1 )*ka1
 
  507            DO 140 l = kb - k, 1, -1
 
  508               nrt = ( n-j2+ka+l ) / ka1
 
  510     $            
CALL zlartv( nrt, ab( l, j2-l+1 ), inca,
 
  511     $                         ab( l+1, j2-l+1 ), inca, rwork( j2-ka ),
 
  512     $                         work( j2-ka ), ka1 )
 
  514            nr = ( n-j2+ka ) / ka1
 
  515            j1 = j2 + ( nr-1 )*ka1
 
  516            DO 150 j = j1, j2, -ka1
 
  517               work( j ) = work( j-ka )
 
  518               rwork( j ) = rwork( j-ka )
 
  520            DO 160 j = j2, j1, ka1
 
  525               work( j ) = work( j )*ab( 1, j+1 )
 
  526               ab( 1, j+1 ) = rwork( j )*ab( 1, j+1 )
 
  529               IF( i-k.LT.n-ka .AND. k.LE.kbt )
 
  530     $            work( i-k+ka ) = work( i-k )
 
  535            j2 = i - k - 1 + max( 1, k-i0+1 )*ka1
 
  536            nr = ( n-j2+ka ) / ka1
 
  537            j1 = j2 + ( nr-1 )*ka1
 
  543               CALL zlargv( nr, ab( 1, j2 ), inca, work( j2 ), ka1,
 
  549                  CALL zlartv( nr, ab( ka1-l, j2 ), inca,
 
  550     $                         ab( ka-l, j2+1 ), inca, rwork( j2 ),
 
  557               CALL zlar2v( nr, ab( ka1, j2 ), ab( ka1, j2+1 ),
 
  558     $                      ab( ka, j2+1 ), inca, rwork( j2 ),
 
  561               CALL zlacgv( nr, work( j2 ), ka1 )
 
  566            DO 190 l = ka - 1, kb - k + 1, -1
 
  567               nrt = ( n-j2+l ) / ka1
 
  569     $            
CALL zlartv( nrt, ab( l, j2+ka1-l ), inca,
 
  570     $                         ab( l+1, j2+ka1-l ), inca, rwork( j2 ),
 
  578               DO 200 j = j2, j1, ka1
 
  579                  CALL zrot( n-m, x( m+1, j ), 1, x( m+1, j+1 ), 1,
 
  580     $                       rwork( j ), dconjg( work( j ) ) )
 
  586            j2 = i - k - 1 + max( 1, k-i0+2 )*ka1
 
  590            DO 220 l = kb - k, 1, -1
 
  591               nrt = ( n-j2+l ) / ka1
 
  593     $            
CALL zlartv( nrt, ab( l, j2+ka1-l ), inca,
 
  594     $                         ab( l+1, j2+ka1-l ), inca, rwork( j2-m ),
 
  595     $                         work( j2-m ), ka1 )
 
  600            DO 240 j = n - 1, j2 + ka, -1
 
  601               rwork( j-m ) = rwork( j-ka-m )
 
  602               work( j-m ) = work( j-ka-m )
 
  614            bii = dble( bb( 1, i ) )
 
  615            ab( 1, i ) = ( dble( ab( 1, i ) ) / bii ) / bii
 
  617               ab( j-i+1, i ) = ab( j-i+1, i ) / bii
 
  619            DO 260 j = max( 1, i-ka ), i - 1
 
  620               ab( i-j+1, j ) = ab( i-j+1, j ) / bii
 
  622            DO 290 k = i - kbt, i - 1
 
  623               DO 270 j = i - kbt, k
 
  624                  ab( k-j+1, j ) = ab( k-j+1, j ) -
 
  625     $                             bb( i-j+1, j )*dconjg( ab( i-k+1,
 
  626     $                             k ) ) - dconjg( bb( i-k+1, k ) )*
 
  627     $                             ab( i-j+1, j ) + dble( ab( 1, i ) )*
 
  628     $                             bb( i-j+1, j )*dconjg( bb( i-k+1,
 
  631               DO 280 j = max( 1, i-ka ), i - kbt - 1
 
  632                  ab( k-j+1, j ) = ab( k-j+1, j ) -
 
  633     $                             dconjg( bb( i-k+1, k ) )*
 
  638               DO 300 k = max( j-ka, i-kbt ), i - 1
 
  639                  ab( j-k+1, k ) = ab( j-k+1, k ) -
 
  640     $                             bb( i-k+1, k )*ab( j-i+1, i )
 
  648               CALL zdscal( n-m, one / bii, x( m+1, i ), 1 )
 
  650     $            
CALL zgeru( n-m, kbt, -cone, x( m+1, i ), 1,
 
  651     $                        bb( kbt+1, i-kbt ), ldbb-1,
 
  652     $                        x( m+1, i-kbt ), ldx )
 
  657            ra1 = ab( i1-i+1, i )
 
  670               IF( i-k+ka.LT.n .AND. i-k.GT.1 ) 
THEN 
  674                  CALL zlartg( ab( ka1-k, i ), ra1,
 
  676     $                         work( i-k+ka-m ), ra )
 
  681                  t = -bb( k+1, i-k )*ra1
 
  682                  work( i-k ) = rwork( i-k+ka-m )*t -
 
  683     $                          dconjg( work( i-k+ka-m ) )*
 
  685                  ab( ka1, i-k ) = work( i-k+ka-m )*t +
 
  686     $                             rwork( i-k+ka-m )*ab( ka1, i-k )
 
  690            j2 = i - k - 1 + max( 1, k-i0+2 )*ka1
 
  691            nr = ( n-j2+ka ) / ka1
 
  692            j1 = j2 + ( nr-1 )*ka1
 
  694               j2t = max( j2, i+2*ka-k+1 )
 
  698            nrt = ( n-j2t+ka ) / ka1
 
  699            DO 320 j = j2t, j1, ka1
 
  704               work( j-m ) = work( j-m )*ab( ka1, j-ka+1 )
 
  705               ab( ka1, j-ka+1 ) = rwork( j-m )*ab( ka1, j-ka+1 )
 
  712     $         
CALL zlargv( nrt, ab( ka1, j2t-ka ), inca,
 
  714     $                      ka1, rwork( j2t-m ), ka1 )
 
  720                  CALL zlartv( nr, ab( l+1, j2-l ), inca,
 
  721     $                         ab( l+2, j2-l ), inca, rwork( j2-m ),
 
  722     $                         work( j2-m ), ka1 )
 
  728               CALL zlar2v( nr, ab( 1, j2 ), ab( 1, j2+1 ), ab( 2,
 
  730     $                      inca, rwork( j2-m ), work( j2-m ), ka1 )
 
  732               CALL zlacgv( nr, work( j2-m ), ka1 )
 
  737            DO 340 l = ka - 1, kb - k + 1, -1
 
  738               nrt = ( n-j2+l ) / ka1
 
  740     $            
CALL zlartv( nrt, ab( ka1-l+1, j2 ), inca,
 
  741     $                         ab( ka1-l, j2+1 ), inca, rwork( j2-m ),
 
  742     $                         work( j2-m ), ka1 )
 
  749               DO 350 j = j2, j1, ka1
 
  750                  CALL zrot( n-m, x( m+1, j ), 1, x( m+1, j+1 ), 1,
 
  751     $                       rwork( j-m ), work( j-m ) )
 
  757            IF( i2.LE.n .AND. kbt.GT.0 ) 
THEN 
  762               work( i-kbt ) = -bb( kbt+1, i-kbt )*ra1
 
  768               j2 = i - k - 1 + max( 2, k-i0+1 )*ka1
 
  770               j2 = i - k - 1 + max( 1, k-i0+1 )*ka1
 
  775            DO 370 l = kb - k, 1, -1
 
  776               nrt = ( n-j2+ka+l ) / ka1
 
  778     $            
CALL zlartv( nrt, ab( ka1-l+1, j2-ka ), inca,
 
  779     $                         ab( ka1-l, j2-ka+1 ), inca,
 
  780     $                         rwork( j2-ka ), work( j2-ka ), ka1 )
 
  782            nr = ( n-j2+ka ) / ka1
 
  783            j1 = j2 + ( nr-1 )*ka1
 
  784            DO 380 j = j1, j2, -ka1
 
  785               work( j ) = work( j-ka )
 
  786               rwork( j ) = rwork( j-ka )
 
  788            DO 390 j = j2, j1, ka1
 
  793               work( j ) = work( j )*ab( ka1, j-ka+1 )
 
  794               ab( ka1, j-ka+1 ) = rwork( j )*ab( ka1, j-ka+1 )
 
  797               IF( i-k.LT.n-ka .AND. k.LE.kbt )
 
  798     $            work( i-k+ka ) = work( i-k )
 
  803            j2 = i - k - 1 + max( 1, k-i0+1 )*ka1
 
  804            nr = ( n-j2+ka ) / ka1
 
  805            j1 = j2 + ( nr-1 )*ka1
 
  811               CALL zlargv( nr, ab( ka1, j2-ka ), inca, work( j2 ),
 
  818                  CALL zlartv( nr, ab( l+1, j2-l ), inca,
 
  819     $                         ab( l+2, j2-l ), inca, rwork( j2 ),
 
  826               CALL zlar2v( nr, ab( 1, j2 ), ab( 1, j2+1 ), ab( 2,
 
  828     $                      inca, rwork( j2 ), work( j2 ), ka1 )
 
  830               CALL zlacgv( nr, work( j2 ), ka1 )
 
  835            DO 420 l = ka - 1, kb - k + 1, -1
 
  836               nrt = ( n-j2+l ) / ka1
 
  838     $            
CALL zlartv( nrt, ab( ka1-l+1, j2 ), inca,
 
  839     $                         ab( ka1-l, j2+1 ), inca, rwork( j2 ),
 
  847               DO 430 j = j2, j1, ka1
 
  848                  CALL zrot( n-m, x( m+1, j ), 1, x( m+1, j+1 ), 1,
 
  849     $                       rwork( j ), work( j ) )
 
  855            j2 = i - k - 1 + max( 1, k-i0+2 )*ka1
 
  859            DO 450 l = kb - k, 1, -1
 
  860               nrt = ( n-j2+l ) / ka1
 
  862     $            
CALL zlartv( nrt, ab( ka1-l+1, j2 ), inca,
 
  863     $                         ab( ka1-l, j2+1 ), inca, rwork( j2-m ),
 
  864     $                         work( j2-m ), ka1 )
 
  869            DO 470 j = n - 1, j2 + ka, -1
 
  870               rwork( j-m ) = rwork( j-ka-m )
 
  871               work( j-m ) = work( j-ka-m )
 
  920      IF( i.LT.m-kbt ) 
THEN 
  934            bii = dble( bb( kb1, i ) )
 
  935            ab( ka1, i ) = ( dble( ab( ka1, i ) ) / bii ) / bii
 
  937               ab( j-i+ka1, i ) = ab( j-i+ka1, i ) / bii
 
  939            DO 510 j = i + 1, min( n, i+ka )
 
  940               ab( i-j+ka1, j ) = ab( i-j+ka1, j ) / bii
 
  942            DO 540 k = i + 1, i + kbt
 
  943               DO 520 j = k, i + kbt
 
  944                  ab( k-j+ka1, j ) = ab( k-j+ka1, j ) -
 
  946     $                               dconjg( ab( i-k+ka1, k ) ) -
 
  947     $                               dconjg( bb( i-k+kb1, k ) )*
 
  949     $                               dble( ab( ka1, i ) )*
 
  951     $                               dconjg( bb( i-k+kb1, k ) )
 
  953               DO 530 j = i + kbt + 1, min( n, i+ka )
 
  954                  ab( k-j+ka1, j ) = ab( k-j+ka1, j ) -
 
  955     $                               dconjg( bb( i-k+kb1, k ) )*
 
  960               DO 550 k = i + 1, min( j+ka, i+kbt )
 
  961                  ab( j-k+ka1, k ) = ab( j-k+ka1, k ) -
 
  962     $                               bb( i-k+kb1, k )*ab( j-i+ka1, i )
 
  970               CALL zdscal( nx, one / bii, x( 1, i ), 1 )
 
  972     $            
CALL zgeru( nx, kbt, -cone, x( 1, i ), 1,
 
  973     $                        bb( kb, i+1 ), ldbb-1, x( 1, i+1 ), ldx )
 
  978            ra1 = ab( i1-i+ka1, i )
 
  990               IF( i+k-ka1.GT.0 .AND. i+k.LT.m ) 
THEN 
  994                  CALL zlartg( ab( k+1, i ), ra1, rwork( i+k-ka ),
 
  995     $                         work( i+k-ka ), ra )
 
 1000                  t = -bb( kb1-k, i+k )*ra1
 
 1001                  work( m-kb+i+k ) = rwork( i+k-ka )*t -
 
 1002     $                               dconjg( work( i+k-ka ) )*
 
 1004                  ab( 1, i+k ) = work( i+k-ka )*t +
 
 1005     $                           rwork( i+k-ka )*ab( 1, i+k )
 
 1009            j2 = i + k + 1 - max( 1, k+i0-m+1 )*ka1
 
 1010            nr = ( j2+ka-1 ) / ka1
 
 1011            j1 = j2 - ( nr-1 )*ka1
 
 1013               j2t = min( j2, i-2*ka+k-1 )
 
 1017            nrt = ( j2t+ka-1 ) / ka1
 
 1018            DO 570 j = j1, j2t, ka1
 
 1023               work( j ) = work( j )*ab( 1, j+ka-1 )
 
 1024               ab( 1, j+ka-1 ) = rwork( j )*ab( 1, j+ka-1 )
 
 1031     $         
CALL zlargv( nrt, ab( 1, j1+ka ), inca, work( j1 ),
 
 1033     $                      rwork( j1 ), ka1 )
 
 1038               DO 580 l = 1, ka - 1
 
 1039                  CALL zlartv( nr, ab( ka1-l, j1+l ), inca,
 
 1040     $                         ab( ka-l, j1+l ), inca, rwork( j1 ),
 
 1047               CALL zlar2v( nr, ab( ka1, j1 ), ab( ka1, j1-1 ),
 
 1048     $                      ab( ka, j1 ), inca, rwork( j1 ), work( j1 ),
 
 1051               CALL zlacgv( nr, work( j1 ), ka1 )
 
 1056            DO 590 l = ka - 1, kb - k + 1, -1
 
 1057               nrt = ( j2+l-1 ) / ka1
 
 1058               j1t = j2 - ( nrt-1 )*ka1
 
 1060     $            
CALL zlartv( nrt, ab( l, j1t ), inca,
 
 1061     $                         ab( l+1, j1t-1 ), inca, rwork( j1t ),
 
 1062     $                         work( j1t ), ka1 )
 
 1069               DO 600 j = j1, j2, ka1
 
 1070                  CALL zrot( nx, x( 1, j ), 1, x( 1, j-1 ), 1,
 
 1071     $                       rwork( j ), work( j ) )
 
 1077            IF( i2.GT.0 .AND. kbt.GT.0 ) 
THEN 
 1082               work( m-kb+i+kbt ) = -bb( kb1-kbt, i+kbt )*ra1
 
 1086         DO 650 k = kb, 1, -1
 
 1088               j2 = i + k + 1 - max( 2, k+i0-m )*ka1
 
 1090               j2 = i + k + 1 - max( 1, k+i0-m )*ka1
 
 1095            DO 620 l = kb - k, 1, -1
 
 1096               nrt = ( j2+ka+l-1 ) / ka1
 
 1097               j1t = j2 - ( nrt-1 )*ka1
 
 1099     $            
CALL zlartv( nrt, ab( l, j1t+ka ), inca,
 
 1100     $                         ab( l+1, j1t+ka-1 ), inca,
 
 1101     $                         rwork( m-kb+j1t+ka ),
 
 1102     $                         work( m-kb+j1t+ka ), ka1 )
 
 1104            nr = ( j2+ka-1 ) / ka1
 
 1105            j1 = j2 - ( nr-1 )*ka1
 
 1106            DO 630 j = j1, j2, ka1
 
 1107               work( m-kb+j ) = work( m-kb+j+ka )
 
 1108               rwork( m-kb+j ) = rwork( m-kb+j+ka )
 
 1110            DO 640 j = j1, j2, ka1
 
 1115               work( m-kb+j ) = work( m-kb+j )*ab( 1, j+ka-1 )
 
 1116               ab( 1, j+ka-1 ) = rwork( m-kb+j )*ab( 1, j+ka-1 )
 
 1119               IF( i+k.GT.ka1 .AND. k.LE.kbt )
 
 1120     $            work( m-kb+i+k-ka ) = work( m-kb+i+k )
 
 1124         DO 690 k = kb, 1, -1
 
 1125            j2 = i + k + 1 - max( 1, k+i0-m )*ka1
 
 1126            nr = ( j2+ka-1 ) / ka1
 
 1127            j1 = j2 - ( nr-1 )*ka1
 
 1133               CALL zlargv( nr, ab( 1, j1+ka ), inca,
 
 1135     $                      ka1, rwork( m-kb+j1 ), ka1 )
 
 1139               DO 660 l = 1, ka - 1
 
 1140                  CALL zlartv( nr, ab( ka1-l, j1+l ), inca,
 
 1141     $                         ab( ka-l, j1+l ), inca, rwork( m-kb+j1 ),
 
 1142     $                         work( m-kb+j1 ), ka1 )
 
 1148               CALL zlar2v( nr, ab( ka1, j1 ), ab( ka1, j1-1 ),
 
 1149     $                      ab( ka, j1 ), inca, rwork( m-kb+j1 ),
 
 1150     $                      work( m-kb+j1 ), ka1 )
 
 1152               CALL zlacgv( nr, work( m-kb+j1 ), ka1 )
 
 1157            DO 670 l = ka - 1, kb - k + 1, -1
 
 1158               nrt = ( j2+l-1 ) / ka1
 
 1159               j1t = j2 - ( nrt-1 )*ka1
 
 1161     $            
CALL zlartv( nrt, ab( l, j1t ), inca,
 
 1162     $                         ab( l+1, j1t-1 ), inca,
 
 1163     $                         rwork( m-kb+j1t ), work( m-kb+j1t ),
 
 1171               DO 680 j = j1, j2, ka1
 
 1172                  CALL zrot( nx, x( 1, j ), 1, x( 1, j-1 ), 1,
 
 1173     $                       rwork( m-kb+j ), work( m-kb+j ) )
 
 1178         DO 710 k = 1, kb - 1
 
 1179            j2 = i + k + 1 - max( 1, k+i0-m+1 )*ka1
 
 1183            DO 700 l = kb - k, 1, -1
 
 1184               nrt = ( j2+l-1 ) / ka1
 
 1185               j1t = j2 - ( nrt-1 )*ka1
 
 1187     $            
CALL zlartv( nrt, ab( l, j1t ), inca,
 
 1188     $                         ab( l+1, j1t-1 ), inca, rwork( j1t ),
 
 1189     $                         work( j1t ), ka1 )
 
 1194            DO 720 j = 2, i2 - ka
 
 1195               rwork( j ) = rwork( j+ka )
 
 1196               work( j ) = work( j+ka )
 
 1208            bii = dble( bb( 1, i ) )
 
 1209            ab( 1, i ) = ( dble( ab( 1, i ) ) / bii ) / bii
 
 1210            DO 730 j = i1, i - 1
 
 1211               ab( i-j+1, j ) = ab( i-j+1, j ) / bii
 
 1213            DO 740 j = i + 1, min( n, i+ka )
 
 1214               ab( j-i+1, i ) = ab( j-i+1, i ) / bii
 
 1216            DO 770 k = i + 1, i + kbt
 
 1217               DO 750 j = k, i + kbt
 
 1218                  ab( j-k+1, k ) = ab( j-k+1, k ) -
 
 1219     $                             bb( j-i+1, i )*dconjg( ab( k-i+1,
 
 1220     $                             i ) ) - dconjg( bb( k-i+1, i ) )*
 
 1221     $                             ab( j-i+1, i ) + dble( ab( 1, i ) )*
 
 1222     $                             bb( j-i+1, i )*dconjg( bb( k-i+1,
 
 1225               DO 760 j = i + kbt + 1, min( n, i+ka )
 
 1226                  ab( j-k+1, k ) = ab( j-k+1, k ) -
 
 1227     $                             dconjg( bb( k-i+1, i ) )*
 
 1232               DO 780 k = i + 1, min( j+ka, i+kbt )
 
 1233                  ab( k-j+1, j ) = ab( k-j+1, j ) -
 
 1234     $                             bb( k-i+1, i )*ab( i-j+1, j )
 
 1242               CALL zdscal( nx, one / bii, x( 1, i ), 1 )
 
 1244     $            
CALL zgerc( nx, kbt, -cone, x( 1, i ), 1, bb( 2,
 
 1246     $                        1, x( 1, i+1 ), ldx )
 
 1251            ra1 = ab( i-i1+1, i1 )
 
 1257         DO 840 k = 1, kb - 1
 
 1263               IF( i+k-ka1.GT.0 .AND. i+k.LT.m ) 
THEN 
 1267                  CALL zlartg( ab( ka1-k, i+k-ka ), ra1,
 
 1268     $                         rwork( i+k-ka ), work( i+k-ka ), ra )
 
 1273                  t = -bb( k+1, i )*ra1
 
 1274                  work( m-kb+i+k ) = rwork( i+k-ka )*t -
 
 1275     $                               dconjg( work( i+k-ka ) )*
 
 1277                  ab( ka1, i+k-ka ) = work( i+k-ka )*t +
 
 1278     $                                rwork( i+k-ka )*ab( ka1, i+k-ka )
 
 1282            j2 = i + k + 1 - max( 1, k+i0-m+1 )*ka1
 
 1283            nr = ( j2+ka-1 ) / ka1
 
 1284            j1 = j2 - ( nr-1 )*ka1
 
 1286               j2t = min( j2, i-2*ka+k-1 )
 
 1290            nrt = ( j2t+ka-1 ) / ka1
 
 1291            DO 800 j = j1, j2t, ka1
 
 1296               work( j ) = work( j )*ab( ka1, j-1 )
 
 1297               ab( ka1, j-1 ) = rwork( j )*ab( ka1, j-1 )
 
 1304     $         
CALL zlargv( nrt, ab( ka1, j1 ), inca, work( j1 ),
 
 1306     $                      rwork( j1 ), ka1 )
 
 1311               DO 810 l = 1, ka - 1
 
 1312                  CALL zlartv( nr, ab( l+1, j1 ), inca, ab( l+2,
 
 1314     $                         inca, rwork( j1 ), work( j1 ), ka1 )
 
 1320               CALL zlar2v( nr, ab( 1, j1 ), ab( 1, j1-1 ),
 
 1321     $                      ab( 2, j1-1 ), inca, rwork( j1 ),
 
 1324               CALL zlacgv( nr, work( j1 ), ka1 )
 
 1329            DO 820 l = ka - 1, kb - k + 1, -1
 
 1330               nrt = ( j2+l-1 ) / ka1
 
 1331               j1t = j2 - ( nrt-1 )*ka1
 
 1333     $            
CALL zlartv( nrt, ab( ka1-l+1, j1t-ka1+l ), inca,
 
 1334     $                         ab( ka1-l, j1t-ka1+l ), inca,
 
 1335     $                         rwork( j1t ), work( j1t ), ka1 )
 
 1342               DO 830 j = j1, j2, ka1
 
 1343                  CALL zrot( nx, x( 1, j ), 1, x( 1, j-1 ), 1,
 
 1344     $                       rwork( j ), dconjg( work( j ) ) )
 
 1350            IF( i2.GT.0 .AND. kbt.GT.0 ) 
THEN 
 1355               work( m-kb+i+kbt ) = -bb( kbt+1, i )*ra1
 
 1359         DO 880 k = kb, 1, -1
 
 1361               j2 = i + k + 1 - max( 2, k+i0-m )*ka1
 
 1363               j2 = i + k + 1 - max( 1, k+i0-m )*ka1
 
 1368            DO 850 l = kb - k, 1, -1
 
 1369               nrt = ( j2+ka+l-1 ) / ka1
 
 1370               j1t = j2 - ( nrt-1 )*ka1
 
 1372     $            
CALL zlartv( nrt, ab( ka1-l+1, j1t+l-1 ), inca,
 
 1373     $                         ab( ka1-l, j1t+l-1 ), inca,
 
 1374     $                         rwork( m-kb+j1t+ka ),
 
 1375     $                         work( m-kb+j1t+ka ), ka1 )
 
 1377            nr = ( j2+ka-1 ) / ka1
 
 1378            j1 = j2 - ( nr-1 )*ka1
 
 1379            DO 860 j = j1, j2, ka1
 
 1380               work( m-kb+j ) = work( m-kb+j+ka )
 
 1381               rwork( m-kb+j ) = rwork( m-kb+j+ka )
 
 1383            DO 870 j = j1, j2, ka1
 
 1388               work( m-kb+j ) = work( m-kb+j )*ab( ka1, j-1 )
 
 1389               ab( ka1, j-1 ) = rwork( m-kb+j )*ab( ka1, j-1 )
 
 1392               IF( i+k.GT.ka1 .AND. k.LE.kbt )
 
 1393     $            work( m-kb+i+k-ka ) = work( m-kb+i+k )
 
 1397         DO 920 k = kb, 1, -1
 
 1398            j2 = i + k + 1 - max( 1, k+i0-m )*ka1
 
 1399            nr = ( j2+ka-1 ) / ka1
 
 1400            j1 = j2 - ( nr-1 )*ka1
 
 1406               CALL zlargv( nr, ab( ka1, j1 ), inca, work( m-kb+j1 ),
 
 1407     $                      ka1, rwork( m-kb+j1 ), ka1 )
 
 1411               DO 890 l = 1, ka - 1
 
 1412                  CALL zlartv( nr, ab( l+1, j1 ), inca, ab( l+2,
 
 1414     $                         inca, rwork( m-kb+j1 ), work( m-kb+j1 ),
 
 1421               CALL zlar2v( nr, ab( 1, j1 ), ab( 1, j1-1 ),
 
 1422     $                      ab( 2, j1-1 ), inca, rwork( m-kb+j1 ),
 
 1423     $                      work( m-kb+j1 ), ka1 )
 
 1425               CALL zlacgv( nr, work( m-kb+j1 ), ka1 )
 
 1430            DO 900 l = ka - 1, kb - k + 1, -1
 
 1431               nrt = ( j2+l-1 ) / ka1
 
 1432               j1t = j2 - ( nrt-1 )*ka1
 
 1434     $            
CALL zlartv( nrt, ab( ka1-l+1, j1t-ka1+l ), inca,
 
 1435     $                         ab( ka1-l, j1t-ka1+l ), inca,
 
 1436     $                         rwork( m-kb+j1t ), work( m-kb+j1t ),
 
 1444               DO 910 j = j1, j2, ka1
 
 1445                  CALL zrot( nx, x( 1, j ), 1, x( 1, j-1 ), 1,
 
 1446     $                       rwork( m-kb+j ), dconjg( work( m-kb+j ) ) )
 
 1451         DO 940 k = 1, kb - 1
 
 1452            j2 = i + k + 1 - max( 1, k+i0-m+1 )*ka1
 
 1456            DO 930 l = kb - k, 1, -1
 
 1457               nrt = ( j2+l-1 ) / ka1
 
 1458               j1t = j2 - ( nrt-1 )*ka1
 
 1460     $            
CALL zlartv( nrt, ab( ka1-l+1, j1t-ka1+l ), inca,
 
 1461     $                         ab( ka1-l, j1t-ka1+l ), inca,
 
 1462     $                         rwork( j1t ), work( j1t ), ka1 )
 
 1467            DO 950 j = 2, i2 - ka
 
 1468               rwork( j ) = rwork( j+ka )
 
 1469               work( j ) = work( j+ka )