154 SUBROUTINE dorbdb5( 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 DOUBLE PRECISION Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
172 DOUBLE PRECISION REALZERO
173 parameter( realzero = 0.0d0 )
174 DOUBLE PRECISION ONE, ZERO
175 parameter( one = 1.0d0, zero = 0.0d0 )
178 INTEGER CHILDINFO, I, J
179 DOUBLE PRECISION EPS, NORM, SCL, SSQ
185 DOUBLE PRECISION DLAMCH, DNRM2
186 EXTERNAL dlamch, dnrm2
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(
'DORBDB5', -info )
219 eps = dlamch(
'Precision' )
225 CALL dlassq( m1, x1, incx1, scl, ssq )
226 CALL dlassq( m2, x2, incx2, scl, ssq )
227 norm = scl * sqrt( ssq )
229 IF( norm .GT. n * eps )
THEN
235 CALL dscal( m1, one / norm, x1, incx1 )
236 CALL dscal( m2, one / norm, x2, incx2 )
237 CALL dorbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
238 $ ldq2, work, lwork, childinfo )
242 IF( dnrm2(m1,x1,incx1) .NE. realzero
243 $ .OR. dnrm2(m2,x2,incx2) .NE. realzero )
THEN
259 CALL dorbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
260 $ ldq2, work, lwork, childinfo )
261 IF( dnrm2(m1,x1,incx1) .NE. realzero
262 $ .OR. dnrm2(m2,x2,incx2) .NE. realzero )
THEN
278 CALL dorbdb6( m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2,
279 $ ldq2, work, lwork, childinfo )
280 IF( dnrm2(m1,x1,incx1) .NE. realzero
281 $ .OR. dnrm2(m2,x2,incx2) .NE. realzero )
THEN
subroutine xerbla(srname, info)
subroutine dlassq(n, x, incx, scale, sumsq)
DLASSQ updates a sum of squares represented in scaled form.
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine dorbdb5(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
DORBDB5
subroutine dorbdb6(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
DORBDB6