157 SUBROUTINE dorbdb6( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2,
158 $ LDQ2, WORK, LWORK, INFO )
165 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
169 DOUBLE PRECISION Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
175 DOUBLE PRECISION ALPHA, REALONE, REALZERO
176 parameter( alpha = 0.83d0, realone = 1.0d0,
178 DOUBLE PRECISION NEGONE, ONE, ZERO
179 parameter( negone = -1.0d0, one = 1.0d0, zero = 0.0d0 )
183 DOUBLE PRECISION EPS, NORM, NORM_NEW, SCL, SSQ
186 DOUBLE PRECISION DLAMCH
201 ELSE IF( m2 .LT. 0 )
THEN
203 ELSE IF( n .LT. 0 )
THEN
205 ELSE IF( incx1 .LT. 1 )
THEN
207 ELSE IF( incx2 .LT. 1 )
THEN
209 ELSE IF( ldq1 .LT. max( 1, m1 ) )
THEN
211 ELSE IF( ldq2 .LT. max( 1, m2 ) )
THEN
213 ELSE IF( lwork .LT. n )
THEN
217 IF( info .NE. 0 )
THEN
218 CALL xerbla(
'DORBDB6', -info )
222 eps = dlamch(
'Precision' )
228 CALL dlassq( m1, x1, incx1, scl, ssq )
229 CALL dlassq( m2, x2, incx2, scl, ssq )
230 norm = scl * sqrt( ssq )
240 CALL dgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
244 CALL dgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
246 CALL dgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
248 CALL dgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
253 CALL dlassq( m1, x1, incx1, scl, ssq )
254 CALL dlassq( m2, x2, incx2, scl, ssq )
255 norm_new = scl * sqrt(ssq)
261 IF( norm_new .GE. alpha * norm )
THEN
265 IF( norm_new .LE. n * eps * norm )
THEN
266 DO ix = 1, 1 + (m1-1)*incx1, incx1
269 DO ix = 1, 1 + (m2-1)*incx2, incx2
286 CALL dgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
290 CALL dgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
292 CALL dgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
294 CALL dgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
299 CALL dlassq( m1, x1, incx1, scl, ssq )
300 CALL dlassq( m2, x2, incx2, scl, ssq )
301 norm_new = scl * sqrt(ssq)
307 IF( norm_new .LT. alpha * norm )
THEN
308 DO ix = 1, 1 + (m1-1)*incx1, incx1
311 DO ix = 1, 1 + (m2-1)*incx2, incx2
subroutine xerbla(srname, info)
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV
subroutine dlassq(n, x, incx, scale, sumsq)
DLASSQ updates a sum of squares represented in scaled form.
subroutine dorbdb6(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
DORBDB6