111 SUBROUTINE sbdt02( M, N, B, LDB, C, LDC, U, LDU, WORK, RESID )
118 INTEGER LDB, LDC, LDU, M, N
122 REAL B( LDB, * ), C( LDC, * ), U( LDU, * ),
130 parameter( zero = 0.0e+0, one = 1.0e+0 )
134 REAL BNORM, EPS, REALMN
137 REAL SASUM, SLAMCH, SLANGE
138 EXTERNAL sasum, slamch, slange
144 INTRINSIC max, min, real
151 IF( m.LE.0 .OR. n.LE.0 )
153 realmn = real( max( m, n ) )
154 eps = slamch(
'Precision' )
159 CALL scopy( m, b( 1, j ), 1, work, 1 )
160 CALL sgemv(
'No transpose', m, m, -one, u, ldu, c( 1, j ), 1,
162 resid = max( resid, sasum( m, work, 1 ) )
167 bnorm = slange(
'1', m, n, b, ldb, work )
169 IF( bnorm.LE.zero )
THEN
173 IF( bnorm.GE.resid )
THEN
174 resid = ( resid / bnorm ) / ( realmn*eps )
176 IF( bnorm.LT.one )
THEN
177 resid = ( min( resid, realmn*bnorm ) / bnorm ) /
180 resid = min( resid / bnorm, realmn ) / ( realmn*eps )
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine sbdt02(m, n, b, ldb, c, ldc, u, ldu, work, resid)
SBDT02