151 DOUBLE PRECISION FUNCTION zqrt17( TRANS, IRESID, M, N, NRHS, A,
152 $ LDA, X, LDX, B, LDB, C, WORK, LWORK )
160 INTEGER iresid, lda, ldb, ldx, lwork, m, n, nrhs
163 COMPLEX*16 a( lda, * ), b( ldb, * ), c( ldb, * ),
164 $ work( lwork ), x( ldx, * )
170 DOUBLE PRECISION zero, one
171 parameter( zero = 0.0d0, one = 1.0d0 )
174 INTEGER info, iscl, ncols, nrows
175 DOUBLE PRECISION err, norma, normb, normrs, smlnum
178 DOUBLE PRECISION rwork( 1 )
189 INTRINSIC dble, dcmplx,
max
195 IF(
lsame( trans,
'N' ) )
THEN
198 ELSE IF(
lsame( trans,
'C' ) )
THEN
202 CALL xerbla(
'ZQRT17', 1 )
206 IF( lwork.LT.ncols*nrhs )
THEN
207 CALL xerbla(
'ZQRT17', 13 )
211 IF( m.LE.0 .OR. n.LE.0 .OR. nrhs.LE.0 )
214 norma =
zlange(
'One-norm', m, n, a, lda, rwork )
215 smlnum =
dlamch(
'Safe minimum' ) /
dlamch( 'precision
' )
220 CALL ZLACPY( 'all
', NROWS, NRHS, B, LDB, C, LDB )
221 CALL ZGEMM( TRANS, 'no transpose
', NROWS, NRHS, NCOLS,
222 $ DCMPLX( -ONE ), A, LDA, X, LDX, DCMPLX( ONE ), C,
224 NORMRS = ZLANGE( 'max', NROWS, NRHS, C, LDB, RWORK )
225.GT.
IF( NORMRSSMLNUM ) THEN
227 CALL ZLASCL( 'general
', 0, 0, NORMRS, ONE, NROWS, NRHS, C, LDB,
233 CALL ZGEMM( 'conjugate transpose
', TRANS, NRHS, NCOLS, NROWS,
234 $ DCMPLX( ONE ), C, LDB, A, LDA, DCMPLX( ZERO ), WORK,
239 ERR = ZLANGE( 'one-
norm', NRHS, NCOLS, WORK, NRHS, RWORK )
246.EQ.
IF( IRESID1 ) THEN
247 NORMB = ZLANGE( 'one-
norm', NROWS, NRHS, B, LDB, RWORK )
255 ZQRT17 = ERR / ( DLAMCH( 'epsilon
' )*DBLE( MAX( M, N, NRHS ) ) )
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine xerbla(srname, info)
XERBLA
logical function lsame(ca, cb)
LSAME
double precision function zlange(norm, m, n, a, lda, work)
ZLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine zlascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
ZLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
double precision function zqrt17(trans, iresid, m, n, nrhs, a, lda, x, ldx, b, ldb, c, work, lwork)
ZQRT17
double precision function dlamch(cmach)
DLAMCH