1 SUBROUTINE pdseptst( 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, IWORK, LIWORK, HETERO, NOUT,
13 CHARACTER HETERO, SUBTESTS, UPLO
14 INTEGER INFO, IPOSTPAD, IPREPAD, LDA, LIWORK, LWORK,
15 $ MATTYPE, N, NOUT, ORDER
16 DOUBLE PRECISION ABSTOL, THRESH
19 INTEGER DESCA( * ), ICLUSTR( * ), IFAIL( * ),
20 $ iseed( 4 ), iwork( * )
21 DOUBLE PRECISION A( LDA, * ), COPYA( LDA, * ), GAP( * ),
22 $ WIN( * ), WNEW( * ), WORK( * ), Z( LDA, * )
196 INTEGER BLOCK_CYCLIC_2D, DLEN_, DT_, CTXT_, M_, N_,
197 $ MB_, NB_, RSRC_, CSRC_, LLD_
198 PARAMETER ( BLOCK_CYCLIC_2D = 1, dlen_ = 9, dt_ = 1,
199 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
200 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
201 DOUBLE PRECISION HALF, ONE, TEN, ZERO
202 parameter( zero = 0.0d+0, one = 1.0d+0,
203 $ ten = 10.0d+0, half = 0.5d+0 )
204 DOUBLE PRECISION PADVAL
205 parameter( padval = 19.25d+0 )
207 PARAMETER ( MAXTYP = 22 )
212 CHARACTER JOBZ, RANGE
214 INTEGER CONTEXT, I, IAM, IHETERO, IINFO, IL, IMODE, IN,
215 $ indd, indwork, isizesubtst, isizesyevx,
216 $ isizetst, itype, iu, j, llwork, lsyevxsize,
217 $ maxsize, minsize, mycol, myrow, nb, ngen, nloc,
218 $ nnodes, np, npcol, nprow, nq, res, sizechk,
219 $ sizemqrleft, sizemqrright, sizeqrf, sizeqtq,
220 $ sizesubtst, sizesyev, sizesyevx, sizetms,
221 $ sizetst, valsize, vecsize, isizesyevd,sizesyevd
222 DOUBLE PRECISION ANINV, ANORM, COND, MAXQTQNRM, MAXTSTNRM, OVFL,
227 INTEGER ISEEDIN( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
229 DOUBLE PRECISION CTIME( 10 ), WTIME( 10 )
234 DOUBLE PRECISION DLARAN, PDLAMCH
235 EXTERNAL DLARAN, LSAME, NUMROC, PDLAMCH
238 EXTERNAL blacs_gridinfo, blacs_pinfo, dlabad, dlasrt,
245 INTRINSIC abs, dble, int,
max,
min, sqrt
248 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
249 $ 8, 8, 9, 9, 9, 9, 9, 10, 11 /
250 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
251 $ 2, 3, 1, 1, 1, 2, 3, 1, 1 /
252 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
253 $ 0, 0, 4, 3, 1, 4, 4, 3, 0 /
257 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dt_*lld_*mb_*m_*nb_*n_*
261 passed =
'PASSED EVX'
262 context = desca( ctxt_ )
265 CALL blacs_pinfo( iam, nnodes )
266 CALL blacs_gridinfo( context, nprow, npcol, myrow, mycol )
271 IF( lsame( hetero,
'Y' ) )
THEN
276 CALL igebs2d( context,
'All',
' ', 1, 1, ihetero, 1 )
278 CALL igebr2d( context,
'All',
' ', 1, 1, ihetero, 1, 0, 0 )
280 IF( ihetero.EQ.2 )
THEN
288 CALL pdlasizesqp( desca, iprepad, ipostpad, sizemqrleft,
289 $ sizemqrright, sizeqrf, sizetms, sizeqtq,
290 $ sizechk, sizesyevx, isizesyevx, sizesyev,
291 $ sizesyevd, isizesyevd, sizesubtst,
292 $ isizesubtst, sizetst, isizetst )
294 IF( lwork.LT.sizetst )
THEN
298 CALL igamx2d( context,
'a',
' ', 1, 1, info, 1, 1, 1, -1, -1, 0 )
304 llwork = lwork - indwork + 1
306 ulp = pdlamch( context,
'P' )
308 unfl = pdlamch( context,
'Safe min' )
310 CALL dlabad( unfl, ovfl )
311 rtunfl = sqrt( unfl )
312 rtovfl = sqrt( ovfl )
313 aninv = one / dble(
max( 1, n ) )
317 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
318 CALL igebs2d( context,
'a',
' ', 4, 1, iseed, 4 )
320 CALL igebr2d( context,
'a',
' ', 4, 1, iseed, 4, 0, 0 )
322 iseedin( 1 ) = iseed( 1 )
323 iseedin( 2 ) = iseed( 2 )
324 iseedin( 3 ) = iseed( 3 )
325 iseedin( 4 ) = iseed( 4 )
344 itype = ktype( mattype )
345 imode = kmode( mattype )
349 GO TO ( 10, 20, 30 )kmagn( mattype )
356 anorm = ( rtovfl*ulp )*aninv
360 anorm = rtunfl*n*ulpinv
364 IF( mattype.LE.15 )
THEN
367 cond = ulpinv*aninv / ten
375 IF( itype.EQ.1 )
THEN
380 work( indd+i-1 ) = zero
382 CALL pdlaset(
'All', n, n, zero, zero, copya, 1, 1, desca )
385 ELSE IF( itype.EQ.2 )
THEN
390 work( indd+i-1 ) = one
392 CALL pdlaset(
'All', n, n, zero, one, copya, 1, 1, desca )
395 ELSE IF( itype.EQ.4 )
THEN
399 CALL pdfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
400 $ sizetms, iprepad, ipostpad, padval+1.0d+0 )
402 CALL pdlatms( n, n,
'S', iseed,
'S', work( indd ), imode,
403 $ cond, anorm, 0, 0,
'N', copya, 1, 1, desca,
404 $ order, work( indwork+iprepad ), sizetms,
408 CALL pdchekpad( desca( ctxt_ ),
'PDLATMS1-WORK', sizetms, 1,
409 $ work( indwork ), sizetms, iprepad, ipostpad,
412 ELSE IF( itype.EQ.5 )
THEN
416 CALL pdfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
417 $ sizetms, iprepad, ipostpad, padval+2.0d+0 )
419 CALL pdlatms( n, n,
'S', iseed,
'S', work( indd ), imode,
420 $ cond, anorm, n, n,
'N', copya, 1, 1, desca,
421 $ order, work( indwork+iprepad ), sizetms,
424 CALL pdchekpad( desca( ctxt_ ),
'PDLATMS2-WORK', sizetms, 1,
425 $ work( indwork ), sizetms, iprepad, ipostpad,
430 ELSE IF( itype.EQ.8 )
THEN
434 np = numroc( n, desca( mb_ ), myrow, 0, nprow )
435 nq = numroc( n, desca( nb_ ), mycol, 0, npcol )
436 CALL pdmatgen( desca( ctxt_ ),
'S',
'N', n, n, desca( mb_ ),
437 $ desca( nb_ ), copya, desca( lld_ ),
438 $ desca( rsrc_ ), desca( csrc_ ), iseed( 1 ),
439 $ 0, np, 0, nq, myrow, mycol, nprow, npcol )
443 ELSE IF( itype.EQ.9 )
THEN
448 CALL pdfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
449 $ sizetms, iprepad, ipostpad, padval+3.0d+0 )
451 CALL pdlatms( n, n,
'S', iseed,
'S', work( indd ), imode,
452 $ cond, anorm, n, n,
'N', copya, 1, 1, desca,
453 $ order, work( indwork+iprepad ), sizetms,
458 CALL pdchekpad( desca( ctxt_ ),
'PDLATMS3-WORK', sizetms, 1,
459 $ work( indwork ), sizetms, iprepad, ipostpad,
462 ELSE IF( itype.EQ.10 )
THEN
467 CALL pdlaset(
'All', n, n, zero, zero, 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( dlaran( iseed )*dble( nloc ) ), n-ngen )
477 CALL dlatms( in, in,
'S', iseed,
'P', work( 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 IF( temp1.GT.half )
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 pdelset( copya, ngen+1, ngen+1, desca, a( 1, 1 ) )
492 CALL pdelset( copya, ngen+i, ngen+i, desca,
494 CALL pdelset( copya, ngen+i-1, ngen+i, desca,
496 CALL pdelset( copya, ngen+i, ngen+i-1, desca,
504 ELSE IF( itype.EQ.11 )
THEN
513 in =
min( j, n-ngen )
515 work( indd+ngen+i ) = temp1
524 CALL pdfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
525 $ sizetms, iprepad, ipostpad, padval+4.0d+0 )
527 CALL pdlatms( n, n,
'S', iseed,
'S', work( indd ), imode,
528 $ cond, anorm, 0, 0,
'N', copya, 1, 1, desca,
529 $ order, work( indwork+iprepad ), sizetms,
532 CALL pdchekpad( desca( ctxt_ ),
'PDLATMS4-WORK', sizetms, 1,
533 $ work( indwork ), sizetms, iprepad, ipostpad,
545 $
CALL dlasrt(
'I', n, work( indd ), iinfo )
556 $ iseed, work( indd ), maxsize, vecsize,
559 lsyevxsize =
min( maxsize, llwork )
561 CALL pdsepsubtst( wknown,
'v',
'a', uplo, n, vl, vu, il, iu,
562 $ thresh, abstol, a, copya, z, 1, 1, desca,
563 $ work( indd ), win, ifail, iclustr, gap,
564 $ iprepad, ipostpad, work( indwork ), llwork,
565 $ lsyevxsize, iwork, isizesyevx, res, tstnrm,
573 IF( thresh.LE.zero )
THEN
576 ELSE IF( res.NE.0 )
THEN
582 IF( thresh.GT.zero .AND. lsame( subtests,
'Y' ) )
THEN
591 $ iseed, win( 1+iprepad ), maxsize,
596 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
597 $ iu, thresh, abstol, a, copya, z, 1, 1,
598 $ desca, win( 1+iprepad ), wnew, ifail,
599 $ iclustr, gap, iprepad, ipostpad,
600 $ work( indwork ), llwork, lsyevxsize,
601 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
605 passed =
'FAILED stest 1'
606 maxtstnrm =
max( tstnrm, maxtstnrm )
607 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
618 $ iseed, win( 1+iprepad ), maxsize,
621 lsyevxsize = vecsize + int( dlaran( iseed )*
622 $ dble( maxsize-vecsize ) )
624 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
625 $ iu, thresh, abstol, a, copya, z, 1, 1,
626 $ desca, win( 1+iprepad ), wnew, ifail,
627 $ iclustr, gap, iprepad, ipostpad,
628 $ work( indwork ), llwork, lsyevxsize,
629 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
633 passed =
'FAILED stest 2'
634 maxtstnrm =
max( tstnrm, maxtstnrm )
635 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
647 $ iseed, win( 1+iprepad ), maxsize,
652 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
653 $ iu, thresh, abstol, a, copya, z, 1, 1,
654 $ desca, win( 1+iprepad ), wnew, ifail,
655 $ iclustr, gap, iprepad, ipostpad,
656 $ work( indwork ), llwork, lsyevxsize,
657 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
661 maxtstnrm =
max( tstnrm, maxtstnrm )
662 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
663 passed =
'FAILED stest 3'
680 $ iseed, win( 1+iprepad ), maxsize,
685 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
686 $ iu, thresh, abstol, a, copya, z, 1, 1,
687 $ desca, win( 1+iprepad ), wnew, ifail,
688 $ iclustr, gap, iprepad, ipostpad,
689 $ work( indwork ), llwork, lsyevxsize,
690 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
694 maxtstnrm =
max( tstnrm, maxtstnrm )
695 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
696 passed =
'FAILED stest 4'
713 $ iseed, win( 1+iprepad ), maxsize,
718 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
719 $ iu, thresh, abstol, a, copya, z, 1, 1,
720 $ desca, win( 1+iprepad ), wnew, ifail,
721 $ iclustr, gap, iprepad, ipostpad,
722 $ work( indwork ), llwork, lsyevxsize,
723 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
727 maxtstnrm =
max( tstnrm, maxtstnrm )
728 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
729 passed =
'FAILED stest 5'
745 $ iseed, win( 1+iprepad ), maxsize,
750 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
751 $ iu, thresh, abstol, a, copya, z, 1, 1,
752 $ desca, win( 1+iprepad ), wnew, ifail,
753 $ iclustr, gap, iprepad, ipostpad,
754 $ work( indwork ), llwork, lsyevxsize,
755 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
759 maxtstnrm =
max( tstnrm, maxtstnrm )
760 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
761 passed =
'FAILED stest 6'
777 $ iseed, win( 1+iprepad ), maxsize,
779 lsyevxsize = vecsize + int( dlaran( iseed )*
780 $ dble( maxsize-vecsize ) )
782 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
783 $ iu, thresh, abstol, a, copya, z, 1, 1,
784 $ desca, win( 1+iprepad ), wnew, ifail,
785 $ iclustr, gap, iprepad, ipostpad,
786 $ work( indwork ), llwork, lsyevxsize,
787 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
791 maxtstnrm =
max( tstnrm, maxtstnrm )
792 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
793 passed =
'FAILED stest 7'
809 $ iseed, win( 1+iprepad ), maxsize,
814 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
815 $ iu, thresh, abstol, a, copya, z, 1, 1,
816 $ desca, win( 1+iprepad ), wnew, ifail,
817 $ iclustr, gap, iprepad, ipostpad,
818 $ work( indwork ), llwork, lsyevxsize,
819 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
823 maxtstnrm =
max( tstnrm, maxtstnrm )
824 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
825 passed =
'FAILED stest 8'
841 $ iseed, win( 1+iprepad ), maxsize,
846 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
847 $ iu, thresh, abstol, a, copya, z, 1, 1,
848 $ desca, win( 1+iprepad ), wnew, ifail,
849 $ iclustr, gap, iprepad, ipostpad,
850 $ work( indwork ), llwork, lsyevxsize,
851 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
855 maxtstnrm =
max( tstnrm, maxtstnrm )
856 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
857 passed =
'FAILED stest 9'
874 $ iseed, win( 1+iprepad ), maxsize,
879 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
880 $ iu, thresh, abstol, a, copya, z, 1, 1,
881 $ desca, win( 1+iprepad ), wnew, ifail,
882 $ iclustr, gap, iprepad, ipostpad,
883 $ work( indwork ), llwork, lsyevxsize,
884 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
888 maxtstnrm =
max( tstnrm, maxtstnrm )
889 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
890 passed =
'FAILED stest10'
908 $ iseed, win( 1+iprepad ), maxsize,
911 lsyevxsize = vecsize + int( dlaran( iseed )*
912 $ dble( maxsize-vecsize ) )
914 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
915 $ iu, thresh, abstol, a, copya, z, 1, 1,
916 $ desca, win( 1+iprepad ), wnew, ifail,
917 $ iclustr, gap, iprepad, ipostpad,
918 $ work( indwork ), llwork, lsyevxsize,
919 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
923 maxtstnrm =
max( tstnrm, maxtstnrm )
924 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
925 passed =
'FAILED stest11'
942 $ iseed, win( 1+iprepad ), maxsize,
947 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
948 $ iu, thresh, abstol, a, copya, z, 1, 1,
949 $ desca, win( 1+iprepad ), wnew, ifail,
950 $ iclustr, gap, iprepad, ipostpad,
951 $ work( indwork ), llwork, lsyevxsize,
952 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
956 maxtstnrm =
max( tstnrm, maxtstnrm )
957 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
958 passed =
'FAILED stest12'
976 $ iseed, win( 1+iprepad ), maxsize,
979 lsyevxsize = valsize + int( dlaran( iseed )*
980 $ dble( vecsize-valsize ) )
982 CALL pdsepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
983 $ iu, thresh, abstol, a, copya, z, 1, 1,
984 $ desca, win( 1+iprepad ), wnew, ifail,
985 $ iclustr, gap, iprepad, ipostpad,
986 $ work( indwork ), llwork, lsyevxsize,
987 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
991 maxtstnrm =
max( tstnrm, maxtstnrm )
992 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
993 passed =
'FAILED stest13'
1001 CALL igamx2d( context,
'All',
' ', 1, 1, info, 1, -1, -1, -1, -1,
1004 IF( info.EQ.1 )
THEN
1006 WRITE( nout, fmt = 9994 )
'C '
1007 WRITE( nout, fmt = 9993 )iseedin( 1 )
1008 WRITE( nout, fmt = 9992 )iseedin( 2 )
1009 WRITE( nout, fmt = 9991 )iseedin( 3 )
1010 WRITE( nout, fmt = 9990 )iseedin( 4 )
1011 IF( lsame( uplo,
'L' ) )
THEN
1012 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1014 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1016 IF( lsame( subtests,
'Y' ) )
THEN
1017 WRITE( nout, fmt = 9994 )
' SUBTESTS= ''Y'' '
1019 WRITE( nout, fmt = 9994 )
' SUBTESTS= ''N'' '
1021 WRITE( nout, fmt = 9989 )n
1022 WRITE( nout, fmt = 9988 )nprow
1023 WRITE( nout, fmt = 9987 )npcol
1024 WRITE( nout, fmt = 9986 )nb
1025 WRITE( nout, fmt = 9985 )mattype
1026 WRITE( nout, fmt = 9982 )abstol
1027 WRITE( nout, fmt = 9981 )thresh
1028 WRITE( nout, fmt = 9994 )
'C '
1032 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1033 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1035 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1036 IF( wtime( 1 ).GE.0.0 )
THEN
1037 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1038 $ subtests, wtime( 1 ), ctime( 1 ), maxtstnrm,
1041 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1042 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm, passed
1044 ELSE IF( info.EQ.2 )
THEN
1045 IF( wtime( 1 ).GE.0.0 )
THEN
1046 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1047 $ subtests, wtime( 1 ), ctime( 1 )
1049 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1050 $ subtests, ctime( 1 )
1052 ELSE IF( info.EQ.3 )
THEN
1053 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1061 IF( lsame( hetero,
'N' ) .AND. lsame( subtests,
'N' ) )
THEN
1062 passed =
'PASSED EV'
1067 IF( info.NE.0 )
THEN
1071 passed =
'SKIPPED EV'
1075 CALL pdsyev( jobz, uplo, n, a, 1, 1, desca,
1076 $ work( indwork ), z, 1, 1, desca,
1077 $ work( indwork ), -1, info )
1078 minsize = int( work( indwork ) )
1080 CALL pdsqpsubtst( wknown, jobz, uplo, n, thresh, abstol, a,
1081 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1082 $ ipostpad, work( indwork ), llwork,
1083 $ minsize, res, tstnrm, qtqnrm, nout )
1086 maxtstnrm =
max( tstnrm, maxtstnrm )
1087 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1088 passed =
'FAIL EV test1'
1096 IF( info.EQ.0 )
THEN
1099 CALL pdsyev( jobz, uplo, n, a, 1, 1, desca,
1100 $ work( indwork ), z, 1, 1, desca,
1101 $ work( indwork ), -1, info )
1102 minsize = int( work( indwork ) )
1104 CALL pdsqpsubtst( wknown, jobz, uplo, n, thresh, abstol, a,
1105 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1106 $ ipostpad, work( indwork ), llwork,
1107 $ minsize, res, tstnrm, qtqnrm, nout )
1110 maxtstnrm =
max( tstnrm, maxtstnrm )
1111 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1112 passed =
'FAIL EV test2'
1116 IF( info.EQ.1 )
THEN
1118 WRITE( nout, fmt = 9994 )
'C '
1119 WRITE( nout, fmt = 9993 )iseedin( 1 )
1120 WRITE( nout, fmt = 9992 )iseedin( 2 )
1121 WRITE( nout, fmt = 9991 )iseedin( 3 )
1122 WRITE( nout, fmt = 9990 )iseedin( 4 )
1123 IF( lsame( uplo,
'L' ) )
THEN
1124 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1126 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1128 WRITE( nout, fmt = 9989 )n
1129 WRITE( nout, fmt = 9988 )nprow
1130 WRITE( nout, fmt = 9987 )npcol
1131 WRITE( nout, fmt = 9986 )nb
1132 WRITE( nout, fmt = 9985 )mattype
1133 WRITE( nout, fmt = 9982 )abstol
1134 WRITE( nout, fmt = 9981 )thresh
1135 WRITE( nout, fmt = 9994 )
'C '
1139 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1140 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1142 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1143 IF( wtime( 1 ).GE.0.0 )
THEN
1144 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1145 $ subtests, wtime( 1 ), ctime( 1 ), maxtstnrm,
1148 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1149 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm,
1152 ELSE IF( info.EQ.2 )
THEN
1153 IF( wtime( 1 ).GE.0.0 )
THEN
1154 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1155 $ subtests, wtime( 1 ), ctime( 1 )
1157 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1158 $ subtests, ctime( 1 )
1160 ELSE IF( info.EQ.3 )
THEN
1161 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1170 IF( lsame( hetero,
'N' ) .AND. lsame( subtests,
'N' ) )
THEN
1171 passed =
'PASSED EVD'
1175 IF( info.NE.0 )
THEN
1179 passed =
'SKIPPED EVD'
1182 np = numroc( n, desca( mb_ ), 0, 0, nprow )
1183 nq = numroc( n, desca( nb_ ), 0, 0, npcol )
1184 minsize =
max( 1+6*n+2*np*nq,
1185 $ 3*n +
max( nb*( np+1 ), 3*nb ) ) + 2*n
1187 CALL pdsdpsubtst( wknown, uplo, n, thresh, abstol, a,
1188 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1189 $ ipostpad, work( indwork ), llwork,
1190 $ minsize, iwork, isizesyevd,
1191 $ res, tstnrm, qtqnrm, nout )
1194 maxtstnrm =
max( tstnrm, maxtstnrm )
1195 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1196 passed =
'FAIL EVD test1'
1200 IF( info.EQ.1 )
THEN
1202 WRITE( nout, fmt = 9994 )
'C '
1203 WRITE( nout, fmt = 9993 )iseedin( 1 )
1204 WRITE( nout, fmt = 9992 )iseedin( 2 )
1205 WRITE( nout, fmt = 9991 )iseedin( 3 )
1206 WRITE( nout, fmt = 9990 )iseedin( 4 )
1207 IF( lsame( uplo,
'L' ) )
THEN
1208 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1210 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1212 WRITE( nout, fmt = 9989 )n
1213 WRITE( nout, fmt = 9988 )nprow
1214 WRITE( nout, fmt = 9987 )npcol
1215 WRITE( nout, fmt = 9986 )nb
1216 WRITE( nout, fmt = 9985 )mattype
1217 WRITE( nout, fmt = 9982 )abstol
1218 WRITE( nout, fmt = 9981 )thresh
1219 WRITE( nout, fmt = 9994 )
'C '
1223 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1224 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1226 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1227 IF( wtime( 1 ).GE.0.0 )
THEN
1228 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1229 $ subtests, wtime( 1 ), ctime( 1 ), tstnrm,
1232 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1233 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm,
1236 ELSE IF( info.EQ.2 )
THEN
1237 IF( wtime( 1 ).GE.0.0 )
THEN
1238 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1239 $ subtests, wtime( 1 ), ctime( 1 )
1241 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1242 $ subtests, ctime( 1 )
1244 ELSE IF( info.EQ.3 )
THEN
1245 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1251 9999
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x,
1252 $ f8.2, 1x, f8.2, 1x, g9.2, 1x, g9.2, 1x, a14 )
1253 9998
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
1254 $ 1x, f8.2, 1x, g9.2, 1x, g9.2, a14 )
1255 9997
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, f8.2,
1256 $ 1x, f8.2, 21x,
'Bypassed' )
1257 9996
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
1258 $ 1x, f8.2, 21x,
'Bypassed' )
1259 9995
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 32x,
1260 $
'Bad MEMORY parameters' )
1262 9993
FORMAT(
' ISEED( 1 ) =', i8 )
1263 9992
FORMAT(
' ISEED( 2 ) =', i8 )
1264 9991
FORMAT(
' ISEED( 3 ) =', i8 )
1265 9990
FORMAT(
' ISEED( 4 ) =', i8 )
1266 9989
FORMAT(
' N=', i8 )
1267 9988
FORMAT(
' NPROW=', i8 )
1268 9987
FORMAT(
' NPCOL=', i8 )
1269 9986
FORMAT(
' NB=', i8 )
1270 9985
FORMAT(
' MATTYPE=', i8 )
1271 9984
FORMAT(
' IBTYPE=', i8 )
1272 9983
FORMAT(
' SUBTESTS=', a1 )
1273 9982
FORMAT(
' ABSTOL=', d16.6 )
1274 9981
FORMAT(
' THRESH=', d16.6 )
1275 9980
FORMAT(
' Increase TOTMEM in PDSEPDRIVER' )