155 SUBROUTINE sorbdb6( 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 REAL Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
174 REAL ALPHA, REALONE, REALZERO
175 PARAMETER ( ALPHA = 0.83e0, realone = 1.0e0,
177 REAL NEGONE, ONE, ZERO
178 PARAMETER ( NEGONE = -1.0e0, one = 1.0e0, zero = 0.0e0 )
182 REAL EPS, NORM, NORM_NEW, SCL, SSQ
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(
'SORBDB6', -info )
221 eps = slamch(
'Precision' )
227 CALL slassq( m1, x1, incx1, scl, ssq )
228 CALL slassq( m2, x2, incx2, scl, ssq )
229 norm = scl * sqrt( ssq )
239 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero,
244 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work,
247 CALL sgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
249 CALL sgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
254 CALL slassq( m1, x1, incx1, scl, ssq )
255 CALL slassq( m2, x2, incx2, scl, ssq )
256 norm_new = scl * sqrt(ssq)
262 IF( norm_new .GE. alpha * norm )
THEN
266 IF( norm_new .LE. real( n ) * eps * norm )
THEN
267 DO ix = 1, 1 + (m1-1)*incx1, incx1
270 DO ix = 1, 1 + (m2-1)*incx2, incx2
287 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero,
292 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work,
295 CALL sgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
297 CALL sgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
302 CALL slassq( m1, x1, incx1, scl, ssq )
303 CALL slassq( 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