159 SUBROUTINE cdrvpo( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, NMAX,
160 $ A, AFAC, ASAV, B, BSAV, X, XACT, S, WORK,
169 INTEGER NMAX, NN, NOUT, NRHS
175 REAL RWORK( * ), S( * )
176 COMPLEX A( * ), AFAC( * ), ASAV( * ), B( * ),
177 $ bsav( * ), work( * ), x( * ), xact( * )
184 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
186 parameter( ntypes = 9 )
188 parameter( ntests = 6 )
191 LOGICAL EQUIL, NOFACT, PREFAC, ZEROT
192 CHARACTER DIST, EQUED, FACT,
TYPE, UPLO, XTYPE
194 INTEGER I, IEQUED, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
195 $ izero, k, k1, kl, ku, lda, mode, n, nb, nbmin,
196 $ nerrs, nfact, nfail, nimat, nrun, nt,
198 REAL AINVNM, AMAX, ANORM, CNDNUM, RCOND, RCONDC,
199 $ ROLDC, SCOND, RPVGRW_SVXX
202 CHARACTER EQUEDS( 2 ), FACTS( 3 ), UPLOS( 2 )
203 INTEGER ISEED( 4 ), ISEEDY( 4 )
204 REAL RESULT( NTESTS ), BERR( NRHS ),
205 $ errbnds_n( nrhs, 3 ), errbnds_c( nrhs, 3 )
210 EXTERNAL lsame, clanhe, sget06
224 COMMON / infoc / infot, nunit, ok, lerr
225 COMMON / srnamc / srnamt
231 DATA iseedy / 1988, 1989, 1990, 1991 /
232 DATA uplos /
'U',
'L' /
233 DATA facts /
'F',
'N',
'E' /
234 DATA equeds /
'N',
'Y' /
240 path( 1: 1 ) =
'Complex precision'
246 iseed( i ) = iseedy( i )
252 $
CALL cerrvx( path, nout )
272 DO 120 imat = 1, nimat
276 IF( .NOT.dotype( imat ) )
281 zerot = imat.GE.3 .AND. imat.LE.5
282 IF( zerot .AND. n.LT.imat-2 )
288 uplo = uplos( iuplo )
293 CALL clatb4( path, imat, n, n,
TYPE, KL, KU, ANORM, MODE,
297 CALL clatms( n, n, dist, iseed,
TYPE, RWORK, MODE,
298 $ cndnum, anorm, kl, ku, uplo, a, lda, work,
305 $ -1, -1, IMAT, NFAIL, NERRS, NOUT )
315.EQ.
ELSE IF( IMAT4 ) THEN
320 IOFF = ( IZERO-1 )*LDA
324.EQ.
IF( IUPLO1 ) THEN
325 DO 20 I = 1, IZERO - 1
335 DO 40 I = 1, IZERO - 1
350 CALL CLAIPD( N, A, LDA+1, 0 )
354 CALL CLACPY( UPLO, N, N, A, LDA, ASAV, LDA )
357 EQUED = EQUEDS( IEQUED )
358.EQ.
IF( IEQUED1 ) THEN
364 DO 90 IFACT = 1, NFACT
365 FACT = FACTS( IFACT )
366 PREFAC = LSAME( FACT, 'f
' )
367 NOFACT = LSAME( FACT, 'n
' )
368 EQUIL = LSAME( FACT, 'e
' )
375.NOT.
ELSE IF( LSAME( FACT, 'n
' ) ) THEN
382 CALL CLACPY( UPLO, N, N, ASAV, LDA, AFAC, LDA )
383.OR..GT.
IF( EQUIL IEQUED1 ) THEN
388 CALL CPOEQU( N, AFAC, LDA, S, SCOND, AMAX,
390.EQ..AND..GT.
IF( INFO0 N0 ) THEN
396 CALL CLAQHE( UPLO, N, AFAC, LDA, S, SCOND,
409 ANORM = CLANHE( '1
', UPLO, N, AFAC, LDA, RWORK )
413 CALL CPOTRF( UPLO, N, AFAC, LDA, INFO )
417 CALL CLACPY( UPLO, N, N, AFAC, LDA, A, LDA )
418 CALL CPOTRI( UPLO, N, A, LDA, INFO )
422 AINVNM = CLANHE( '1
', UPLO, N, A, LDA, RWORK )
423.LE..OR..LE.
IF( ANORMZERO AINVNMZERO ) THEN
426 RCONDC = ( ONE / ANORM ) / AINVNM
432 CALL CLACPY( UPLO, N, N, ASAV, LDA, A, LDA )
437 CALL CLARHS( PATH, XTYPE, UPLO, ' ', N, N, KL, KU,
438 $ NRHS, A, LDA, XACT, LDA, B, LDA,
441 CALL CLACPY( 'full
', N, NRHS, B, LDA, BSAV, LDA )
450 CALL CLACPY( UPLO, N, N, A, LDA, AFAC, LDA )
451 CALL CLACPY( 'full
', N, NRHS, B, LDA, X, LDA )
454 CALL CPOSV( UPLO, N, NRHS, AFAC, LDA, X, LDA,
459.NE.
IF( INFOIZERO ) THEN
460 CALL ALAERH( PATH, 'cposv ', INFO, IZERO,
461 $ UPLO, N, N, -1, -1, NRHS, IMAT,
462 $ NFAIL, NERRS, NOUT )
464.NE.
ELSE IF( INFO0 ) THEN
471 CALL CPOT01( UPLO, N, A, LDA, AFAC, LDA, RWORK,
476 CALL CLACPY( 'full
', N, NRHS, B, LDA, WORK,
478 CALL CPOT02( UPLO, N, NRHS, A, LDA, X, LDA,
479 $ WORK, LDA, RWORK, RESULT( 2 ) )
483 CALL CGET04( N, NRHS, X, LDA, XACT, LDA, RCONDC,
491.GE.
IF( RESULT( K )THRESH ) THEN
492.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
493 $ CALL ALADHD( NOUT, PATH )
494 WRITE( NOUT, FMT = 9999 )'cposv ', UPLO,
495 $ N, IMAT, K, RESULT( K )
506 $ CALL CLASET( UPLO, N, N, CMPLX( ZERO ),
507 $ CMPLX( ZERO ), AFAC, LDA )
508 CALL CLASET( 'full
', N, NRHS, CMPLX( ZERO ),
509 $ CMPLX( ZERO ), X, LDA )
510.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
515 CALL CLAQHE( UPLO, N, A, LDA, S, SCOND, AMAX,
523 CALL CPOSVX( FACT, UPLO, N, NRHS, A, LDA, AFAC,
524 $ LDA, EQUED, S, B, LDA, X, LDA, RCOND,
525 $ RWORK, RWORK( NRHS+1 ), WORK,
526 $ RWORK( 2*NRHS+1 ), INFO )
530.NE.
IF( INFOIZERO ) THEN
531 CALL ALAERH( PATH, 'cposvx', INFO, IZERO,
532 $ FACT // UPLO, N, N, -1, -1, NRHS,
533 $ IMAT, NFAIL, NERRS, NOUT )
538.NOT.
IF( PREFAC ) THEN
543 CALL CPOT01( UPLO, N, A, LDA, AFAC, LDA,
544 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) )
552 CALL CLACPY( 'full
', N, NRHS, BSAV, LDA, WORK,
554 CALL CPOT02( UPLO, N, NRHS, ASAV, LDA, X, LDA,
555 $ WORK, LDA, RWORK( 2*NRHS+1 ),
560.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
562 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
563 $ RCONDC, RESULT( 3 ) )
565 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
566 $ ROLDC, RESULT( 3 ) )
572 CALL CPOT05( UPLO, N, NRHS, ASAV, LDA, B, LDA,
573 $ X, LDA, XACT, LDA, RWORK,
574 $ RWORK( NRHS+1 ), RESULT( 4 ) )
582 RESULT( 6 ) = SGET06( RCOND, RCONDC )
588.GE.
IF( RESULT( K )THRESH ) THEN
589.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
590 $ CALL ALADHD( NOUT, PATH )
592 WRITE( NOUT, FMT = 9997 )'cposvx', FACT,
593 $ UPLO, N, EQUED, IMAT, K, RESULT( K )
595 WRITE( NOUT, FMT = 9998 )'cposvx', FACT,
596 $ UPLO, N, IMAT, K, RESULT( K )
607 CALL CLACPY( 'full
', N, N, ASAV, LDA, A, LDA )
608 CALL CLACPY( 'full
', N, NRHS, BSAV, LDA, B, LDA )
611 $ CALL CLASET( UPLO, N, N, CMPLX( ZERO ),
612 $ CMPLX( ZERO ), AFAC, LDA )
613 CALL CLASET( 'full
', N, NRHS, CMPLX( ZERO ),
614 $ CMPLX( ZERO ), X, LDA )
615.GT..AND..GT.
IF( IEQUED1 N0 ) THEN
620 CALL CLAQHE( UPLO, N, A, LDA, S, SCOND, AMAX,
629 CALL CPOSVXX( FACT, UPLO, N, NRHS, A, LDA, AFAC,
630 $ LDA, EQUED, S, B, LDA, X,
631 $ LDA, RCOND, RPVGRW_SVXX, BERR, N_ERR_BNDS,
632 $ ERRBNDS_N, ERRBNDS_C, 0, ZERO, WORK,
633 $ RWORK( 2*NRHS+1 ), INFO )
637.EQ.
IF( INFON+1 ) GOTO 90
638.NE.
IF( INFOIZERO ) THEN
639 CALL ALAERH( PATH, 'cposvxx', INFO, IZERO,
640 $ FACT // UPLO, N, N, -1, -1, NRHS,
641 $ IMAT, NFAIL, NERRS, NOUT )
646.NOT.
IF( PREFAC ) THEN
651 CALL CPOT01( UPLO, N, A, LDA, AFAC, LDA,
652 $ RWORK( 2*NRHS+1 ), RESULT( 1 ) )
660 CALL CLACPY( 'full
', N, NRHS, BSAV, LDA, WORK,
662 CALL CPOT02( UPLO, N, NRHS, ASAV, LDA, X, LDA,
663 $ WORK, LDA, RWORK( 2*NRHS+1 ),
668.OR..AND.
IF( NOFACT ( PREFAC LSAME( EQUED,
670 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
671 $ RCONDC, RESULT( 3 ) )
673 CALL CGET04( N, NRHS, X, LDA, XACT, LDA,
674 $ ROLDC, RESULT( 3 ) )
680 CALL CPOT05( UPLO, N, NRHS, ASAV, LDA, B, LDA,
681 $ X, LDA, XACT, LDA, RWORK,
682 $ RWORK( NRHS+1 ), RESULT( 4 ) )
690 RESULT( 6 ) = SGET06( RCOND, RCONDC )
696.GE.
IF( RESULT( K )THRESH ) THEN
697.EQ..AND..EQ.
IF( NFAIL0 NERRS0 )
698 $ CALL ALADHD( NOUT, PATH )
700 WRITE( NOUT, FMT = 9997 )'cposvxx', FACT,
701 $ UPLO, N, EQUED, IMAT, K, RESULT( K )
703 WRITE( NOUT, FMT = 9998 )'cposvxx', FACT,
704 $ UPLO, N, IMAT, K, RESULT( K )
718 CALL ALASVM( PATH, NOUT, NFAIL, NRUN, NERRS )
723 CALL CEBCHVXX(THRESH, PATH)
725 9999 FORMAT( 1X, A, ', uplo=
''', A1, ''', n =
', I5, ',
type ', I1,
726 $ ', test(
', I1, ')=
', G12.5 )
727 9998 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n=
', I5,
728 $ ',
type ', I1, ', test(
', I1, ')=
', G12.5 )
729 9997 FORMAT( 1X, A, ', fact=
''', A1, ''', uplo=
''', A1, ''', n=
', I5,
730 $ ', 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 cposvxx(fact, uplo, n, nrhs, a, lda, af, ldaf, equed, s, b, ldb, x, ldx, rcond, rpvgrw, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, rwork, info)
CPOSVXX computes the solution to system of linear equations A * X = B for PO matrices
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