208      SUBROUTINE zunbdb4( M, P, Q, X11, LDX11, X21, LDX21, THETA,
 
  210     $                    TAUP1, TAUP2, TAUQ1, PHANTOM, WORK, LWORK,
 
  218      INTEGER            INFO, LWORK, M, P, Q, LDX11, LDX21
 
  221      DOUBLE PRECISION   PHI(*), THETA(*)
 
  222      COMPLEX*16         PHANTOM(*), TAUP1(*), TAUP2(*), TAUQ1(*),
 
  223     $                   WORK(*), X11(LDX11,*), X21(LDX21,*)
 
  229      COMPLEX*16         NEGONE, ONE, ZERO
 
  230      PARAMETER          ( NEGONE = (-1.0d0,0.0d0), one = (1.0d0,0.0d0),
 
  231     $                     zero = (0.0d0,0.0d0) )
 
  234      DOUBLE PRECISION   C, S
 
  235      INTEGER            CHILDINFO, I, ILARF, IORBDB5, J, LLARF,
 
  236     $                   LORBDB5, LWORKMIN, LWORKOPT
 
  245      DOUBLE PRECISION   DZNRM2
 
  249      INTRINSIC          atan2, cos, max, sin, sqrt
 
  256      lquery = lwork .EQ. -1
 
  260      ELSE IF( p .LT. m-q .OR. m-p .LT. m-q ) 
THEN 
  262      ELSE IF( q .LT. m-q .OR. q .GT. m ) 
THEN 
  264      ELSE IF( ldx11 .LT. max( 1, p ) ) 
THEN 
  266      ELSE IF( ldx21 .LT. max( 1, m-p ) ) 
THEN 
  272      IF( info .EQ. 0 ) 
THEN 
  274         llarf = max( q-1, p-1, m-p-1 )
 
  277         lworkopt = ilarf + llarf - 1
 
  278         lworkopt = max( lworkopt, iorbdb5 + lorbdb5 - 1 )
 
  281         IF( lwork .LT. lworkmin .AND. .NOT.lquery ) 
THEN 
  285      IF( info .NE. 0 ) 
THEN 
  286         CALL xerbla( 
'ZUNBDB4', -info )
 
  288      ELSE IF( lquery ) 
THEN 
  300            CALL zunbdb5( p, m-p, q, phantom(1), 1, phantom(p+1), 1,
 
  301     $                    x11, ldx11, x21, ldx21, work(iorbdb5),
 
  302     $                    lorbdb5, childinfo )
 
  303            CALL zscal( p, negone, phantom(1), 1 )
 
  304            CALL zlarfgp( p, phantom(1), phantom(2), 1, taup1(1) )
 
  305            CALL zlarfgp( m-p, phantom(p+1), phantom(p+2), 1,
 
  307            theta(i) = atan2( dble( phantom(1) ), dble( phantom(p+1) ) )
 
  310            CALL zlarf1f( 
'L', p, q, phantom(1), 1, conjg(taup1(1)),
 
  312     $                    ldx11, work(ilarf) )
 
  313            CALL zlarf1f( 
'L', m-p, q, phantom(p+1), 1,
 
  315     $                    x21, ldx21, work(ilarf) )
 
  317            CALL zunbdb5( p-i+1, m-p-i+1, q-i+1, x11(i,i-1), 1,
 
  318     $                    x21(i,i-1), 1, x11(i,i), ldx11, x21(i,i),
 
  319     $                    ldx21, work(iorbdb5), lorbdb5, childinfo )
 
  320            CALL zscal( p-i+1, negone, x11(i,i-1), 1 )
 
  321            CALL zlarfgp( p-i+1, x11(i,i-1), x11(i+1,i-1), 1,
 
  323            CALL zlarfgp( m-p-i+1, x21(i,i-1), x21(i+1,i-1), 1,
 
  325            theta(i) = atan2( dble( x11(i,i-1) ), dble( x21(i,i-1) ) )
 
  328            CALL zlarf1f( 
'L', p-i+1, q-i+1, x11(i,i-1), 1,
 
  329     $                    conjg(taup1(i)), x11(i,i), ldx11,
 
  331            CALL zlarf1f( 
'L', m-p-i+1, q-i+1, x21(i,i-1), 1,
 
  332     $                    conjg(taup2(i)), x21(i,i), ldx21,
 
  336         CALL zdrot( q-i+1, x11(i,i), ldx11, x21(i,i), ldx21, s, -c )
 
  337         CALL zlacgv( q-i+1, x21(i,i), ldx21 )
 
  338         CALL zlarfgp( q-i+1, x21(i,i), x21(i,i+1), ldx21, tauq1(i) )
 
  340         CALL zlarf1f( 
'R', p-i, q-i+1, x21(i,i), ldx21, tauq1(i),
 
  341     $                 x11(i+1,i), ldx11, work(ilarf) )
 
  342         CALL zlarf1f( 
'R', m-p-i, q-i+1, x21(i,i), ldx21, tauq1(i),
 
  343     $                 x21(i+1,i), ldx21, work(ilarf) )
 
  344         CALL zlacgv( q-i+1, x21(i,i), ldx21 )
 
  345         IF( i .LT. m-q ) 
THEN 
  346            s = sqrt( dznrm2( p-i, x11(i+1,i), 1 )**2
 
  347     $              + dznrm2( m-p-i, x21(i+1,i), 1 )**2 )
 
  348            phi(i) = atan2( s, c )
 
  356         CALL zlacgv( q-i+1, x11(i,i), ldx11 )
 
  357         CALL zlarfgp( q-i+1, x11(i,i), x11(i,i+1), ldx11, tauq1(i) )
 
  358         CALL zlarf1f( 
'R', p-i, q-i+1, x11(i,i), ldx11, tauq1(i),
 
  359     $                 x11(i+1,i), ldx11, work(ilarf) )
 
  360         CALL zlarf1f( 
'R', q-p, q-i+1, x11(i,i), ldx11, tauq1(i),
 
  361     $                 x21(m-q+1,i), ldx21, work(ilarf) )
 
  362         CALL zlacgv( q-i+1, x11(i,i), ldx11 )
 
  368         CALL zlacgv( q-i+1, x21(m-q+i-p,i), ldx21 )
 
  369         CALL zlarfgp( q-i+1, x21(m-q+i-p,i), x21(m-q+i-p,i+1),
 
  372         CALL zlarf1f( 
'R', q-i, q-i+1, x21(m-q+i-p,i), ldx21,
 
  374     $                 x21(m-q+i-p+1,i), ldx21, work(ilarf) )
 
  375         CALL zlacgv( q-i+1, x21(m-q+i-p,i), ldx21 )