111 SUBROUTINE dbdt02( M, N, B, LDB, C, LDC, U, LDU, WORK, RESID )
118 INTEGER LDB, LDC, LDU, M, N
119 DOUBLE PRECISION RESID
122 DOUBLE PRECISION B( LDB, * ), C( LDC, * ), U( LDU, * ),
129 DOUBLE PRECISION ZERO, ONE
130 parameter( zero = 0.0d+0, one = 1.0d+0 )
134 DOUBLE PRECISION BNORM, EPS, REALMN
137 DOUBLE PRECISION DASUM, DLAMCH, DLANGE
138 EXTERNAL dasum, dlamch, dlange
144 INTRINSIC dble, max, min
151 IF( m.LE.0 .OR. n.LE.0 )
153 realmn = dble( max( m, n ) )
154 eps = dlamch(
'Precision' )
159 CALL dcopy( m, b( 1, j ), 1, work, 1 )
160 CALL dgemv(
'No transpose', m, m, -one, u, ldu, c( 1, j ), 1,
162 resid = max( resid, dasum( m, work, 1 ) )
167 bnorm = dlange(
'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 dbdt02(m, n, b, ldb, c, ldc, u, ldu, work, resid)
DBDT02
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV