118 SUBROUTINE cbdt02( M, N, B, LDB, C, LDC, U, LDU, WORK, RWORK,
126 INTEGER LDB, LDC, LDU, M, N
131 COMPLEX B( LDB, * ), C( LDC, * ), U( LDU, * ),
139 PARAMETER ( zero = 0.0e+0, one = 1.0e+0 )
146 REAL CLANGE, SCASUM, SLAMCH
147 EXTERNAL clange, scasum, slamch
160 IF( m.LE.0 .OR. n.LE.0 )
162 realmn = real(
max( m, n ) )
163 eps = slamch(
'Precision' )
168 CALL ccopy( m, b( 1, j ), 1, work, 1 )
169 CALL cgemv( 'no transpose
', M, M, -CMPLX( ONE ), U, LDU,
170 $ C( 1, J ), 1, CMPLX( ONE ), WORK, 1 )
171 RESID = MAX( RESID, SCASUM( M, WORK, 1 ) )
176 BNORM = CLANGE( '1
', M, N, B, LDB, RWORK )
178.LE.
IF( BNORMZERO ) THEN
182.GE.
IF( BNORMRESID ) THEN
183 RESID = ( RESID / BNORM ) / ( REALMN*EPS )
185.LT.
IF( BNORMONE ) THEN
186 RESID = ( MIN( RESID, REALMN*BNORM ) / BNORM ) /
189 RESID = MIN( RESID / BNORM, REALMN ) / ( REALMN*EPS )
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