1 SUBROUTINE psseptst( 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
19 INTEGER DESCA( * ), ICLUSTR( * ), IFAIL( * ),
20 $ iseed( 4 ), iwork( * )
21 REAL 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 REAL HALF, ONE, TEN, ZERO
202 parameter( zero = 0.0e+0, one = 1.0e+0,
203 $ ten = 10.0e+0, half = 0.5e+0 )
205 parameter( padval = 19.25e+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 REAL ANINV, ANORM, COND, MAXQTQNRM, MAXTSTNRM, OVFL,
227 INTEGER ISEEDIN( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
229 DOUBLE PRECISION CTIME( 10 ), WTIME( 10 )
235 EXTERNAL LSAME, NUMROC, PSLAMCH, SLARAN
238 EXTERNAL blacs_gridinfo, blacs_pinfo, igamx2d, igebr2d,
245 INTRINSIC abs, real, 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 pslasizesqp( desca, iprepad, ipostpad, sizemqrleft,
289 $ sizemqrright, sizeqrf, sizetms, sizeqtq,
290 $ sizechk, sizesyevx, isizesyevx, sizesyev,
291 $ sizesyevd, isizesyevd,
292 $ sizesubtst, 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 = pslamch( context,
'P' )
308 unfl = pslamch( context,
'Safe min' )
310 CALL slabad( unfl, ovfl )
311 rtunfl = sqrt( unfl )
312 rtovfl = sqrt( ovfl )
313 aninv = one / real(
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 pslaset(
'All', n, n, zero, zero, copya, 1, 1, desca )
385 ELSE IF( itype.EQ.2 )
THEN
390 work( indd+i-1 ) = one
392 CALL pslaset(
'All', n, n, zero, one, copya, 1, 1, desca )
395 ELSE IF( itype.EQ.4 )
THEN
399 CALL psfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
400 $ sizetms, iprepad, ipostpad, padval+1.0e+0 )
402 CALL pslatms( 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 pschekpad( desca( ctxt_ ),
'PSLATMS1-WORK', sizetms, 1,
409 $ work( indwork ), sizetms, iprepad, ipostpad,
412 ELSE IF( itype.EQ.5 )
THEN
416 CALL psfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
417 $ sizetms, iprepad, ipostpad, padval+2.0e+0 )
419 CALL pslatms( 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 pschekpad( desca( ctxt_ ),
'PSLATMS2-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 psmatgen( 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 psfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
449 $ sizetms, iprepad, ipostpad, padval+3.0e+0 )
451 CALL pslatms( 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 pschekpad( desca( ctxt_ ),
'PSLATMS3-WORK', sizetms, 1,
459 $ work( indwork ), sizetms, iprepad, ipostpad,
462 ELSE IF( itype.EQ.10 )
THEN
467 CALL pslaset(
'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( slaran( iseed )*real( nloc ) ), n-ngen )
477 CALL slatms( 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 pselset( copya, ngen+1, ngen+1, desca, a( 1, 1 ) )
492 CALL pselset( copya, ngen+i, ngen+i, desca,
494 CALL pselset( copya, ngen+i-1, ngen+i, desca,
496 CALL pselset( 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 psfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
525 $ sizetms, iprepad, ipostpad, padval+4.0e+0 )
527 CALL pslatms( 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 pschekpad( desca( ctxt_ ),
'PSLATMS4-WORK', sizetms, 1,
533 $ work( indwork ), sizetms, iprepad, ipostpad,
546 $
CALL slasrt(
'I', n, work( indd ), iinfo )
557 $ iseed, work( indd ), maxsize, vecsize,
560 lsyevxsize =
min( maxsize, llwork )
562 CALL pssepsubtst( wknown,
'v',
'a', uplo, n, vl, vu, il, iu,
563 $ thresh, abstol, a, copya, z, 1, 1, desca,
564 $ work( indd ), win, ifail, iclustr, gap,
565 $ iprepad, ipostpad, work( indwork ), llwork,
566 $ lsyevxsize, iwork, isizesyevx, res, tstnrm,
574 IF( thresh.LE.zero )
THEN
577 ELSE IF( res.NE.0 )
THEN
583 IF( thresh.GT.zero .AND. lsame( subtests,
'Y' ) )
THEN
592 $ iseed, win( 1+iprepad ), maxsize,
597 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
598 $ iu, thresh, abstol, a, copya, z, 1, 1,
599 $ desca, win( 1+iprepad ), wnew, ifail,
600 $ iclustr, gap, iprepad, ipostpad,
601 $ work( indwork ), llwork, lsyevxsize,
602 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
606 passed =
'FAILED stest 1'
607 maxtstnrm =
max( tstnrm, maxtstnrm )
608 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
619 $ iseed, win( 1+iprepad ), maxsize,
622 lsyevxsize = vecsize + int( slaran( iseed )*
623 $ real( maxsize-vecsize ) )
625 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
626 $ iu, thresh, abstol, a, copya, z, 1, 1,
627 $ desca, win( 1+iprepad ), wnew, ifail,
628 $ iclustr, gap, iprepad, ipostpad,
629 $ work( indwork ), llwork, lsyevxsize,
630 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
634 passed =
'FAILED stest 2'
635 maxtstnrm =
max( tstnrm, maxtstnrm )
636 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
648 $ iseed, win( 1+iprepad ), maxsize,
653 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
654 $ iu, thresh, abstol, a, copya, z, 1, 1,
655 $ desca, win( 1+iprepad ), wnew, ifail,
656 $ iclustr, gap, iprepad, ipostpad,
657 $ work( indwork ), llwork, lsyevxsize,
658 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
662 maxtstnrm =
max( tstnrm, maxtstnrm )
663 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
664 passed =
'FAILED stest 3'
681 $ iseed, win( 1+iprepad ), maxsize,
686 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
687 $ iu, thresh, abstol, a, copya, z, 1, 1,
688 $ desca, win( 1+iprepad ), wnew, ifail,
689 $ iclustr, gap, iprepad, ipostpad,
690 $ work( indwork ), llwork, lsyevxsize,
691 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
695 maxtstnrm =
max( tstnrm, maxtstnrm )
696 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
697 passed =
'FAILED stest 4'
714 $ iseed, win( 1+iprepad ), maxsize,
719 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
720 $ iu, thresh, abstol, a, copya, z, 1, 1,
721 $ desca, win( 1+iprepad ), wnew, ifail,
722 $ iclustr, gap, iprepad, ipostpad,
723 $ work( indwork ), llwork, lsyevxsize,
724 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
728 maxtstnrm =
max( tstnrm, maxtstnrm )
729 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
730 passed =
'FAILED stest 5'
746 $ iseed, win( 1+iprepad ), maxsize,
751 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
752 $ iu, thresh, abstol, a, copya, z, 1, 1,
753 $ desca, win( 1+iprepad ), wnew, ifail,
754 $ iclustr, gap, iprepad, ipostpad,
755 $ work( indwork ), llwork, lsyevxsize,
756 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
760 maxtstnrm =
max( tstnrm, maxtstnrm )
761 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
762 passed =
'FAILED stest 6'
778 $ iseed, win( 1+iprepad ), maxsize,
780 lsyevxsize = vecsize + int( slaran( iseed )*
781 $ real( maxsize-vecsize ) )
783 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
784 $ iu, thresh, abstol, a, copya, z, 1, 1,
785 $ desca, win( 1+iprepad ), wnew, ifail,
786 $ iclustr, gap, iprepad, ipostpad,
787 $ work( indwork ), llwork, lsyevxsize,
788 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
792 maxtstnrm =
max( tstnrm, maxtstnrm )
793 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
794 passed =
'FAILED stest 7'
810 $ iseed, win( 1+iprepad ), maxsize,
815 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
816 $ iu, thresh, abstol, a, copya, z, 1, 1,
817 $ desca, win( 1+iprepad ), wnew, ifail,
818 $ iclustr, gap, iprepad, ipostpad,
819 $ work( indwork ), llwork, lsyevxsize,
820 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
824 maxtstnrm =
max( tstnrm, maxtstnrm )
825 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
826 passed =
'FAILED stest 8'
842 $ iseed, win( 1+iprepad ), maxsize,
847 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
848 $ iu, thresh, abstol, a, copya, z, 1, 1,
849 $ desca, win( 1+iprepad ), wnew, ifail,
850 $ iclustr, gap, iprepad, ipostpad,
851 $ work( indwork ), llwork, lsyevxsize,
852 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
856 maxtstnrm =
max( tstnrm, maxtstnrm )
857 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
858 passed =
'FAILED stest 9'
875 $ iseed, win( 1+iprepad ), maxsize,
880 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
881 $ iu, thresh, abstol, a, copya, z, 1, 1,
882 $ desca, win( 1+iprepad ), wnew, ifail,
883 $ iclustr, gap, iprepad, ipostpad,
884 $ work( indwork ), llwork, lsyevxsize,
885 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
889 maxtstnrm =
max( tstnrm, maxtstnrm )
890 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
891 passed =
'FAILED stest10'
909 $ iseed, win( 1+iprepad ), maxsize,
912 lsyevxsize = vecsize + int( slaran( iseed )*
913 $ real( maxsize-vecsize ) )
915 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
916 $ iu, thresh, abstol, a, copya, z, 1, 1,
917 $ desca, win( 1+iprepad ), wnew, ifail,
918 $ iclustr, gap, iprepad, ipostpad,
919 $ work( indwork ), llwork, lsyevxsize,
920 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
924 maxtstnrm =
max( tstnrm, maxtstnrm )
925 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
926 passed =
'FAILED stest11'
943 $ iseed, win( 1+iprepad ), maxsize,
948 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
949 $ iu, thresh, abstol, a, copya, z, 1, 1,
950 $ desca, win( 1+iprepad ), wnew, ifail,
951 $ iclustr, gap, iprepad, ipostpad,
952 $ work( indwork ), llwork, lsyevxsize,
953 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
957 maxtstnrm =
max( tstnrm, maxtstnrm )
958 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
959 passed =
'FAILED stest12'
977 $ iseed, win( 1+iprepad ), maxsize,
980 lsyevxsize = valsize + int( slaran( iseed )*
981 $ real( vecsize-valsize ) )
983 CALL pssepsubtst( .true., jobz, range, uplo, n, vl, vu, il,
984 $ iu, thresh, abstol, a, copya, z, 1, 1,
985 $ desca, win( 1+iprepad ), wnew, ifail,
986 $ iclustr, gap, iprepad, ipostpad,
987 $ work( indwork ), llwork, lsyevxsize,
988 $ iwork, isizesyevx, res, tstnrm, qtqnrm,
992 maxtstnrm =
max( tstnrm, maxtstnrm )
993 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
994 passed =
'FAILED stest13'
1002 CALL igamx2d( context,
'All',
' ', 1, 1, info, 1, -1, -1, -1, -1,
1005 IF( info.EQ.1 )
THEN
1007 WRITE( nout, fmt = 9994 )
'C '
1008 WRITE( nout, fmt = 9993 )iseedin( 1 )
1009 WRITE( nout, fmt = 9992 )iseedin( 2 )
1010 WRITE( nout, fmt = 9991 )iseedin( 3 )
1011 WRITE( nout, fmt = 9990 )iseedin( 4 )
1012 IF( lsame( uplo,
'L' ) )
THEN
1013 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1015 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1017 IF( lsame( subtests,
'Y' ) )
THEN
1018 WRITE( nout, fmt = 9994 )
' SUBTESTS= ''Y'' '
1020 WRITE( nout, fmt = 9994 )
' SUBTESTS= ''N'' '
1022 WRITE( nout, fmt = 9989 )n
1023 WRITE( nout, fmt = 9988 )nprow
1024 WRITE( nout, fmt = 9987 )npcol
1025 WRITE( nout, fmt = 9986 )nb
1026 WRITE( nout, fmt = 9985 )mattype
1027 WRITE( nout, fmt = 9982 )abstol
1028 WRITE( nout, fmt = 9981 )thresh
1029 WRITE( nout, fmt = 9994 )
'C '
1033 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1034 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1036 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1037 IF( wtime( 1 ).GE.0.0 )
THEN
1038 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1039 $ subtests, wtime( 1 ), ctime( 1 ), maxtstnrm,
1042 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1043 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm, passed
1045 ELSE IF( info.EQ.2 )
THEN
1046 IF( wtime( 1 ).GE.0.0 )
THEN
1047 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1048 $ subtests, wtime( 1 ), ctime( 1 )
1050 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1051 $ subtests, ctime( 1 )
1053 ELSE IF( info.EQ.3 )
THEN
1054 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1062 IF( lsame( hetero,
'N' ) .AND. lsame( subtests,
'N' ) )
THEN
1063 passed =
'PASSED EV'
1068 IF( info.NE.0 )
THEN
1072 passed =
'SKIPPED EV'
1076 CALL pssyev( jobz, uplo, n, a, 1, 1, desca,
1077 $ work( indwork ), z, 1, 1, desca,
1078 $ work( indwork ), -1, info )
1079 minsize = int( work( indwork ) )
1081 CALL pssqpsubtst( wknown, jobz, uplo, n, thresh, abstol, a,
1082 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1083 $ ipostpad, work( indwork ), llwork,
1084 $ minsize, res, tstnrm, qtqnrm, nout )
1087 maxtstnrm =
max( tstnrm, maxtstnrm )
1088 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1089 passed =
'FAIL EV test1'
1097 IF( info.EQ.0 )
THEN
1100 CALL pssyev( jobz, uplo, n, a, 1, 1, desca,
1101 $ work( indwork ), z, 1, 1, desca,
1102 $ work( indwork ), -1, info )
1103 minsize = int( work( indwork ) )
1105 CALL pssqpsubtst( wknown, jobz, uplo, n, thresh, abstol, a,
1106 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1107 $ ipostpad, work( indwork ), llwork,
1108 $ minsize, res, tstnrm, qtqnrm, nout )
1111 maxtstnrm =
max( tstnrm, maxtstnrm )
1112 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1113 passed =
'FAIL EV test2'
1117 IF( info.EQ.1 )
THEN
1119 WRITE( nout, fmt = 9994 )
'C '
1120 WRITE( nout, fmt = 9993 )iseedin( 1 )
1121 WRITE( nout, fmt = 9992 )iseedin( 2 )
1122 WRITE( nout, fmt = 9991 )iseedin( 3 )
1123 WRITE( nout, fmt = 9990 )iseedin( 4 )
1124 IF( lsame( uplo,
'L' ) )
THEN
1125 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1127 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1129 WRITE( nout, fmt = 9989 )n
1130 WRITE( nout, fmt = 9988 )nprow
1131 WRITE( nout, fmt = 9987 )npcol
1132 WRITE( nout, fmt = 9986 )nb
1133 WRITE( nout, fmt = 9985 )mattype
1134 WRITE( nout, fmt = 9982 )abstol
1135 WRITE( nout, fmt = 9981 )thresh
1136 WRITE( nout, fmt = 9994 )
'C '
1140 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1141 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1143 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1144 IF( wtime( 1 ).GE.0.0 )
THEN
1145 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1146 $ subtests, wtime( 1 ), ctime( 1 ), maxtstnrm,
1149 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1150 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm,
1153 ELSE IF( info.EQ.2 )
THEN
1154 IF( wtime( 1 ).GE.0.0 )
THEN
1155 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1156 $ subtests, wtime( 1 ), ctime( 1 )
1158 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1159 $ subtests, ctime( 1 )
1161 ELSE IF( info.EQ.3 )
THEN
1162 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1171 IF( lsame( hetero,
'N' ) .AND. lsame( subtests,
'N' ) )
THEN
1172 passed =
'PASSED EVD'
1176 IF( info.NE.0 )
THEN
1180 passed =
'SKIPPED EVD'
1183 np = numroc( n, desca( mb_ ), 0, 0, nprow )
1184 nq = numroc( n, desca( nb_ ), 0, 0, npcol )
1185 minsize =
max( 1+6*n+2*np*nq,
1186 $ 3*n +
max( nb*( np+1 ), 3*nb ) ) + 2*n
1188 CALL pssdpsubtst( wknown, uplo, n, thresh, abstol, a,
1189 $ copya, z, 1, 1, desca, win, wnew, iprepad,
1190 $ ipostpad, work( indwork ), llwork,
1191 $ minsize, iwork, isizesyevd,
1192 $ res, tstnrm, qtqnrm, nout )
1195 maxtstnrm =
max( tstnrm, maxtstnrm )
1196 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
1197 passed =
'FAIL EVD test1'
1201 IF( info.EQ.1 )
THEN
1203 WRITE( nout, fmt = 9994 )
'C '
1204 WRITE( nout, fmt = 9993 )iseedin( 1 )
1205 WRITE( nout, fmt = 9992 )iseedin( 2 )
1206 WRITE( nout, fmt = 9991 )iseedin( 3 )
1207 WRITE( nout, fmt = 9990 )iseedin( 4 )
1208 IF( lsame( uplo,
'L' ) )
THEN
1209 WRITE( nout, fmt = 9994 )
' UPLO= ''L'' '
1211 WRITE( nout, fmt = 9994 )
' UPLO= ''U'' '
1213 WRITE( nout, fmt = 9989 )n
1214 WRITE( nout, fmt = 9988 )nprow
1215 WRITE( nout, fmt = 9987 )npcol
1216 WRITE( nout, fmt = 9986 )nb
1217 WRITE( nout, fmt = 9985 )mattype
1218 WRITE( nout, fmt = 9982 )abstol
1219 WRITE( nout, fmt = 9981 )thresh
1220 WRITE( nout, fmt = 9994 )
'C '
1224 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
1225 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
1227 IF( info.EQ.0 .OR. info.EQ.1 )
THEN
1228 IF( wtime( 1 ).GE.0.0 )
THEN
1229 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
1230 $ subtests, wtime( 1 ), ctime( 1 ), tstnrm,
1233 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
1234 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm,
1237 ELSE IF( info.EQ.2 )
THEN
1238 IF( wtime( 1 ).GE.0.0 )
THEN
1239 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
1240 $ subtests, wtime( 1 ), ctime( 1 )
1242 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
1243 $ subtests, ctime( 1 )
1245 ELSE IF( info.EQ.3 )
THEN
1246 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
1252 9999
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x,
1253 $ f8.2, 1x, f8.2, 1x, g9.2, 1x, g9.2, 1x, a14 )
1254 9998
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
1255 $ 1x, f8.2, 1x, g9.2, 1x, g9.2, a14 )
1256 9997
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, f8.2,
1257 $ 1x, f8.2, 21x,
'Bypassed' )
1258 9996
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
1259 $ 1x, f8.2, 21x,
'Bypassed' )
1260 9995
FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 32x,
1261 $
'Bad MEMORY parameters' )
1263 9993
FORMAT(
' ISEED( 1 ) =', i8 )
1264 9992
FORMAT(
' ISEED( 2 ) =', i8 )
1265 9991
FORMAT(
' ISEED( 3 ) =', i8 )
1266 9990
FORMAT(
' ISEED( 4 ) =', i8 )
1267 9989
FORMAT(
' N=', i8 )
1268 9988
FORMAT(
' NPROW=', i8 )
1269 9987
FORMAT(
' NPCOL=', i8 )
1270 9986
FORMAT(
' NB=', i8 )
1271 9985
FORMAT(
' MATTYPE=', i8 )
1272 9984
FORMAT(
' IBTYPE=', i8 )
1273 9983
FORMAT(
' SUBTESTS=', a1 )
1274 9982
FORMAT(
' ABSTOL=', d16.6 )
1275 9981
FORMAT(
' THRESH=', d16.6 )
1276 9980
FORMAT(
' Increase TOTMEM in PSSEPDRIVER' )