138 SUBROUTINE sbdt01( M, N, KD, A, LDA, Q, LDQ, D, E, PT, LDPT, WORK,
146 INTEGER KD, LDA, LDPT, LDQ, M, N
150 REAL A( LDA, * ), D( * ), E( * ), PT( LDPT, * ),
151 $ q( ldq, * ), work( * )
158 parameter( zero = 0.0e+0, one = 1.0e+0 )
165 REAL SASUM, SLAMCH, SLANGE
166 EXTERNAL sasum, slamch, slange
172 INTRINSIC max, min, real
178 IF( m.LE.0 .OR. n.LE.0 )
THEN
190 IF( kd.NE.0 .AND. m.GE.n )
THEN
195 CALL scopy( m, a( 1, j ), 1, work, 1 )
197 work( m+i ) = d( i )*pt( i, j ) + e( i )*pt( i+1, j )
199 work( m+n ) = d( n )*pt( n, j )
200 CALL sgemv(
'No transpose', m, n, -one, q, ldq,
201 $ work( m+1 ), 1, one, work, 1 )
202 resid = max( resid, sasum( m, work, 1 ) )
204 ELSE IF( kd.LT.0 )
THEN
209 CALL scopy( m, a( 1, j ), 1, work, 1 )
211 work( m+i ) = d( i )*pt( i, j ) + e( i )*pt( i+1, j )
213 work( m+m ) = d( m )*pt( m, j )
214 CALL sgemv(
'No transpose', m, m, -one, q, ldq,
215 $ work( m+1 ), 1, one, work, 1 )
216 resid = max( resid, sasum( m, work, 1 ) )
223 CALL scopy( m, a( 1, j ), 1, work, 1 )
224 work( m+1 ) = d( 1 )*pt( 1, j )
226 work( m+i ) = e( i-1 )*pt( i-1, j ) +
229 CALL sgemv(
'No transpose', m, m, -one, q, ldq,
230 $ work( m+1 ), 1, one, work, 1 )
231 resid = max( resid, sasum( m, work, 1 ) )
240 CALL scopy( m, a( 1, j ), 1, work, 1 )
242 work( m+i ) = d( i )*pt( i, j )
244 CALL sgemv(
'No transpose', m, n, -one, q, ldq,
245 $ work( m+1 ), 1, one, work, 1 )
246 resid = max( resid, sasum( m, work, 1 ) )
250 CALL scopy( m, a( 1, j ), 1, work, 1 )
252 work( m+i ) = d( i )*pt( i, j )
254 CALL sgemv(
'No transpose', m, m, -one, q, ldq,
255 $ work( m+1 ), 1, one, work, 1 )
256 resid = max( resid, sasum( m, work, 1 ) )
263 anorm = slange(
'1', m, n, a, lda, work )
264 eps = slamch(
'Precision' )
266 IF( anorm.LE.zero )
THEN
270 IF( anorm.GE.resid )
THEN
271 resid = ( resid / anorm ) / ( real( n )*eps )
273 IF( anorm.LT.one )
THEN
274 resid = ( min( resid, real( n )*anorm ) / anorm ) /
277 resid = min( resid / anorm, real( n ) ) /
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
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