154 SUBROUTINE zunbdb5( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2,
155 $ LDQ2, WORK, LWORK, INFO )
162 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
166 COMPLEX*16 Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
172 DOUBLE PRECISION REALZERO
173 parameter( realzero = 0.0d0 )
175 parameter( one = (1.0d0,0.0d0), zero = (0.0d0,0.0d0) )
178 INTEGER CHILDINFO, I, J
179 DOUBLE PRECISION EPS, NORM, SCL, SSQ
185 DOUBLE PRECISION DLAMCH, DZNRM2
186 EXTERNAL dlamch, dznrm2
198 ELSE IF( m2 .LT. 0 )
THEN
200 ELSE IF( n .LT. 0 )
THEN
202 ELSE IF( incx1 .LT. 1 )
THEN
204 ELSE IF( incx2 .LT. 1 )
THEN
206 ELSE IF( ldq1 .LT. max( 1, m1 ) )
THEN
208 ELSE IF( ldq2 .LT. max( 1, m2 ) )
THEN
210 ELSE IF( lwork .LT. n )
THEN
214 IF( info .NE. 0 )
THEN
215 CALL xerbla(
'ZUNBDB5', -info )
219 eps = dlamch(
'Precision' )
225 CALL zlassq( m1, x1, incx1, scl, ssq )
226 CALL zlassq( m2, x2, incx2, scl, ssq )
227 norm = scl * sqrt( ssq )
229 IF( norm .GT. n * eps )
THEN
235 CALL zscal( m1, one / norm, x1, incx1 )
236 CALL zscal( m2, one / norm, x2, incx2 )
237 CALL zunbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
238 $ ldq2, work, lwork, childinfo )
242 IF( dznrm2(m1,x1,incx1) .NE. realzero
243 $ .OR. dznrm2(m2,x2,incx2) .NE. realzero )
THEN
259 CALL zunbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
260 $ ldq2, work, lwork, childinfo )
261 IF( dznrm2(m1,x1,incx1) .NE. realzero
262 $ .OR. dznrm2(m2,x2,incx2) .NE. realzero )
THEN
278 CALL zunbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
279 $ ldq2, work, lwork, childinfo )
280 IF( dznrm2(m1,x1,incx1) .NE. realzero
281 $ .OR. dznrm2(m2,x2,incx2) .NE. realzero )
THEN
subroutine xerbla(srname, info)
subroutine zlassq(n, x, incx, scale, sumsq)
ZLASSQ updates a sum of squares represented in scaled form.
subroutine zscal(n, za, zx, incx)
ZSCAL
subroutine zunbdb5(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
ZUNBDB5
subroutine zunbdb6(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
ZUNBDB6