139 SUBROUTINE sbdt01( M, N, KD, A, LDA, Q, LDQ, D, E, PT, LDPT, WORK,
147 INTEGER KD, LDA, LDPT, LDQ, M, N
151 REAL A( LDA, * ), D( * ), E( * ), PT( LDPT, * ),
152 $ q( ldq, * ), work( * )
159 parameter( zero = 0.0e+0, one = 1.0e+0 )
166 REAL SASUM, SLAMCH, SLANGE
167 EXTERNAL sasum, slamch, slange
179 IF( m.LE.0 .OR. n.LE.0 )
THEN
191 IF( kd.NE.0 .AND. m.GE.n )
THEN
196 CALL scopy( m, a( 1, j ), 1, work, 1 )
198 work( m+i ) = d( i )*pt( i, j ) + e( i )*pt( i+1, j )
200 work( m+n ) = d( n )*pt( n, j )
201 CALL sgemv(
'No transpose', m, n, -one, q, ldq,
202 $ work( m+1 ), 1, one, work, 1 )
203 resid =
max( resid, sasum( m, work, 1 ) )
205 ELSE IF( kd.LT.0 )
THEN
210 CALL scopy( m, a( 1, j ), 1, work, 1 )
212 work( m+i ) = d( i )*pt( i, j ) + e( i )*pt( i+1, j )
214 work( m+m ) = d( m )*pt( m, j )
215 CALL sgemv(
'No transpose', m, m, -one, q, ldq,
216 $ work( m+1 ), 1, one, work, 1 )
217 resid =
max( resid, sasum( m, work, 1 ) )
224 CALL scopy( m, a( 1, j ), 1, work, 1 )
225 work( m+1 ) = d( 1 )*pt( 1, j )
227 work( m+i ) = e( i-1 )*pt( i-1, j ) +
230 CALL sgemv(
'No transpose', m, m, -one, q, ldq,
231 $ work( m+1 ), 1, one, work, 1 )
232 resid =
max( resid, sasum( m, work, 1 ) )
241 CALL scopy( m, a( 1, j ), 1, work, 1 )
243 work( m+i ) = d( i )*pt( i, j )
245 CALL sgemv(
'No transpose', m, n, -one, q, ldq,
246 $ work( m+1 ), 1, one, work, 1 )
247 resid =
max( resid, sasum( m, work, 1 ) )
251 CALL scopy( m, a( 1, j ), 1, work, 1 )
253 work( m+i ) = d( i )*pt( i, j )
255 CALL sgemv( 'no transpose
', M, M, -ONE, Q, LDQ,
256 $ WORK( M+1 ), 1, ONE, WORK, 1 )
257 RESID = MAX( RESID, SASUM( M, WORK, 1 ) )
264 ANORM = SLANGE( '1
', M, N, A, LDA, WORK )
265 EPS = SLAMCH( 'precision
' )
267.LE.
IF( ANORMZERO ) THEN
271.GE.
IF( ANORMRESID ) THEN
272 RESID = ( RESID / ANORM ) / ( REAL( N )*EPS )
274.LT.
IF( ANORMONE ) THEN
275 RESID = ( MIN( RESID, REAL( N )*ANORM ) / ANORM ) /
278 RESID = MIN( RESID / ANORM, REAL( N ) ) /
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine sbdt01(m, n, kd, a, lda, q, ldq, d, e, pt, ldpt, work, resid)
SBDT01