158 SUBROUTINE sorbdb6( M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2,
159 $ LDQ2, WORK, LWORK, INFO )
166 INTEGER INCX1, INCX2, INFO, LDQ1, LDQ2, LWORK, M1, M2,
170 REAL Q1(ldq1,*), Q2(ldq2,*), WORK(*), X1(*), X2(*)
176 REAL ALPHA, REALONE, REALZERO
177 parameter( alpha = 0.01e0, realone = 1.0e0,
179 REAL NEGONE, ONE, ZERO
180 parameter( negone = -1.0e0, one = 1.0e0, zero = 0.0e0 )
184 REAL EPS, NORM, NORM_NEW, SCL, SSQ
202 ELSE IF( m2 .LT. 0 )
THEN 204 ELSE IF( n .LT. 0 )
THEN 206 ELSE IF( incx1 .LT. 1 )
THEN 208 ELSE IF( incx2 .LT. 1 )
THEN 210 ELSE IF( ldq1 .LT. max( 1, m1 ) )
THEN 212 ELSE IF( ldq2 .LT. max( 1, m2 ) )
THEN 214 ELSE IF( lwork .LT. n )
THEN 218 IF( info .NE. 0 )
THEN 219 CALL xerbla(
'SORBDB6', -info )
223 eps = slamch(
'Precision' )
239 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
243 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
245 CALL sgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
247 CALL sgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
252 CALL slassq( m1, x1, incx1, scl, ssq )
253 CALL slassq( m2, x2, incx2, scl, ssq )
254 norm_new = scl * sqrt(ssq)
260 IF( norm_new .GE. alpha * norm )
THEN 264 IF( norm_new .LE. n * eps * norm )
THEN 265 DO ix = 1, 1 + (m1-1)*incx1, incx1
268 DO ix = 1, 1 + (m2-1)*incx2, incx2
285 CALL sgemv(
'C', m1, n, one, q1, ldq1, x1, incx1, zero, work,
289 CALL sgemv(
'C', m2, n, one, q2, ldq2, x2, incx2, one, work, 1 )
291 CALL sgemv(
'N', m1, n, negone, q1, ldq1, work, 1, one, x1,
293 CALL sgemv(
'N', m2, n, negone, q2, ldq2, work, 1, one, x2,
298 CALL slassq( m1, x1, incx1, scl, ssq )
299 CALL slassq( m2, x2, incx2, scl, ssq )
300 norm_new = scl * sqrt(ssq)
306 IF( norm_new .LT. alpha * norm )
THEN 307 DO ix = 1, 1 + (m1-1)*incx1, incx1
310 DO ix = 1, 1 + (m2-1)*incx2, incx2
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sorbdb6(M1, M2, N, X1, INCX1, X2, INCX2, Q1, LDQ1, Q2, LDQ2, WORK, LWORK, INFO)
SORBDB6
subroutine sgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SGEMV