117 SUBROUTINE cbdt02( M, N, B, LDB, C, LDC, U, LDU, WORK, RWORK,
125 INTEGER LDB, LDC, LDU, M, N
130 COMPLEX B( LDB, * ), C( LDC, * ), U( LDU, * ),
138 parameter( zero = 0.0e+0, one = 1.0e+0 )
142 REAL BNORM, EPS, REALMN
145 REAL CLANGE, SCASUM, SLAMCH
146 EXTERNAL clange, scasum, slamch
152 INTRINSIC cmplx, max, min, real
159 IF( m.LE.0 .OR. n.LE.0 )
161 realmn = real( max( m, n ) )
162 eps = slamch(
'Precision' )
167 CALL ccopy( m, b( 1, j ), 1, work, 1 )
168 CALL cgemv(
'No transpose', m, m, -cmplx( one ), u, ldu,
169 $ c( 1, j ), 1, cmplx( one ), work, 1 )
170 resid = max( resid, scasum( m, work, 1 ) )
175 bnorm = clange(
'1', m, n, b, ldb, rwork )
177 IF( bnorm.LE.zero )
THEN
181 IF( bnorm.GE.resid )
THEN
182 resid = ( resid / bnorm ) / ( realmn*eps )
184 IF( bnorm.LT.one )
THEN
185 resid = ( min( resid, realmn*bnorm ) / bnorm ) /
188 resid = min( resid / bnorm, realmn ) / ( realmn*eps )
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CGEMV
subroutine cbdt02(M, N, B, LDB, C, LDC, U, LDU, WORK, RWORK, RESID)
CBDT02