156 SUBROUTINE cdrvpo( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
157 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
166 INTEGER NMAX, NN, NOUT, NRHS
172 REAL RWORK( * ), S( * )
173 COMPLEX A( * ), AFAC( * ), ASAV( * ), B( * ),
174 $ bsav( * ), work( * ), x( * ), xact( * )
181 PARAMETER ( = 1.0e+0, zero = 0.0e+0 )
183 parameter( ntypes = 9 )
185 parameter( ntests = 6 )
188 LOGICAL EQUIL, NOFACT, PREFAC, ZEROT
189 CHARACTER DIST, EQUED, FACT,
TYPE, UPLO, XTYPE
191 INTEGER I, IEQUED, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
192 $ izero, k, k1, kl, ku, lda, mode, n, nb, nbmin,
193 $ nerrs, nfact, nfail, nimat, nrun, nt
194 REAL AINVNM, AMAX, ANORM, CNDNUM, RCOND, RCONDC,
198 CHARACTER EQUEDS( 2 ), FACTS( 3 ), UPLOS( 2 )
199 INTEGER ISEED( 4 ), ISEEDY( 4 )
200 REAL RESULT( NTESTS )
205 EXTERNAL lsame, clanhe, sget06
219 COMMON / infoc / infot, nunit, ok, lerr
220 COMMON / srnamc / srnamt
226 DATA iseedy / 1988, 1989, 1990, 1991 /
227 DATA uplos /
'U',
'L' /
228 DATA facts /
'F',
'N',
'E' /
229 DATA equeds /
'N',
'Y' /
235 path( 1: 1 ) =
'Complex precision'
241 iseed( i ) = iseedy( i )
247 $
CALL cerrvx( path, nout )
267 DO 120 imat = 1, nimat
271 IF( .NOT.dotype( imat ) )
276 zerot = imat.GE.3 .AND. imat.LE.5
277 IF( zerot .AND. n.LT.imat-2 )
283 uplo = uplos( iuplo )
288 CALL clatb4( path, imat, n, n,
TYPE, kl, ku, anorm
292 CALL clatms( n, n, dist, iseed,
TYPE, rwork, mode,
293 $ cndnum, anorm, kl, ku, uplo, a, lda, work,
299 CALL alaerh( path,
'CLATMS', info, 0, uplo, n, n, -1,
300 $ -1, -1, imat, nfail, nerrs, nout )
310 ELSE IF( imat.EQ.4 )
THEN
315 ioff = ( izero-1 )*lda
319 IF( iuplo.EQ.1 )
THEN
320 DO 20 i = 1, izero - 1
330 DO 40 i = 1, izero - 1
345 CALL claipd( n, a, lda+1, 0 )
349 CALL clacpy( uplo, n, n, a, lda, asav, lda )
352 equed = equeds( iequed )
353 IF( iequed.EQ.1 )
THEN
359 DO 90 ifact = 1, nfact
360 fact = facts( ifact )
361 prefac = lsame( fact,
'F' )
362 nofact = lsame( fact,
'N' )
363 equil = lsame( fact,
'E' )
370 ELSE IF( .NOT.lsame( fact, 'n
' ) ) THEN
377 CALL CLACPY( UPLO, N, N, ASAV, LDA, AFAC, LDA )
378.OR..GT.
IF( EQUIL IEQUED1 ) THEN
383 CALL CPOEQU( N, AFAC, LDA, S, SCOND, AMAX,
385.EQ..AND..GT.
IF( INFO0 N0 ) THEN
391 CALL CLAQHE( UPLO, N, AFAC, LDA, S, SCOND,
404 ANORM = CLANHE( '1
', UPLO, N, AFAC, LDA, RWORK )
408 CALL CPOTRF( UPLO, N, AFAC, LDA, INFO )
412 CALL CLACPY( UPLO, N, N, AFAC, LDA, A, LDA )
413 CALL CPOTRI( UPLO, N, A, LDA, INFO )
417 AINVNM = CLANHE( '1
', UPLO, N, A, LDA, RWORK )
418.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
421 RCONDC = ( ONE / ANORM ) / AINVNM
427 CALL CLACPY( UPLO, N, N, ASAV, LDA, A, LDA )
432 CALL CLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
433 $ NRHS, A, LDA, XACT, LDA, B, LDA,
436 CALL CLACPY( 'full
', N, NRHS, B, LDA, BSAV, LDA )
445 CALL CLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
446 CALL CLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
449 CALL CPOSV( UPLO, N, NRHS, AFAC, LDA, X, LDA,
454.NE.
IF( INFOIZERO ) THEN
455 CALL ALAERH( PATH, 'cposv ', INFO, IZERO,
456 $ UPLO, N, N, -1, -1, NRHS, IMAT,
457 $ NFAIL, NERRS, NOUT )
459.NE.
ELSE IF( INFO0 ) THEN
466 CALL CPOT01( UPLO, N, A, LDA, AFAC, LDA, RWORK,
471 CALL CLACPY( 'full
', N, NRHS, B, LDA, WORK,
473 CALL CPOT02( UPLO, N, NRHS, A, LDA, X, LDA,
474 $ WORK, LDA, RWORK, RESULT( 2 ) )
478 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
486.GE.
IF( RESULT( K )THRESH ) THEN
487.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
488 $ CALL ALADHD( NOUT, PATH )
489 WRITE( NOUT, FMT = 9999 )'cposv ', UPLO,
490 $ N, IMAT, K, RESULT( K )
501 $ CALL CLASET( UPLO, N, N, CMPLX( ZERO ),
502 $ CMPLX( ZERO ), AFAC, LDA )
503 CALL CLASET( 'full
', N, NRHS, CMPLX( ZERO ),
504 $ CMPLX( ZERO ), X, LDA )
505.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
510 CALL CLAQHE( UPLO, N, A, LDA, S, SCOND, AMAX,
518 CALL CPOSVX( FACT, UPLO, N, NRHS, A, LDA, AFAC,
519 $ LDA, EQUED, S, B, LDA, X, LDA, RCOND,
520 $ RWORK, RWORK( NRHS+1 ), WORK,
521 $ RWORK( 2*NRHS+1 ), INFO )
525.NE.
IF( INFOIZERO ) THEN
526 CALL ALAERH( PATH, 'cposvx', INFO, IZERO,
527 $ FACT // UPLO, N, N, -1, -1, NRHS,
528 $ IMAT, NFAIL, NERRS, NOUT )
533.NOT.
IF( PREFAC ) THEN
538 CALL CPOT01( UPLO, N, A, LDA, AFAC, LDA,
539 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) )
547 CALL CLACPY( 'full
', N, NRHS, BSAV, LDA, WORK,
549 CALL CPOT02( UPLO, N, NRHS, ASAV, LDA, X, LDA,
550 $ WORK, LDA, RWORK( 2*NRHS+1 ),
555.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
557 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
558 $ RCONDC, RESULT( 3 ) )
560 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
561 $ ROLDC, RESULT( 3 ) )
567 CALL CPOT05( UPLO, N, NRHS, ASAV, LDA, B, LDA,
568 $ X, LDA, XACT, LDA, RWORK,
569 $ RWORK( NRHS+1 ), RESULT( 4 ) )
577 RESULT( 6 ) = SGET06( RCOND, RCONDC )
583.GE.
IF( RESULT( K )THRESH ) THEN
584.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
585 $ CALL ALADHD( NOUT, PATH )
587 WRITE( NOUT, FMT = 9997 )'cposvx', FACT,
588 $ UPLO, N, EQUED, IMAT, K, RESULT( K )
590 WRITE( NOUT, FMT = 9998 )'cposvx', FACT,
591 $ UPLO, N, IMAT, K, RESULT( K )
605 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
607 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I1,
608 $ ', test(
', I1, ')=
', G12.5 )
609 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n=
', I5,
610 $ ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
611 9997 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n=
', I5,
612 $ ', equed=
''', A1, ''',
type ', I1, ', test(
', I1, ') =
',
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine claqhe(uplo, n, a, lda, s, scond, amax, equed)
CLAQHE scales a Hermitian matrix.
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
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 cpoequ(n, a, lda, s, scond, amax, info)
CPOEQU
subroutine cpotri(uplo, n, a, lda, info)
CPOTRI
subroutine cpotrf(uplo, n, a, lda, info)
CPOTRF
subroutine cposv(uplo, n, nrhs, a, lda, b, ldb, info)
CPOSV computes the solution to system of linear equations A * X = B for PO matrices
subroutine cposvx(fact, uplo, n, nrhs, a, lda, af, ldaf, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
CPOSVX computes the solution to system of linear equations A * X = B for PO matrices
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine cerrvx(path, nunit)
CERRVX
subroutine claipd(n, a, inda, vinda)
CLAIPD
subroutine cdrvpo(dotype, nn, nval, nrhs, thresh, tsterr, nmax, a, afac, asav, b, bsav, x, xact, s, work, rwork, nout)
CDRVPO
subroutine cpot05(uplo, n, nrhs, a, lda, b, ldb, x, ldx, xact, ldxact, ferr, berr, reslts)
CPOT05
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine cpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
CPOT02
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
subroutine cpot01(uplo, n, a, lda, afac, ldafac, rwork, resid)
CPOT01
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS