152 SUBROUTINE sorbdb6( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2,
153 $ LDQ2, WORK, LWORK, INFO )
160 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
164 REAL Q1(LDQ1,*), Q2(LDQ2,*), WORK(*), X1(*), X2(*)
170 REAL ALPHASQ, REALONE, REALZERO
171 parameter( alphasq = 0.01e0, realone = 1.0e0,
173 REAL NEGONE, ONE, ZERO
174 parameter( negone = -1.0e0, one = 1.0e0, zero = 0.0e0 )
178 REAL NORMSQ1, NORMSQ2, SCL1, SCL2, SSQ1, SSQ2
193 ELSE IF( m2 .LT. 0 )
THEN
195 ELSE IF( n .LT. 0 )
THEN
197 ELSE IF( incx1 .LT. 1 )
THEN
199 ELSE IF( incx2 .LT. 1 )
THEN
201 ELSE IF( ldq1 .LT.
max( 1, m1 ) )
THEN
203 ELSE IF( ldq2 .LT.
max( 1, m2 ) )
THEN
205 ELSE IF( lwork .LT. n )
THEN
209 IF( info .NE. 0 )
THEN
210 CALL xerbla(
'SORBDB6', -info )
219 CALL slassq( m1, x1, incx1, scl1, ssq1 )
222 CALL slassq( m2, x2, incx2, scl2, ssq2 )
223 normsq1 = scl1**2*ssq1 + scl2**2*ssq2
230 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
234 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
236 CALL sgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
238 CALL sgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
243 CALL slassq( m1, x1, incx1, scl1, ssq1 )
246 CALL slassq( m2, x2, incx2, scl2, ssq2 )
247 normsq2 = scl1**2*ssq1 + scl2**2*ssq2
253 IF( normsq2 .GE. alphasq*normsq1 )
THEN
257 IF( normsq2 .EQ. zero )
THEN
272 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
276 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
278 CALL sgemv( 'n
', M1, N, NEGONE, Q1, LDQ1, WORK, 1, ONE, X1,
280 CALL SGEMV( 'n
', M2, N, NEGONE, Q2, LDQ2, WORK, 1, ONE, X2,
285 CALL SLASSQ( M1, X1, INCX1, SCL1, SSQ1 )
288 CALL SLASSQ( M1, X1, INCX1, SCL1, SSQ1 )
289 NORMSQ2 = SCL1**2*SSQ1 + SCL2**2*SSQ2
295.LT.
IF( NORMSQ2 ALPHASQ*NORMSQ1 ) THEN
subroutine sorbdb6(m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2, work, lwork, info)
SORBDB6