150 REAL FUNCTION CQRT17( TRANS, IRESID, M, N, NRHS, A,
151 $ LDA, X, LDX, B, LDB, C, WORK, LWORK )
160 INTEGER iresid, lda, ldb, ldx, lwork, m, n, nrhs
163 COMPLEX a( lda, * ), b( ldb, * ), c( ldb, * ),
164 $ work( lwork ), x( ldx, * )
171 parameter( zero = 0.0e0, one = 1.0e0 )
174 INTEGER info, iscl, ncols, nrows
175 REAL bignum, err, norma, normb, normrs, smlnum
189 INTRINSIC cmplx, max, real
195 IF(
lsame( trans,
'N' ) )
THEN
198 ELSE IF(
lsame( trans,
'C' ) )
THEN
202 CALL xerbla(
'CQRT17', 1 )
206 IF( lwork.LT.ncols*nrhs )
THEN
207 CALL xerbla(
'CQRT17', 13 )
211 IF( m.LE.0 .OR. n.LE.0 .OR. nrhs.LE.0 )
214 norma =
clange(
'One-norm', m, n, a, lda, rwork )
215 smlnum =
slamch(
'Safe minimum' ) /
slamch(
'Precision' )
216 bignum = one / smlnum
221 CALL clacpy(
'All', nrows, nrhs, b, ldb, c, ldb )
222 CALL cgemm( trans,
'No transpose', nrows, nrhs, ncols,
223 $ cmplx( -one ), a, lda, x, ldx, cmplx( one ), c, ldb )
224 normrs =
clange(
'Max', nrows, nrhs, c, ldb, rwork )
225 IF( normrs.GT.smlnum )
THEN
227 CALL clascl(
'General', 0, 0, normrs, one, nrows, nrhs, c, ldb,
233 CALL cgemm(
'Conjugate transpose', trans, nrhs, ncols, nrows,
234 $ cmplx( one ), c, ldb, a, lda, cmplx( zero ), work,
239 err =
clange(
'One-norm', nrhs, ncols, work, nrhs, rwork )
246 IF( iresid.EQ.1 )
THEN
247 normb =
clange(
'One-norm', nrows, nrhs, b, ldb, rwork )
255 cqrt17 = err / (
slamch(
'Epsilon' )*real( max( m, n, nrhs ) ) )