155 SUBROUTINE dorbdb6( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1,
157 $ LDQ2, WORK, LWORK, INFO )
164 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
168 DOUBLE PRECISION Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
174 DOUBLE PRECISION ALPHA, REALONE, REALZERO
175 PARAMETER ( ALPHA = 0.83d0, realone = 1.0d0,
177 DOUBLE PRECISION NEGONE, ONE, ZERO
178 PARAMETER ( NEGONE = -1.0d0, one = 1.0d0, zero = 0.0d0 )
182 DOUBLE PRECISION EPS, NORM, NORM_NEW, SCL, SSQ
185 DOUBLE PRECISION DLAMCH
200 ELSE IF( m2 .LT. 0 )
THEN
202 ELSE IF( n .LT. 0 )
THEN
204 ELSE IF( incx1 .LT. 1 )
THEN
206 ELSE IF( incx2 .LT. 1 )
THEN
208 ELSE IF( ldq1 .LT. max( 1, m1 ) )
THEN
210 ELSE IF( ldq2 .LT. max( 1, m2 ) )
THEN
212 ELSE IF( lwork .LT. n )
THEN
216 IF( info .NE. 0 )
THEN
217 CALL xerbla(
'DORBDB6', -info )
221 eps = dlamch(
'Precision' )
227 CALL dlassq( m1, x1, incx1, scl, ssq )
228 CALL dlassq( m2, x2, incx2, scl, ssq )
229 norm = scl * sqrt( ssq )
239 CALL dgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero,
244 CALL dgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work,
247 CALL dgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
249 CALL dgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
254 CALL dlassq( m1, x1, incx1, scl, ssq )
255 CALL dlassq( m2, x2, incx2, scl, ssq )
256 norm_new = scl * sqrt(ssq)
262 IF( norm_new .GE. alpha * norm )
THEN
266 IF( norm_new .LE. n * eps * norm )
THEN
267 DO ix = 1, 1 + (m1-1)*incx1, incx1
270 DO ix = 1, 1 + (m2-1)*incx2, incx2
287 CALL dgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero,
292 CALL dgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work,
295 CALL dgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
297 CALL dgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
302 CALL dlassq( m1, x1, incx1, scl, ssq )
303 CALL dlassq( m2, x2, incx2, scl, ssq )
304 norm_new = scl * sqrt(ssq)
310 IF( norm_new .LT. alpha * norm )
THEN
311 DO ix = 1, 1 + (m1-1)*incx1, incx1
314 DO ix = 1, 1 + (m2-1)*incx2, incx2