1 SUBROUTINE pcseprtst(DESCA, UPLO, N, MATTYPE, SUBTESTS, THRESH,
2 $ ORDER, ABSTOL, ISEED, A, COPYA, Z, LDA, WIN,
3 $ WNEW, IFAIL, ICLUSTR, GAP, IPREPAD, IPOSTPAD,
4 $ WORK, LWORK, RWORK, LRWORK,
5 $ IWORK, LIWORK, HETERO, NOUT, INFO )
15 CHARACTER HETERO, , UPLO
16 INTEGER , IPOSTPAD, IPREPAD, LDA, LIWORK, LWORK,
17 $ MATTYPE, N, NOUT, ORDER
22 INTEGER DESCA( * ), ICLUSTR( * ), IFAIL( * ),
23 $ iseed( 4 ), iwork( * )
24 REAL GAP( * ), ( * ), WNEW( * ), RWORK( * )
25 COMPLEX A( LDA, * ), COPYA( LDA, * ),
26 $ work( * ), z( lda, * )
198 INTEGER CTXT_, MB_, NB_, RSRC_, CSRC_, LLD_
199 PARAMETER ( CTXT_ = 2, mb_ = 5, nb_ = 6,
200 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
201 REAL HALF, ONE, TEN, ZERO
202 parameter( zero = 0.0e0, one = 1.0e0,
203 $ ten = 10.0e0, half = 0.5e0 )
205 parameter( padval = ( 19.25e0, 1.1e1 ) )
207 PARAMETER ( ZZERO = ( 0.0e0, 0.0e0 ) )
209 parameter( zone = ( 1.0e0, 0.0e0 ) )
211 parameter( maxtyp = 22 )
216 CHARACTER JOBZ, RANGE
218 INTEGER CONTEXT, I, IAM, IHETERO, IINFO, IL, IMODE, IN,
219 $ indd, indwork, isizesubtst, isizeevr,
220 $ isizetst, itype, iu, j, llwork, levrsize,
221 $ maxsize, mycol, myrow, nb, ngen, nloc,
222 $ nnodes, np, npcol, nprow, nq, res, sizechk,
223 $ sizemqrleft, sizemqrright, sizeqrf, sizeqtq,
224 $ sizesubtst, sizeevr, sizetms,
225 $ sizetst, valsize, vecsize
226 INTEGER INDRWORK, LLRWORK, RSIZEEVR, RSIZESUBTST,
228 REAL ANINV, ANORM, COND, MAXQTQNRM, MAXTSTNRM, OVFL,
229 $ QTQNRM, , RTUNFL, TEMP1, TSTNRM, ULP,
230 $ ulpinv, unfl, vl, vu
233 INTEGER ISEEDIN( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
235 DOUBLE PRECISION CTIME( 10 ), WTIME( 10 )
241 EXTERNAL SLARAN, LSAME, NUMROC, PSLAMCH
251 INTRINSIC abs, real, int,
max,
min, sqrt
254 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
255 $ 8, 8, 9, 9, 9, 9, 9, 10, 11 /
256 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
257 $ 2, 3, 1, 1, 1, 2, 3, 1, 1 /
258 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
259 $ 0, 0, 4, 3, 1, 4, 4, 3, 0 /
264 passed =
'PASSED EVR'
265 context = desca( ctxt_ )
268 CALL blacs_pinfo( iam, nnodes )
274 IF( lsame( hetero,
'Y' ) )
THEN
279 CALL igebs2d( context,
'All',
' ', 1, 1, ihetero, 1 )
281 CALL igebr2d( context,
'All',
' ', 1, 1, ihetero, 1, 0, 0 )
283 IF( ihetero.EQ.2 )
THEN
291 CALL pclasizesepr( desca, iprepad, ipostpad, sizemqrleft,
292 $ sizemqrright, sizeqrf, sizetms, sizeqtq,
293 $ sizechk, sizeevr, rsizeevr, isizeevr,
294 $ sizesubtst, rsizesubtst,
295 $ isizesubtst, sizetst, rsizetst, isizetst )
296 IF( lrwork.LT.rsizetst )
THEN
300 CALL igamx2d( context,
'a',
' ', 1, 1, info, 1, 1, 1, -1, -1, 0 )
307 llwork = lwork - indwork + 1
308 llrwork = lrwork - indrwork + 1
310 ulp = pslamch( context, 'p
' )
312 UNFL = PSLAMCH( CONTEXT, 'safe
min' )
314 CALL SLABAD( UNFL, OVFL )
315 RTUNFL = SQRT( UNFL )
316 RTOVFL = SQRT( OVFL )
317 ANINV = ONE / REAL( MAX( 1, N ) )
321.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
322 CALL IGEBS2D( CONTEXT, 'a
', ' ', 4, 1, ISEED, 4 )
324 CALL IGEBR2D( CONTEXT, 'a
', ' ', 4, 1, ISEED, 4, 0, 0 )
326 ISEEDIN( 1 ) = ISEED( 1 )
327 ISEEDIN( 2 ) = ISEED( 2 )
328 ISEEDIN( 3 ) = ISEED( 3 )
329 ISEEDIN( 4 ) = ISEED( 4 )
348 ITYPE = KTYPE( MATTYPE )
349 IMODE = KMODE( MATTYPE )
353 GO TO ( 10, 20, 30 )KMAGN( MATTYPE )
360 ANORM = ( RTOVFL*ULP )*ANINV
364 ANORM = RTUNFL*N*ULPINV
368.LE.
IF( MATTYPE15 ) THEN
371 COND = ULPINV*ANINV / TEN
376.EQ.
IF( ITYPE1 ) THEN
381 RWORK( INDD+I-1 ) = ZERO
383 CALL PCLASET( 'all
', N, N,ZZERO,ZZERO, COPYA, 1, 1, DESCA )
386.EQ.
ELSE IF( ITYPE2 ) THEN
391 RWORK( INDD+I-1 ) = ONE
393 CALL PCLASET( 'all
', N, N,ZZERO,ZONE, COPYA, 1, 1, DESCA )
396.EQ.
ELSE IF( ITYPE4 ) THEN
400 CALL PCFILLPAD( DESCA( CTXT_ ), SIZETMS, 1, WORK( INDWORK ),
401 $ SIZETMS, IPREPAD, IPOSTPAD, PADVAL+1.0E0 )
403 CALL PCLATMS( N, N, 's
', ISEED, 's
',RWORK( INDD ), IMODE,
404 $ COND, ANORM, 0, 0, 'n
', COPYA, 1, 1, DESCA,
405 $ ORDER, WORK( INDWORK+IPREPAD ), SIZETMS,
409 CALL PCCHEKPAD( DESCA( CTXT_ ), 'pclatms1-work
', SIZETMS, 1,
410 $ WORK( INDWORK ), SIZETMS, IPREPAD, IPOSTPAD,
413.EQ.
ELSE IF( ITYPE5 ) THEN
417 CALL PCFILLPAD( DESCA( CTXT_ ), SIZETMS, 1, WORK( INDWORK ),
418 $ SIZETMS, IPREPAD, IPOSTPAD, PADVAL+2.0E0 )
420 CALL PCLATMS( N, N, 's
', ISEED, 's
',RWORK( INDD ), IMODE,
421 $ COND, ANORM, N, N, 'n
', COPYA, 1, 1, DESCA,
422 $ ORDER, WORK( INDWORK+IPREPAD ), SIZETMS,
425 CALL PCCHEKPAD( DESCA( CTXT_ ), 'pclatms2-work
', SIZETMS, 1,
426 $ WORK( INDWORK ), SIZETMS, IPREPAD, IPOSTPAD,
431.EQ.
ELSE IF( ITYPE8 ) THEN
435 NP = NUMROC( N, DESCA( MB_ ), MYROW, 0, NPROW )
436 NQ = NUMROC( N, DESCA( NB_ ), MYCOL, 0, NPCOL )
437 CALL PCMATGEN( DESCA( CTXT_ ), 'h
', 'n
', N, N, DESCA( MB_ ),
438 $ DESCA( NB_ ), COPYA, DESCA( LLD_ ),
439 $ DESCA( RSRC_ ), DESCA( CSRC_ ), ISEED( 1 ),
440 $ 0, NP, 0, NQ, MYROW, MYCOL, NPROW, NPCOL )
444.EQ.
ELSE IF( ITYPE9 ) THEN
448 CALL PCFILLPAD( DESCA( CTXT_ ), SIZETMS, 1, WORK( INDWORK ),
449 $ SIZETMS, IPREPAD, IPOSTPAD, PADVAL+3.0E0 )
451 CALL PCLATMS( N, N, 's
', ISEED, 's
',RWORK( INDD ), IMODE,
452 $ COND, ANORM, N, N, 'n
', COPYA, 1, 1, DESCA,
453 $ ORDER, WORK( INDWORK+IPREPAD ), SIZETMS,
458 CALL PCCHEKPAD( DESCA( CTXT_ ), 'pclatms3-work
', SIZETMS, 1,
459 $ WORK( INDWORK ), SIZETMS, IPREPAD, IPOSTPAD,
462.EQ.
ELSE IF( ITYPE10 ) THEN
467 CALL PCLASET( 'all
', N, N,ZZERO,ZZERO, COPYA, 1, 1, DESCA )
468 NP = NUMROC( N, DESCA( MB_ ), 0, 0, NPROW )
469 NQ = NUMROC( N, DESCA( NB_ ), 0, 0, NPCOL )
475 IN = MIN( 1+INT( SLARAN( ISEED )*REAL( NLOC ) ), N-NGEN )
477 CALL CLATMS( IN, IN, 's
', ISEED, 'p
',RWORK( INDD ),
478 $ IMODE, COND, ANORM, 1, 1, 'n
', A, LDA,
479 $ WORK( INDWORK ), IINFO )
482 TEMP1 = ABS( A( I-1, I ) ) /
483 $ SQRT( ABS( A( I-1, I-1 )*A( I, I ) ) )
484.GT.
IF( TEMP1HALF ) THEN
485 A( I-1, I ) = HALF*SQRT( ABS( A( I-1, I-1 )*A( I,
487 A( I, I-1 ) = A( I-1, I )
490 CALL PCELSET( COPYA, NGEN+1, NGEN+1, DESCA, A( 1, 1 ) )
492 CALL PCELSET( COPYA, NGEN+I, NGEN+I, DESCA,
494 CALL PCELSET( COPYA, NGEN+I-1, NGEN+I, DESCA,
496 CALL PCELSET( COPYA, NGEN+I, NGEN+I-1, DESCA,
504.EQ.
ELSE IF( ITYPE11 ) THEN
513 IN = MIN( J, N-NGEN )
515 RWORK( INDD+NGEN+I ) = TEMP1
523 CALL PCFILLPAD( DESCA( CTXT_ ), SIZETMS, 1, WORK( INDWORK ),
524 $ SIZETMS, IPREPAD, IPOSTPAD, PADVAL+4.0E0 )
526 CALL PCLATMS( N, N, 's
', ISEED, 's
',RWORK( INDD ), IMODE,
527 $ COND, ANORM, 0, 0, 'n
', COPYA, 1, 1, DESCA,
528 $ ORDER, WORK( INDWORK+IPREPAD ), SIZETMS,
531 CALL PCCHEKPAD( DESCA( CTXT_ ), 'pclatms4-work
', SIZETMS, 1,
532 $ WORK( INDWORK ), SIZETMS, IPREPAD, IPOSTPAD,
540 $ CALL SLASRT( 'i
', N,RWORK( INDD ), IINFO )
542 CALL PCLASIZEHEEVR( WKNOWN, 'a
', N, DESCA, VL, VU, IL, IU,
543 $ ISEED,RWORK( INDD ), MAXSIZE, VECSIZE,
545 LEVRSIZE = MIN( MAXSIZE, LLRWORK )
547 CALL PCSEPRSUBTST( WKNOWN, 'v
', 'a
', UPLO, N, VL, VU, IL, IU,
548 $ THRESH, ABSTOL, A, COPYA, Z, 1, 1, DESCA,
549 $ RWORK( INDD ), WIN, IFAIL, ICLUSTR, GAP,
550 $ IPREPAD, IPOSTPAD, WORK( INDWORK ), LLWORK,
551 $ RWORK( INDRWORK ), LLRWORK,
552 $ LEVRSIZE, IWORK, ISIZEEVR, RES, TSTNRM,
558.LE.
IF( THRESHZERO ) THEN
561.NE.
ELSE IF( RES0 ) THEN
567.GT..AND.
IF( THRESHZERO LSAME( SUBTESTS, 'y
' ) ) THEN
575 CALL PCLASIZEHEEVR( .TRUE., RANGE, N, DESCA, VL, VU, IL, IU,
576 $ ISEED, WIN( 1+IPREPAD ), MAXSIZE,
581 CALL PCSEPRSUBTST( .TRUE., JOBZ, RANGE, UPLO, N, VL, VU, IL,
582 $ IU, THRESH, ABSTOL, A, COPYA, Z, 1, 1,
583 $ DESCA, WIN( 1+IPREPAD ), WNEW, IFAIL,
584 $ ICLUSTR, GAP, IPREPAD, IPOSTPAD,
585 $ WORK( INDWORK ), LLWORK,
586 $ RWORK, LRWORK, LEVRSIZE,
587 $ IWORK, ISIZEEVR, RES, TSTNRM, QTQNRM,
591 MAXTSTNRM = MAX( TSTNRM, MAXTSTNRM )
592 MAXQTQNRM = MAX( QTQNRM, MAXQTQNRM )
593 PASSED = 'failed
stest 1
'
609 CALL PCLASIZEHEEVR( .TRUE., RANGE, N, DESCA, VL, VU, IL, IU,
610 $ ISEED, WIN( 1+IPREPAD ), MAXSIZE,
615 CALL PCSEPRSUBTST( .TRUE., JOBZ, RANGE, UPLO, N, VL, VU, IL,
616 $ IU, THRESH, ABSTOL, A, COPYA, Z, 1, 1,
617 $ DESCA, WIN( 1+IPREPAD ), WNEW, IFAIL,
618 $ ICLUSTR, GAP, IPREPAD, IPOSTPAD,
619 $ WORK( INDWORK ), LLWORK,
620 $ RWORK, LRWORK, LEVRSIZE,
621 $ IWORK, ISIZEEVR, RES, TSTNRM, QTQNRM,
625 MAXTSTNRM = MAX( TSTNRM, MAXTSTNRM )
626 MAXQTQNRM = MAX( QTQNRM, MAXQTQNRM )
627 PASSED = 'failed
stest 2
'
642 CALL PCLASIZEHEEVR( .TRUE., RANGE, N, DESCA, VL, VU, IL, IU,
643 $ ISEED, WIN( 1+IPREPAD ), MAXSIZE,
648 CALL PCSEPRSUBTST( .TRUE., JOBZ, RANGE, UPLO, N, VL, VU, IL,
649 $ IU, THRESH, ABSTOL, A, COPYA, Z, 1, 1,
650 $ DESCA, WIN( 1+IPREPAD ), WNEW, IFAIL,
651 $ ICLUSTR, GAP, IPREPAD, IPOSTPAD,
652 $ WORK( INDWORK ), LLWORK,
653 $ RWORK, LRWORK, LEVRSIZE,
654 $ IWORK, ISIZEEVR, RES, TSTNRM, QTQNRM,
658 MAXTSTNRM = MAX( TSTNRM, MAXTSTNRM )
659 MAXQTQNRM = MAX( QTQNRM, MAXQTQNRM )
660 PASSED = 'failed
stest 3
'
675 CALL PCLASIZEHEEVR( .TRUE., RANGE, N, DESCA, VL, VU, IL, IU,
676 $ ISEED, WIN( 1+IPREPAD ), MAXSIZE,
681 CALL PCSEPRSUBTST( .TRUE., JOBZ, RANGE, UPLO, N, VL, VU, IL,
682 $ IU, THRESH, ABSTOL, A, COPYA, Z, 1, 1,
683 $ DESCA, WIN( 1+IPREPAD ), WNEW, IFAIL,
684 $ ICLUSTR, GAP, IPREPAD, IPOSTPAD,
685 $ WORK( INDWORK ), LLWORK,
686 $ RWORK, LRWORK, LEVRSIZE,
687 $ IWORK, ISIZEEVR, RES, TSTNRM, QTQNRM,
691 MAXTSTNRM = MAX( TSTNRM, MAXTSTNRM )
692 MAXQTQNRM = MAX( QTQNRM, MAXQTQNRM )
693 PASSED = 'failed
stest 4
'
708 CALL PCLASIZEHEEVR( .TRUE., RANGE, N, DESCA, VL, VU, IL, IU,
709 $ ISEED, WIN( 1+IPREPAD ), MAXSIZE,
714 CALL PCSEPRSUBTST( .TRUE., JOBZ, RANGE, UPLO, N, VL, VU, IL,
715 $ IU, THRESH, ABSTOL, A, COPYA, Z, 1, 1,
716 $ DESCA, WIN( 1+IPREPAD ), WNEW, IFAIL,
717 $ ICLUSTR, GAP, IPREPAD, IPOSTPAD,
718 $ WORK( INDWORK ), LLWORK,
719 $ RWORK, LRWORK, LEVRSIZE,
720 $ IWORK, ISIZEEVR, RES, TSTNRM, QTQNRM,
724 MAXTSTNRM = MAX( TSTNRM, MAXTSTNRM )
725 MAXQTQNRM = MAX( QTQNRM, MAXQTQNRM )
726 PASSED = 'failed
stest 5
'
732 CALL IGAMX2D( CONTEXT, 'all
', ' ', 1, 1, INFO, 1, -1, -1, -1, -1,
735.EQ..AND.
IF( IAM0 .FALSE. ) THEN
736 WRITE( NOUT, FMT = 9994 )'c
'
737 WRITE( NOUT, FMT = 9993 )ISEEDIN( 1 )
738 WRITE( NOUT, FMT = 9992 )ISEEDIN( 2 )
739 WRITE( NOUT, FMT = 9991 )ISEEDIN( 3 )
740 WRITE( NOUT, FMT = 9990 )ISEEDIN( 4 )
741 IF( LSAME( UPLO, 'l
' ) ) THEN
742 WRITE( NOUT, FMT = 9994 )' uplo=
''l
'' '
744 WRITE( NOUT, FMT = 9994 )' uplo=
''u
'' '
746 IF( LSAME( SUBTESTS, 'y
' ) ) THEN
747 WRITE( NOUT, FMT = 9994 )' subtests=
''y
'' '
749 WRITE( NOUT, FMT = 9994 )' subtests=
''n
'' '
751 WRITE( NOUT, FMT = 9989 )N
752 WRITE( NOUT, FMT = 9988 )NPROW
753 WRITE( NOUT, FMT = 9987 )NPCOL
754 WRITE( NOUT, FMT = 9986 )NB
755 WRITE( NOUT, FMT = 9985 )MATTYPE
756 WRITE( NOUT, FMT = 9982 )ABSTOL
757 WRITE( NOUT, FMT = 9981 )THRESH
758 WRITE( NOUT, FMT = 9994 )'c
'
762 CALL SLCOMBINE( CONTEXT, 'all
', '>
', 'w
', 6, 1, WTIME )
763 CALL SLCOMBINE( CONTEXT, 'all
', '>
', 'c
', 6, 1, CTIME )
765.EQ..OR..EQ.
IF( INFO0 INFO1 ) THEN
766.GE.
IF( WTIME( 1 )0.0 ) THEN
767 WRITE( NOUT, FMT = 9999 )N, NB, NPROW, NPCOL, MATTYPE,
768 $ SUBTESTS, WTIME( 1 ), CTIME( 1 ), MAXTSTNRM,
771 WRITE( NOUT, FMT = 9998 )N, NB, NPROW, NPCOL, MATTYPE,
772 $ SUBTESTS, CTIME( 1 ), MAXTSTNRM, MAXQTQNRM, PASSED
774.EQ.
ELSE IF( INFO2 ) THEN
775.GE.
IF( WTIME( 1 )0.0 ) THEN
776 WRITE( NOUT, FMT = 9997 )N, NB, NPROW, NPCOL, MATTYPE,
777 $ SUBTESTS, WTIME( 1 ), CTIME( 1 )
779 WRITE( NOUT, FMT = 9996 )N, NB, NPROW, NPCOL, MATTYPE,
780 $ SUBTESTS, CTIME( 1 )
782.EQ.
ELSE IF( INFO3 ) THEN
783 WRITE( NOUT, FMT = 9995 )N, NB, NPROW, NPCOL, MATTYPE,
791 9999 FORMAT( 1X, I5, 1X, I3, 1X, I3, 1X, I3, 1X, I3, 3X, A1, 1X,
792 $ F8.2, 1X, F8.2, 1X, G9.2, 1X, G9.2, 1X, A14 )
793 9998 FORMAT( 1X, I5, 1X, I3, 1X, I3, 1X, I3, 1X, I3, 3X, A1, 1X, 8X,
794 $ 1X, F8.2, 1X, G9.2, 1X, G9.2, A14 )
795 9997 FORMAT( 1X, I5, 1X, I3, 1X, I3, 1X, I3, 1X, I3, 3X, A1, 1X, F8.2,
796 $ 1X, F8.2, 21X, 'bypassed
' )
797 9996 FORMAT( 1X, I5, 1X, I3, 1X, I3, 1X, I3, 1X, I3, 3X, A1, 1X, 8X,
798 $ 1X, F8.2, 21X, 'bypassed
' )
799 9995 FORMAT( 1X, I5, 1X, I3, 1X, I3, 1X, I3, 1X, I3, 3X, A1, 32X,
800 $ 'bad memory parameters
' )
802 9993 FORMAT( ' iseed( 1 ) =
', I8 )
803 9992 FORMAT( ' iseed( 2 ) =
', I8 )
804 9991 FORMAT( ' iseed( 3 ) =
', I8 )
805 9990 FORMAT( ' iseed( 4 ) =
', I8 )
806 9989 FORMAT( ' n=
', I8 )
807 9988 FORMAT( ' nprow=
', I8 )
808 9987 FORMAT( ' npcol=
', I8 )
809 9986 FORMAT( ' nb=
', I8 )
810 9985 FORMAT( ' mattype=
', I8 )
813 9982 FORMAT( ' abstol=
', D16.6 )
814 9981 FORMAT( ' thresh=
', D16.6 )
subroutine pcseprsubtst(wknown, jobz, range, uplo, n, vl, vu, il, iu, thresh, abstol, a, copya, z, ia, ja, desca, win, wnew, ifail, iclustr, gap, iprepad, ipostpad, work, lwork, rwork, lrwork, lwork1, iwork, liwork, result, tstnrm, qtqnrm, nout)