201 SUBROUTINE zunbdb1( M, P, Q, X11, LDX11, X21, LDX21, THETA, PHI,
202 $ TAUP1, TAUP2, TAUQ1, WORK, LWORK, INFO )
209 INTEGER INFO, LWORK, M, P, Q, LDX11, LDX21
212 DOUBLE PRECISION PHI(*), THETA(*)
213 COMPLEX*16 TAUP1(*), TAUP2(*), TAUQ1(*), WORK(*),
214 $ x11(ldx11,*), x21(ldx21,*)
221 parameter( one = (1.0d0,0.0d0) )
224 DOUBLE PRECISION C, S
225 INTEGER CHILDINFO, I, ILARF, IORBDB5, LLARF, LORBDB5,
234 DOUBLE PRECISION DZNRM2
238 INTRINSIC atan2, cos, max, sin, sqrt
245 lquery = lwork .EQ. -1
249 ELSE IF( p .LT. q .OR. m-p .LT. q )
THEN
251 ELSE IF( q .LT. 0 .OR. m-q .LT. q )
THEN
253 ELSE IF( ldx11 .LT. max( 1, p ) )
THEN
255 ELSE IF( ldx21 .LT. max( 1, m-p ) )
THEN
261 IF( info .EQ. 0 )
THEN
263 llarf = max( p-1, m-p-1, q-1 )
266 lworkopt = max( ilarf+llarf-1, iorbdb5+lorbdb5-1 )
269 IF( lwork .LT. lworkmin .AND. .NOT.lquery )
THEN
273 IF( info .NE. 0 )
THEN
274 CALL xerbla(
'ZUNBDB1', -info )
276 ELSE IF( lquery )
THEN
284 CALL zlarfgp( p-i+1, x11(i,i), x11(i+1,i), 1, taup1(i) )
285 CALL zlarfgp( m-p-i+1, x21(i,i), x21(i+1,i), 1, taup2(i) )
286 theta(i) = atan2( dble( x21(i,i) ), dble( x11(i,i) ) )
291 CALL zlarf(
'L', p-i+1, q-i, x11(i,i), 1, dconjg(taup1(i)),
292 $ x11(i,i+1), ldx11, work(ilarf) )
293 CALL zlarf(
'L', m-p-i+1, q-i, x21(i,i), 1, dconjg(taup2(i)),
294 $ x21(i,i+1), ldx21, work(ilarf) )
297 CALL zdrot( q-i, x11(i,i+1), ldx11, x21(i,i+1), ldx21, c,
299 CALL zlacgv( q-i, x21(i,i+1), ldx21 )
300 CALL zlarfgp( q-i, x21(i,i+1), x21(i,i+2), ldx21, tauq1(i) )
301 s = dble( x21(i,i+1) )
303 CALL zlarf(
'R', p-i, q-i, x21(i,i+1), ldx21, tauq1(i),
304 $ x11(i+1,i+1), ldx11, work(ilarf) )
305 CALL zlarf(
'R', m-p-i, q-i, x21(i,i+1), ldx21, tauq1(i),
306 $ x21(i+1,i+1), ldx21, work(ilarf) )
307 CALL zlacgv( q-i, x21(i,i+1), ldx21 )
308 c = sqrt( dznrm2( p-i, x11(i+1,i+1), 1 )**2
309 $ + dznrm2( m-p-i, x21(i+1,i+1), 1 )**2 )
310 phi(i) = atan2( s, c )
311 CALL zunbdb5( p-i, m-p-i, q-i-1, x11(i+1,i+1), 1,
312 $ x21(i+1,i+1), 1, x11(i+1,i+2), ldx11,
313 $ x21(i+1,i+2), ldx21, work(iorbdb5), lorbdb5,
subroutine xerbla(srname, info)
subroutine zlacgv(n, x, incx)
ZLACGV conjugates a complex vector.
subroutine zlarf(side, m, n, v, incv, tau, c, ldc, work)
ZLARF applies an elementary reflector to a general rectangular matrix.
subroutine zlarfgp(n, alpha, x, incx, tau)
ZLARFGP generates an elementary reflector (Householder matrix) with non-negative beta.
subroutine zdrot(n, zx, incx, zy, incy, c, s)
ZDROT
subroutine zunbdb1(m, p, q, x11, ldx11, x21, ldx21, theta, phi, taup1, taup2, tauq1, work, lwork, info)
ZUNBDB1
subroutine zunbdb5(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
ZUNBDB5