200 SUBROUTINE cunbdb1( M, P, Q, X11, LDX11, X21, LDX21, THETA, PHI,
201 $ TAUP1, TAUP2, TAUQ1, WORK, LWORK, INFO )
208 INTEGER INFO, LWORK, M, P, Q, LDX11, LDX21
211 REAL PHI(*), THETA(*)
212 COMPLEX TAUP1(*), TAUP2(*), TAUQ1(*), WORK(*),
213 $ x11(ldx11,*), x21(ldx21,*)
220 parameter( one = (1.0e0,0.0e0) )
224 INTEGER CHILDINFO, I, ILARF, IORBDB5, LLARF, LORBDB5,
237 INTRINSIC atan2, cos, max, sin, sqrt
244 lquery = lwork .EQ. -1
248 ELSE IF( p .LT. q .OR. m-p .LT. q )
THEN 250 ELSE IF( q .LT. 0 .OR. m-q .LT. q )
THEN 252 ELSE IF( ldx11 .LT. max( 1, p ) )
THEN 254 ELSE IF( ldx21 .LT. max( 1, m-p ) )
THEN 260 IF( info .EQ. 0 )
THEN 262 llarf = max( p-1, m-p-1, q-1 )
265 lworkopt = max( ilarf+llarf-1, iorbdb5+lorbdb5-1 )
268 IF( lwork .LT. lworkmin .AND. .NOT.lquery )
THEN 272 IF( info .NE. 0 )
THEN 273 CALL xerbla(
'CUNBDB1', -info )
275 ELSE IF( lquery )
THEN 283 CALL clarfgp( p-i+1, x11(i,i), x11(i+1,i), 1, taup1(i) )
284 CALL clarfgp( m-p-i+1, x21(i,i), x21(i+1,i), 1, taup2(i) )
285 theta(i) = atan2(
REAL( X21(I,I) ),
REAL( X11(I,I) ) )
290 CALL clarf(
'L', p-i+1, q-i, x11(i,i), 1, conjg(taup1(i)),
291 $ x11(i,i+1), ldx11, work(ilarf) )
292 CALL clarf(
'L', m-p-i+1, q-i, x21(i,i), 1, conjg(taup2(i)),
293 $ x21(i,i+1), ldx21, work(ilarf) )
296 CALL csrot( q-i, x11(i,i+1), ldx11, x21(i,i+1), ldx21, c,
298 CALL clacgv( q-i, x21(i,i+1), ldx21 )
299 CALL clarfgp( q-i, x21(i,i+1), x21(i,i+2), ldx21, tauq1(i) )
300 s =
REAL( X21(I,I+1) )
302 CALL clarf(
'R', p-i, q-i, x21(i,i+1), ldx21, tauq1(i),
303 $ x11(i+1,i+1), ldx11, work(ilarf) )
304 CALL clarf(
'R', m-p-i, q-i, x21(i,i+1), ldx21, tauq1(i),
305 $ x21(i+1,i+1), ldx21, work(ilarf) )
306 CALL clacgv( q-i, x21(i,i+1), ldx21 )
307 c = sqrt( scnrm2( p-i, x11(i+1,i+1), 1 )**2
308 $ + scnrm2( m-p-i, x21(i+1,i+1), 1 )**2 )
309 phi(i) = atan2( s, c )
310 CALL cunbdb5( p-i, m-p-i, q-i-1, x11(i+1,i+1), 1,
311 $ x21(i+1,i+1), 1, x11(i+1,i+2), ldx11,
312 $ x21(i+1,i+2), ldx21, work(iorbdb5), lorbdb5,
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clarf(SIDE, M, N, V, INCV, TAU, C, LDC, WORK)
CLARF applies an elementary reflector to a general rectangular matrix.
subroutine cunbdb1(M, P, Q, X11, LDX11, X21, LDX21, THETA, PHI, TAUP1, TAUP2, TAUQ1, WORK, LWORK, INFO)
CUNBDB1
subroutine clarfgp(N, ALPHA, X, INCX, TAU)
CLARFGP generates an elementary reflector (Householder matrix) with non-negative beta.
subroutine csrot(N, CX, INCX, CY, INCY, C, S)
CSROT
subroutine cunbdb5(M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2, LDQ2, WORK, LWORK, INFO)
CUNBDB5
subroutine clacgv(N, X, INCX)
CLACGV conjugates a complex vector.