147 SUBROUTINE cqrt15( SCALE, RKSEL, M, N, NRHS, A, LDA, B, LDB, S,
148 $ RANK, NORMA, NORMB, ISEED, WORK, LWORK )
155 INTEGER LDA, LDB, LWORK, M, N, NRHS, RANK, RKSEL, SCALE
161 COMPLEX A( LDA, * ), B( LDB, * ), WORK( LWORK )
167 REAL ZERO, ONE, TWO, SVMIN
168 parameter( zero = 0.0e+0, one = 1.0e+0, two = 2.0e+0,
171 parameter( czero = ( 0.0e+0, 0.0e+0 ),
172 $ cone = ( 1.0e+0, 0.0e+0 ) )
176 REAL BIGNUM, EPS, SMLNUM, TEMP
182 REAL CLANGE, SASUM, SCNRM2, SLAMCH, SLARND
183 EXTERNAL clange, sasum, scnrm2, slamch, slarnd
195 IF( lwork.LT.
max( m+mn, mn*nrhs, 2*n+m ) )
THEN
196 CALL xerbla(
'CQRT15', 16 )
200 smlnum = slamch(
'Safe minimum' )
201 bignum = one / smlnum
202 CALL slabad( smlnum, bignum )
203 eps = slamch(
'Epsilon' )
204 smlnum = ( smlnum / eps ) / eps
205 bignum = one / smlnum
209 IF( rksel.EQ.1 )
THEN
211 ELSE IF( rksel.EQ.2 )
THEN
213 DO 10 j = rank + 1, mn
217 CALL xerbla(
'CQRT15', 2 )
227 temp = slarnd( 1, iseed )
228 IF( temp.GT.svmin )
THEN
234 CALL slaord(
'Decreasing', rank, s, 1 )
238 CALL clarnv( 2, iseed, m, work )
239 CALL csscal( m, one / scnrm2( m, work, 1 ), work, 1 )
240 CALL claset(
'Full', m, rank, czero, cone, a, lda )
241 CALL clarf(
'Left', m, rank, work, 1,
cmplx( two ), a, lda,
248 CALL clarnv( 2, iseed, rank*nrhs, work )
249 CALL cgemm( 'no transpose
', 'no transpose
', M, NRHS, RANK,
250 $ CONE, A, LDA, WORK, RANK, CZERO, B, LDB )
257 CALL CSSCAL( M, S( J ), A( 1, J ), 1 )
260 $ CALL CLASET( 'full
', M, N-RANK, CZERO, CZERO,
261 $ A( 1, RANK+1 ), LDA )
262 CALL CLAROR( 'right
', 'no initialization
', M, N, A, LDA, ISEED,
274 CALL CLASET( 'full
', M, N, CZERO, CZERO, A, LDA )
275 CALL CLASET( 'full
', M, NRHS, CZERO, CZERO, B, LDB )
281.NE.
IF( SCALE1 ) THEN
282 NORMA = CLANGE( 'max', M, N, A, LDA, DUMMY )
283.NE.
IF( NORMAZERO ) THEN
284.EQ.
IF( SCALE2 ) THEN
288 CALL CLASCL( 'general
', 0, 0, NORMA, BIGNUM, M, N, A,
290 CALL SLASCL( 'general
', 0, 0, NORMA, BIGNUM, MN, 1, S,
292 CALL CLASCL( 'general
', 0, 0, NORMA, BIGNUM, M, NRHS, B,
294.EQ.
ELSE IF( SCALE3 ) THEN
298 CALL CLASCL( 'general
', 0, 0, NORMA, SMLNUM, M, N, A,
300 CALL SLASCL( 'general
', 0, 0, NORMA, SMLNUM, MN, 1, S,
302 CALL CLASCL( 'general
', 0, 0, NORMA, SMLNUM, M, NRHS, B,
305 CALL XERBLA( 'cqrt15', 1 )
311 NORMA = SASUM( MN, S, 1 )
312 NORMB = CLANGE( 'one-
norm', M, NRHS, B, LDB, DUMMY )
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine slabad(small, large)
SLABAD
subroutine slascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
SLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine xerbla(srname, info)
XERBLA
subroutine clascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
CLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine claset(uplo, m, n, alpha, beta, a, lda)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine clarnv(idist, iseed, n, x)
CLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine clarf(side, m, n, v, incv, tau, c, ldc, work)
CLARF applies an elementary reflector to a general rectangular matrix.
subroutine csscal(n, sa, cx, incx)
CSSCAL
subroutine cgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
CGEMM
subroutine cqrt15(scale, rksel, m, n, nrhs, a, lda, b, ldb, s, rank, norma, normb, iseed, work, lwork)
CQRT15
subroutine claror(side, init, m, n, a, lda, iseed, x, info)
CLAROR
subroutine slaord(job, n, x, incx)
SLAORD