238 SUBROUTINE zdrvrfp( NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL,
239 + THRESH, A, ASAV, AFAC, AINV, B,
240 + BSAV, XACT, X, ARF, ARFINV,
241 + Z_WORK_ZLATMS, Z_WORK_ZPOT02,
242 + Z_WORK_ZPOT03, D_WORK_ZLATMS, D_WORK_ZLANHE,
243 + D_WORK_ZPOT01, D_WORK_ZPOT02, D_WORK_ZPOT03 )
250 INTEGER NN, NNS, NNT, NOUT
251 DOUBLE PRECISION THRESH
254 INTEGER NVAL( NN ), NSVAL( NNS ), NTVAL( NNT )
262 COMPLEX*16 ARFINV( * )
265 COMPLEX*16 Z_WORK_ZLATMS( * )
266 COMPLEX*16 Z_WORK_ZPOT02( * )
267 COMPLEX*16 Z_WORK_ZPOT03( * )
268 DOUBLE PRECISION D_WORK_ZLATMS( * )
269 DOUBLE PRECISION D_WORK_ZLANHE( * )
270 DOUBLE PRECISION D_WORK_ZPOT01( * )
271 DOUBLE PRECISION D_WORK_ZPOT02( * )
272 DOUBLE PRECISION D_WORK_ZPOT03( * )
278 DOUBLE PRECISION ONE, ZERO
279 PARAMETER ( ONE = 1.0d+0, zero = 0.0d+0 )
281 PARAMETER ( NTESTS = 4 )
285 INTEGER I, INFO, IUPLO, LDA, LDB, IMAT, NERRS, NFAIL,
286 + nrhs, nrun, izero, ioff, k, nt, n, iform, iin,
288 CHARACTER DIST, CTYPE, UPLO, CFORM
290 DOUBLE PRECISION ANORM, AINVNM, CNDNUM, RCONDC
293 CHARACTER UPLOS( 2 ), FORMS( 2 )
294 INTEGER ISEED( 4 ), ISEEDY( 4 )
295 DOUBLE PRECISION RESULT( NTESTS )
298 DOUBLE PRECISION ZLANHE
311 COMMON / SRNAMC / SRNAMT
314 DATA iseedy / 1988, 1989, 1990, 1991 /
315 DATA uplos /
'U',
'L' /
316 DATA forms /
'N',
'C' /
326 iseed( i ) = iseedy( i )
345 IF( n.EQ.0 .AND. iit.GE.1 )
GO TO 120
349 IF( imat.EQ.4 .AND. n.LE.1 )
GO TO 120
350 IF( imat.EQ.5 .AND. n.LE.2 )
GO TO 120
355 uplo = uplos( iuplo )
360 cform = forms( iform )
365 CALL zlatb4(
'ZPO', imat, n, n, ctype, kl, ku,
366 + anorm, mode, cndnum, dist )
369 CALL zlatms( n, n, dist, iseed, ctype,
371 + mode, cndnum, anorm, kl, ku, uplo, a,
372 + lda, z_work_zlatms, info )
377 CALL alaerh(
'ZPF',
'ZLATMS', info, 0, uplo, n,
378 + n, -1, -1, -1, iit, nfail, nerrs,
386 zerot = imat.GE.3 .AND. imat.LE.5
390 ELSE IF( iit.EQ.4 )
THEN
395 ioff = ( izero-1 )*lda
399 IF( iuplo.EQ.1 )
THEN
400 DO 20 i = 1, izero - 1
410 DO 40 i = 1, izero - 1
425 CALL zlaipd( n, a, lda+1, 0 )
429 CALL zlacpy( uplo, n, n, a, lda, asav, lda )
439 anorm = zlanhe(
'1', uplo, n, a, lda,
444 CALL zpotrf( uplo, n, a, lda, info )
448 CALL zpotri( uplo, n, a, lda, info )
454 ainvnm = zlanhe(
'1', uplo, n, a, lda,
456 rcondc = ( one / anorm ) / ainvnm
460 CALL zlacpy( uplo, n, n, asav, lda, a, lda )
468 CALL zlarhs(
'ZPO',
'N', uplo,
' ', n, n, kl, ku,
469 + nrhs, a, lda, xact, lda, b, lda,
471 CALL zlacpy(
'Full', n, nrhs, b, lda, bsav, lda )
476 CALL zlacpy( uplo, n, n, a, lda, afac, lda )
477 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldb )
480 CALL ztrttf( cform, uplo, n, afac, lda, arf, info )
482 CALL zpftrf( cform, uplo, n, arf, info )
486 IF( info.NE.izero )
THEN
492 CALL alaerh(
'ZPF',
'ZPFSV ', info, izero,
493 + uplo, n, n, -1, -1, nrhs, iit,
494 + nfail, nerrs, nout )
505 CALL zpftrs( cform, uplo, n, nrhs, arf, x, ldb,
509 CALL ztfttr( cform, uplo, n, arf, afac, lda, info )
514 CALL zlacpy( uplo, n, n, afac, lda, asav, lda )
515 CALL zpot01( uplo, n, a, lda, afac, lda,
516 + d_work_zpot01, result( 1 ) )
517 CALL zlacpy( uplo, n, n, asav, lda, afac, lda )
521 IF(mod(n,2).EQ.0)
THEN
522 CALL zlacpy(
'A', n+1, n/2, arf, n+1, arfinv,
525 CALL zlacpy(
'A', n, (n+1)/2, arf, n, arfinv,
530 CALL zpftri( cform, uplo, n, arfinv , info )
533 CALL ztfttr( cform, uplo, n, arfinv, ainv, lda,
539 +
CALL alaerh(
'ZPO',
'ZPFTRI', info, 0, uplo, n,
540 + n, -1, -1, -1, imat, nfail, nerrs,
543 CALL zpot03( uplo, n, a, lda, ainv, lda,
544 + z_work_zpot03, lda, d_work_zpot03,
545 + rcondc, result( 2 ) )
549 CALL zlacpy(
'Full', n, nrhs, b, lda,
550 + z_work_zpot02, lda )
551 CALL zpot02( uplo, n, nrhs, a, lda, x, lda,
552 + z_work_zpot02, lda, d_work_zpot02,
557 CALL zget04( n, nrhs, x, lda, xact, lda, rcondc,
565 IF( result( k ).GE.thresh )
THEN
566 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
567 +
CALL aladhd( nout,
'ZPF' )
568 WRITE( nout, fmt = 9999 )
'ZPFSV ', uplo,
569 + n, iit, k, result( k )
582 CALL alasvm(
'ZPF', nout, nfail, nrun, nerrs )
584 9999
FORMAT( 1x, a6,
', UPLO=''', a1,
''', N =', i5,
', type ', i1,
585 +
', test(', i1,
')=', g12.5 )