152 SUBROUTINE zunbdb6( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2,
153 $ LDQ2, WORK, LWORK, INFO )
160 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
164 COMPLEX*16 Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
170 DOUBLE PRECISION ALPHASQ, REALONE, REALZERO
171 parameter( alphasq = 0.01d0, realone = 1.0d0,
173 COMPLEX*16 NEGONE, ONE, ZERO
174 parameter( negone = (-1.0d0,0.0d0), one = (1.0d0,0.0d0),
175 $ zero = (0.0d0,0.0d0) )
179 DOUBLE PRECISION NORMSQ1, NORMSQ2, , SCL2, SSQ1, SSQ2
194 ELSE IF( m2 .LT. 0 )
THEN
196 ELSE IF( n .LT. 0 )
THEN
198 ELSE IF( incx1 .LT. 1 )
THEN
200 ELSE IF( incx2 .LT. 1 )
THEN
202 ELSE IF( ldq1 .LT.
max( 1, m1 ) )
THEN
204 ELSE IF( ldq2 .LT.
max( 1, m2 ) )
THEN
206 ELSE IF( lwork .LT. n )
THEN
210 IF( info .NE. 0 )
THEN
211 CALL xerbla(
'ZUNBDB6', -info )
220 CALL zlassq( m1, x1, incx1, scl1, ssq1 )
223 CALL zlassq( m2, x2, incx2, scl2, ssq2 )
224 normsq1 = scl1**2*ssq1 + scl2**2*ssq2
231 CALL zgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
235 CALL zgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
237 CALL zgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
239 CALL zgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
244 CALL zlassq( m1, x1, incx1, scl1, ssq1 )
247 CALL zlassq( m2, x2, incx2, scl2, ssq2 )
248 normsq2 = scl1**2*ssq1 + scl2**2*ssq2
254 IF( normsq2 .GE. alphasq*normsq1 )
THEN
258 IF( normsq2 .EQ. zero )
THEN
273 CALL zgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
277 CALL zgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
279 CALL zgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
281 CALL zgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
286 CALL zlassq( m1, x1, incx1, scl1, ssq1 )
289 CALL zlassq( m1, x1, incx1, scl1, ssq1 )
290 normsq2 = scl1**2*ssq1 + scl2**2*ssq2
296 IF( normsq2 .LT. alphasq*normsq1 )
THEN