4 CHARACTER*7 SNAMES( NSUBS )
6 DATA snames/
'PSGEMV ',
'PSSYMV ',
'PSTRMV ',
7 $
'PSTRSV ',
'PSGER ',
'PSSYR ',
119 INTEGER maxtests, maxgrids, gapmul, realsz, totmem,
121 REAL one, padval, zero, rogue
122 parameter( maxtests = 20, maxgrids = 20, gapmul = 10,
123 $ realsz = 4, totmem = 2000000,
124 $ memsiz = totmem / realsz, zero = 0.0e+0,
125 $ one = 1.0e+0, padval = -9923.0e+0,
126 $ nsubs = 7, rogue = -1.0e+10 )
127 INTEGER block_cyclic_2d_inb, csrc_, ctxt_, dlen_,
128 $ dtype_, imb_, inb_, lld_, mb_, m_, nb_, n_,
130 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
131 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
132 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
133 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
136 LOGICAL errflg, sof, tee
137 CHARACTER*1 aform, diag, diagdo, trans, uplo
138 INTEGER csrca, csrcx, csrcy, i, ia, iam, iaseed, ictxt,
139 $ igap, imba, imbx, imby, imida, imidx, imidy,
140 $ inba, inbx, inby, incx, incy, ipa, ipg, ipmata,
141 $ ipmatx, ipmaty, iposta, ipostx, iposty, iprea,
142 $ iprex, iprey, ipx, ipy, iverb, ix, ixseed, iy,
143 $ iyseed, j, ja, jx, jy, k, lda, ldx, ldy, m, ma,
144 $ mba, mbx, mby, memreqd, mpa, mpx, mpy, mx, my,
145 $ mycol, myrow, n, na, nba, nbx, nby, ncola,
146 $ ngrids, nlx, nly, nout, npcol, nprocs, nprow,
147 $ nqa, nqx, nqy, nrowa, ntests, nx, ny, offd,
148 $ rsrca, rsrcx, rsrcy, tskip, tstcnt
149 REAL alpha, beta, scale, thresh
152 LOGICAL ltest( nsubs ), ycheck( nsubs )
153 CHARACTER*1 diagval( maxtests ), tranval( maxtests ),
154 $ uploval( maxtests )
156 INTEGER cscaval( maxtests ), cscxval( maxtests ),
157 $ cscyval( maxtests ), desca( dlen_ ),
158 $ descar( dlen_ ), descx( dlen_ ),
159 $ descxr( dlen_ ), descy( dlen_ ),
160 $ descyr( dlen_ ), iaval( maxtests ), ierr( 6 ),
161 $ imbaval( maxtests ), imbxval( maxtests ),
162 $ imbyval( maxtests ), inbaval( maxtests ),
163 $ inbxval( maxtests ), inbyval( maxtests ),
164 $ incxval( maxtests ), incyval( maxtests ),
165 $ ixval( maxtests ), iyval( maxtests ),
166 $ javal( maxtests ), jxval( maxtests ),
168 INTEGER kfail( nsubs ), kpass( nsubs ), kskip( nsubs ),
169 $ ktests( nsubs ), maval( maxtests ),
170 $ mbaval( maxtests ), mbxval( maxtests ),
171 $ mbyval( maxtests ), mval( maxtests ),
172 $ mxval( maxtests ), myval( maxtests ),
173 $ naval( maxtests ), nbaval( maxtests ),
174 $ nbxval( maxtests ), nbyval( maxtests ),
175 $ nval( maxtests ), nxval( maxtests ),
176 $ nyval( maxtests ), pval( maxtests ),
177 $ qval( maxtests ), rscaval( maxtests ),
178 $ rscxval( maxtests ), rscyval( maxtests )
182 EXTERNAL blacs_exit, blacs_get, blacs_gridexit,
183 $ blacs_gridinfo, blacs_gridinit, blacs_pinfo,
189 $ pssymv, pssyr, pssyr2, pstrmv, pstrsv,
psvprnt,
197 INTRINSIC abs,
max, mod, real
200 CHARACTER*7 snames( nsubs )
203 COMMON /snamec/snames
204 COMMON /infoc/info, nblog
205 COMMON /pberrorc/nout, abrtflg
208 DATA ycheck/.true., .true., .false., .false.,
209 $ .true., .false., .true./
246 CALL blacs_pinfo( iam, nprocs )
248 $ uploval, mval, nval, maval, naval, imbaval,
249 $ mbaval, inbaval, nbaval, rscaval, cscaval,
250 $ iaval, javal, mxval, nxval, imbxval, mbxval,
251 $ inbxval, nbxval, rscxval, cscxval, ixval,
252 $ jxval, incxval, myval, nyval, imbyval,
253 $ mbyval, inbyval, nbyval, rscyval, cscyval,
254 $ iyval, jyval, incyval, maxtests, ngrids,
255 $ pval, maxgrids, qval, maxgrids, nblog, ltest,
256 $ sof, tee, iam, igap, iverb, nprocs, thresh,
260 WRITE( nout, fmt = 9975 )
261 WRITE( nout, fmt = * )
279 IF( nprow.LT.1 )
THEN
281 $
WRITE( nout, fmt = 9999 )
'GRID SIZE',
'NPROW', nprow
283 ELSE IF( npcol.LT.1 )
THEN
285 $
WRITE( nout, fmt = 9999 )
'GRID SIZE',
'NPCOL', npcol
287 ELSE IF( nprow*npcol.GT.nprocs )
THEN
289 $
WRITE( nout, fmt = 9998 ) nprow*npcol, nprocs
293 IF( ierr( 1 ).GT.0 )
THEN
295 $
WRITE( nout, fmt = 9997 )
'GRID'
302 CALL blacs_get( -1, 0, ictxt )
303 CALL blacs_gridinit( ictxt,
'Row-major', nprow, npcol )
304 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
309 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
362 WRITE( nout, fmt = * )
363 WRITE( nout, fmt = 9996 ) tstcnt, nprow, npcol
364 WRITE( nout, fmt = * )
366 WRITE( nout, fmt = 9995 )
367 WRITE( nout, fmt = 9994 )
368 WRITE( nout, fmt = 9995 )
369 WRITE( nout, fmt = 9993 ) m, n, uplo, trans, diag
371 WRITE( nout, fmt = 9995 )
372 WRITE( nout, fmt = 9992 )
373 WRITE( nout, fmt = 9995 )
374 WRITE( nout, fmt = 9991 ) ia, ja, ma, na, imba, inba,
375 $ mba, nba, rsrca, csrca
377 WRITE( nout, fmt = 9995 )
378 WRITE( nout, fmt = 9990 )
379 WRITE( nout, fmt = 9995 )
380 WRITE( nout, fmt = 9989 ) ix, jx, mx, nx, imbx, inbx,
381 $ mbx, nbx, rsrcx, csrcx, incx
383 WRITE( nout, fmt = 9995 )
384 WRITE( nout, fmt = 9988 )
385 WRITE( nout, fmt = 9995 )
386 WRITE( nout, fmt = 9989 ) iy, jy, my, ny, imby, inby,
387 $ mby, nby, rsrcy, csrcy, incy
389 WRITE( nout, fmt = 9995 )
395 IF( .NOT.lsame( uplo,
'U' ).AND.
396 $ .NOT.lsame( uplo,
'L' ) )
THEN
398 $
WRITE( nout, fmt = 9997 )
'UPLO'
403 IF( .NOT.lsame( trans,
'N' ).AND.
404 $ .NOT.lsame( trans,
'T' ).AND.
405 $ .NOT.lsame( trans,
'C' ) )
THEN
407 $
WRITE( nout, fmt = 9997 )
'TRANS'
412 IF( .NOT.lsame( diag ,
'U' ).AND.
413 $ .NOT.lsame( diag ,
'N' ) )
THEN
415 $
WRITE( nout, fmt = 9997 ) trans
416 WRITE( nout, fmt = 9997 )
'DIAG'
424 $ block_cyclic_2d_inb, ma, na, imba, inba,
425 $ mba, nba, rsrca, csrca, mpa, nqa, iprea,
426 $ imida, iposta, igap, gapmul, ierr( 1 ) )
428 $ block_cyclic_2d_inb, mx, nx, imbx, inbx,
429 $ mbx, nbx, rsrcx, csrcx, incx, mpx, nqx,
430 $ iprex, imidx, ipostx, igap, gapmul,
433 $ block_cyclic_2d_inb, my, ny, imby, inby,
434 $ mby, nby, rsrcy, csrcy, incy, mpy, nqy,
435 $ iprey, imidy, iposty, igap, gapmul,
438 IF( ierr( 1 ).GT.0 .OR. ierr( 2 ).GT.0 .OR.
439 $ ierr( 3 ).GT.0 )
THEN
452 ipx = ipa + desca( lld_ )*nqa + iposta + iprex
453 ipy = ipx + descx( lld_ )*nqx + ipostx + iprey
454 ipmata = ipy + descy( lld_ )*nqy + iposty
455 ipmatx = ipmata + ma*na
456 ipmaty = ipmatx + mx*nx
457 ipg = ipmaty +
max( mx*nx, my*ny )
464 memreqd = ipg +
max( m, n ) - 1 +
467 $
max( imby, mby ) ) )
469 IF( memreqd.GT.memsiz )
THEN
471 $
WRITE( nout, fmt = 9986 ) memreqd*realsz
477 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
479 IF( ierr( 1 ).GT.0 )
THEN
481 $
WRITE( nout, fmt = 9987 )
492 IF( .NOT.ltest( k ) )
496 WRITE( nout, fmt = * )
497 WRITE( nout, fmt = 9985 ) snames( k )
505 IF( lsame( trans,
'N' ) )
THEN
512 ELSE IF( k.EQ.5 )
THEN
526 CALL pmdimchk( ictxt, nout, nrowa, ncola,
'A', ia, ja,
528 CALL pvdimchk( ictxt, nout, nlx,
'X', ix, jx, descx,
530 CALL pvdimchk( ictxt, nout, nly,
'Y', iy, jy, descy,
533 IF( ierr( 1 ).NE.0 .OR. ierr( 2 ).NE.0 .OR.
534 $ ierr( 3 ).NE.0 )
THEN
535 kskip( k ) = kskip( k ) + 1
541 IF( k.EQ.2 .OR. k.EQ.6 .OR. k.EQ.7 )
THEN
545 ELSE IF( ( k.EQ.4 ).AND.( lsame( diag,
'N' ) ) )
THEN
555 CALL pslagen( .false., aform, diagdo, offd, ma, na,
556 $ 1, 1, desca, iaseed, mem( ipa ),
558 CALL pslagen( .false.,
'None',
'No diag', 0, mx, nx, 1,
559 $ 1, descx, ixseed, mem( ipx ),
562 $
CALL pslagen( .false.,
'None',
'No diag', 0, my, ny,
563 $ 1, 1, descy, iyseed, mem( ipy ),
568 CALL pb_descset2( descar, ma, na, imba, inba, mba, nba,
569 $ -1, -1, ictxt,
max( 1, ma ) )
570 CALL pslagen( .false., aform, diagdo, offd, ma, na,
571 $ 1, 1, descar, iaseed, mem( ipmata ),
573 CALL pb_descset2( descxr, mx, nx, imbx, inbx, mbx, nbx,
574 $ -1, -1, ictxt,
max( 1, mx ) )
575 CALL pslagen( .false.,
'None',
'No diag', 0, mx, nx, 1,
576 $ 1, descxr, ixseed, mem( ipmatx ),
578 IF( ycheck( k ) )
THEN
581 $ nby, -1, -1, ictxt,
max( 1, my ) )
582 CALL pslagen( .false.,
'None',
'No diag', 0, my, ny,
583 $ 1, 1, descyr, iyseed, mem( ipmaty ),
591 $ nbx, -1, -1, ictxt,
max( 1, mx ) )
592 CALL pslagen( .false.,
'None',
'No diag', 0, mx, nx,
593 $ 1, 1, descyr, ixseed, mem( ipmaty ),
600 IF( ( k.EQ.2 .OR. k.EQ.6 .OR. k.EQ.7 ).AND.
601 $ (
max( nrowa, ncola ).GT.1 ) )
THEN
605 IF( lsame( uplo,
'L' ) )
THEN
609 CALL pslaset(
'Upper', nrowa-1, ncola-1, rogue,
610 $ rogue, mem( ipa ), ia, ja+1, desca )
612 CALL pb_slaset(
'Upper', nrowa-1, ncola-1, 0,
614 $ mem( ipmata+ia-1+ja*lda ), lda )
617 ELSE IF( lsame( uplo,
'U' ) )
THEN
621 CALL pslaset(
'Lower', nrowa-1, ncola-1, rogue,
622 $ rogue, mem( ipa ), ia+1, ja, desca )
624 CALL pb_slaset(
'Lower', nrowa-1, ncola-1, 0,
626 $ mem( ipmata+ia+(ja-1)*lda ),
632 ELSE IF( k.EQ.3 .OR. k.EQ.4 )
THEN
634 IF( lsame( uplo,
'L' ) )
THEN
638 IF( lsame( diag,
'N' ) )
THEN
640 IF(
max( nrowa, ncola ).GT.1 )
THEN
641 CALL pslaset(
'Upper', nrowa-1, ncola-1,
642 $ rogue, rogue, mem( ipa ), ia,
644 CALL pb_slaset(
'Upper', nrowa-1, ncola-1, 0,
646 $ mem( ipmata+ia-1+ja*lda ),
652 CALL pslaset(
'Upper', nrowa, ncola, rogue, one,
653 $ mem( ipa ), ia, ja, desca )
654 CALL pb_slaset(
'Upper', nrowa, ncola, 0, zero,
656 $ mem( ipmata+ia-1+(ja-1)*lda ),
659 $ (
max( nrowa, ncola ).GT.1 ) )
THEN
660 scale = one / real(
max( nrowa, ncola ) )
661 CALL pslascal(
'Lower', nrowa-1, ncola-1,
662 $ scale, mem( ipa ), ia+1, ja,
666 $ mem( ipmata+ia+(ja-1)*lda ),
672 ELSE IF( lsame( uplo,
'U' ) )
THEN
676 IF( lsame( diag,
'N' ) )
THEN
678 IF(
max( nrowa, ncola ).GT.1 )
THEN
679 CALL pslaset(
'Lower', nrowa-1, ncola-1,
680 $ rogue, rogue, mem( ipa ), ia+1,
682 CALL pb_slaset(
'Lower', nrowa-1, ncola-1, 0,
684 $ mem( ipmata+ia+(ja-1)*lda ),
690 CALL pslaset(
'Lower', nrowa, ncola, rogue, one,
691 $ mem( ipa ), ia, ja, desca )
692 CALL pb_slaset(
'Lower', nrowa, ncola, 0, zero,
694 $ mem( ipmata+ia-1+(ja-1)*lda ),
697 $ (
max( nrowa, ncola ).GT.1 ) )
THEN
698 scale = one / real(
max( nrowa, ncola ) )
699 CALL pslascal(
'Upper', nrowa-1, ncola-1,
700 $ scale, mem( ipa ), ia, ja+1,
704 $ mem( ipmata+ia-1+ja*lda ), lda )
715 CALL pb_sfillpad( ictxt, mpa, nqa, mem( ipa-iprea ),
716 $ desca( lld_ ), iprea, iposta, padval )
718 CALL pb_sfillpad( ictxt, mpx, nqx, mem( ipx-iprex ),
719 $ descx( lld_ ), iprex, ipostx, padval )
721 IF( ycheck( k ) )
THEN
722 CALL pb_sfillpad( ictxt, mpy, nqy, mem( ipy-iprey ),
723 $ descy( lld_ ), iprey, iposty,
730 CALL pschkarg2( ictxt, nout, snames( k ), uplo, trans,
731 $ diag, m, n, alpha, ia, ja, desca, ix,
732 $ jx, descx, incx, beta, iy, jy, descy,
737 IF( iverb.EQ.2 )
THEN
738 CALL pb_pslaprnt( nrowa, ncola, mem( ipa ), ia, ja,
739 $ desca, 0, 0,
'PARALLEL_INITIAL_A',
741 ELSE IF( iverb.GE.3 )
THEN
742 CALL pb_pslaprnt( ma, na, mem( ipa ), 1, 1, desca, 0,
743 $ 0,
'PARALLEL_INITIAL_A', nout,
747 IF( iverb.EQ.2 )
THEN
748 IF( incx.EQ.descx( m_ ) )
THEN
751 $
'PARALLEL_INITIAL_X', nout,
756 $
'PARALLEL_INITIAL_X', nout,
759 ELSE IF( iverb.GE.3 )
THEN
760 CALL pb_pslaprnt( mx, nx, mem( ipx ), 1, 1, descx, 0,
761 $ 0,
'PARALLEL_INITIAL_X', nout,
765 IF( ycheck( k ) )
THEN
766 IF( iverb.EQ.2 )
THEN
767 IF( incy.EQ.descy( m_ ) )
THEN
770 $
'PARALLEL_INITIAL_Y', nout,
775 $
'PARALLEL_INITIAL_Y', nout,
778 ELSE IF( iverb.GE.3 )
THEN
780 $ 0, 0,
'PARALLEL_INITIAL_Y', nout,
792 CALL psgemv( trans, m, n, alpha, mem( ipa ), ia, ja,
793 $ desca, mem( ipx ), ix, jx, descx, incx,
794 $ beta, mem( ipy ), iy, jy, descy, incy )
796 ELSE IF( k.EQ.2 )
THEN
800 CALL pssymv( uplo, n, alpha, mem( ipa ), ia, ja,
801 $ desca, mem( ipx ), ix, jx, descx, incx,
802 $ beta, mem( ipy ), iy, jy, descy, incy )
804 ELSE IF( k.EQ.3 )
THEN
808 CALL pstrmv( uplo, trans, diag, n, mem( ipa ), ia, ja,
809 $ desca, mem( ipx ), ix, jx, descx, incx )
811 ELSE IF( k.EQ.4 )
THEN
815 CALL pstrsv( uplo, trans, diag, n, mem( ipa ), ia, ja,
816 $ desca, mem( ipx ), ix, jx, descx, incx )
818 ELSE IF( k.EQ.5 )
THEN
822 CALL psger( m, n, alpha, mem( ipx ), ix, jx, descx,
823 $ incx, mem( ipy ), iy, jy, descy, incy,
824 $ mem( ipa ), ia, ja, desca )
826 ELSE IF( k.EQ.6 )
THEN
830 CALL pssyr( uplo, n, alpha, mem( ipx ), ix, jx, descx,
831 $ incx, mem( ipa ), ia, ja, desca )
833 ELSE IF( k.EQ.7 )
THEN
837 CALL pssyr2( uplo, n, alpha, mem( ipx ), ix, jx,
838 $ descx, incx, mem( ipy ), iy, jy, descy,
839 $ incy, mem( ipa ), ia, ja, desca )
846 kskip( k ) = kskip( k ) + 1
848 $
WRITE( nout, fmt = 9974 ) info
855 $ mem( ipa-iprea ), desca( lld_ ), iprea,
859 $ mem( ipx-iprex ), descx( lld_ ), iprex,
862 IF( ycheck( k ) )
THEN
864 $ mem( ipy-iprey ), descy( lld_ ),
865 $ iprey, iposty, padval )
871 $ n, alpha, mem( ipmata ), mem( ipa ),
872 $ ia, ja, desca, mem( ipmatx ),
873 $ mem( ipx ), ix, jx, descx, incx,
874 $ beta, mem( ipmaty ), mem( ipy ), iy,
875 $ jy, descy, incy, thresh, rogue,
877 IF( mod( info, 2 ).EQ.1 )
THEN
879 ELSE IF( mod( info / 2, 2 ).EQ.1 )
THEN
881 ELSE IF( mod( info / 4, 2 ).EQ.1 )
THEN
883 ELSE IF( info.NE.0 )
THEN
892 CALL pschkarg2( ictxt, nout, snames( k ), uplo, trans,
893 $ diag, m, n, alpha, ia, ja, desca, ix,
894 $ jx, descx, incx, beta, iy, jy, descy,
899 CALL pschkmout( nrowa, ncola, mem( ipmata ), mem( ipa ),
900 $ ia, ja, desca, ierr( 4 ) )
901 CALL pschkvout( nlx, mem( ipmatx ), mem( ipx ), ix, jx,
902 $ descx, incx, ierr( 5 ) )
904 IF( ierr( 4 ).NE.0 )
THEN
906 $
WRITE( nout, fmt = 9982 )
'PARALLEL_A',
910 IF( ierr( 5 ).NE.0 )
THEN
912 $
WRITE( nout, fmt = 9982 )
'PARALLEL_X',
916 IF( ycheck( k ) )
THEN
917 CALL pschkvout( nly, mem( ipmaty ), mem( ipy ), iy,
918 $ jy, descy, incy, ierr( 6 ) )
919 IF( ierr( 6 ).NE.0 )
THEN
921 $
WRITE( nout, fmt = 9982 )
'PARALLEL_Y',
928 IF( info.NE.0 .OR. ierr( 1 ).NE.0 .OR.
929 $ ierr( 2 ).NE.0 .OR. ierr( 3 ).NE.0 .OR.
930 $ ierr( 4 ).NE.0 .OR. ierr( 5 ).NE.0 .OR.
931 $ ierr( 6 ).NE.0 )
THEN
933 $
WRITE( nout, fmt = 9984 ) snames( k )
934 kfail( k ) = kfail( k ) + 1
938 $
WRITE( nout, fmt = 9983 ) snames( k )
939 kpass( k ) = kpass( k ) + 1
944 IF( iverb.GE.1 .AND. errflg )
THEN
945 IF( ierr( 4 ).NE.0 .OR. iverb.GE.3 )
THEN
946 CALL psmprnt( ictxt, nout, ma, na, mem( ipmata ),
947 $ lda, 0, 0,
'SERIAL_A' )
949 $ 0, 0,
'PARALLEL_A', nout,
951 ELSE IF( ierr( 1 ).NE.0 )
THEN
952 IF( ( nrowa.GT.0 ).AND.( ncola.GT.0 ) )
953 $
CALL psmprnt( ictxt, nout, nrowa, ncola,
954 $ mem( ipmata+ia-1+(ja-1)*lda ),
955 $ lda, 0, 0,
'SERIAL_A' )
956 CALL pb_pslaprnt( nrowa, ncola, mem( ipa ), ia, ja,
957 $ desca, 0, 0,
'PARALLEL_A',
958 $ nout, mem( ipmata ) )
960 IF( ierr( 5 ).NE.0 .OR. iverb.GE.3 )
THEN
961 CALL psmprnt( ictxt, nout, mx, nx, mem( ipmatx ),
962 $ ldx, 0, 0,
'SERIAL_X' )
964 $ 0, 0,
'PARALLEL_X', nout,
966 ELSE IF( ierr( 2 ).NE.0 )
THEN
968 $
CALL psvprnt( ictxt, nout, nlx,
969 $ mem( ipmatx+ix-1+(jx-1)*ldx ),
970 $ incx, 0, 0,
'SERIAL_X' )
971 IF( incx.EQ.descx( m_ ) )
THEN
973 $ descx, 0, 0,
'PARALLEL_X',
974 $ nout, mem( ipmatx ) )
977 $ descx, 0, 0,
'PARALLEL_X',
978 $ nout, mem( ipmatx ) )
981 IF( ycheck( k ) )
THEN
982 IF( ierr( 6 ).NE.0 .OR. iverb.GE.3 )
THEN
983 CALL psmprnt( ictxt, nout, my, ny,
984 $ mem( ipmaty ), ldy, 0, 0,
987 $ descy, 0, 0,
'PARALLEL_Y',
988 $ nout, mem( ipmatx ) )
989 ELSE IF( ierr( 3 ).NE.0 )
THEN
991 $
CALL psvprnt( ictxt, nout, nly,
992 $ mem( ipmaty+iy-1+(jy-1)*ldy ),
993 $ incy, 0, 0,
'SERIAL_Y' )
994 IF( incy.EQ.descy( m_ ) )
THEN
996 $ descy, 0, 0,
'PARALLEL_Y',
997 $ nout, mem( ipmatx ) )
1000 $ descy, 0, 0,
'PARALLEL_Y',
1001 $ nout, mem( ipmatx ) )
1009 IF( sof.AND.errflg )
1014 40
IF( iam.EQ.0 )
THEN
1015 WRITE( nout, fmt = * )
1016 WRITE( nout, fmt = 9981 ) j
1021 CALL blacs_gridexit( ictxt )
1032 IF( ltest( i ) )
THEN
1033 kskip( i ) = kskip( i ) + tskip
1034 ktests( i ) = kskip( i ) + kfail( i ) + kpass( i )
1041 WRITE( nout, fmt = * )
1042 WRITE( nout, fmt = 9977 )
1043 WRITE( nout, fmt = * )
1044 WRITE( nout, fmt = 9979 )
1045 WRITE( nout, fmt = 9978 )
1048 WRITE( nout, fmt = 9980 )
'|', snames( i ), ktests( i ),
1049 $ kpass( i ), kfail( i ), kskip( i )
1051 WRITE( nout, fmt = * )
1052 WRITE( nout, fmt = 9976 )
1053 WRITE( nout, fmt = * )
1057 CALL blacs_exit( 0 )
1059 9999
FORMAT(
'ILLEGAL ', a,
': ', a,
' = ', i10,
1060 $
' should be at least 1' )
1061 9998
FORMAT(
'ILLEGAL GRID: NPROW*NPCOL = ', i4,
1062 $
'. It can be at most', i4 )
1063 9997
FORMAT(
'Bad ', a,
' parameters: going on to next test case.' )
1064 9996
FORMAT( 2x,
'Test number ', i4 ,
' started on a ', i6,
' x ',
1065 $ i6,
' process grid.' )
1066 9995
FORMAT( 2x,
' ------------------------------------------------',
1067 $
'--------------------------' )
1068 9994
FORMAT( 2x,
' M N UPLO TRANS DIAG' )
1069 9993
FORMAT( 5x,i6,1x,i6,9x,a1,11x,a1,10x,a1 )
1070 9992
FORMAT( 2x,
' IA JA MA NA IMBA INBA',
1071 $
' MBA NBA RSRCA CSRCA' )
1072 9991
FORMAT( 5x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,
1074 9990
FORMAT( 2x,
' IX JX MX NX IMBX INBX',
1075 $
' MBX NBX RSRCX CSRCX INCX' )
1076 9989
FORMAT( 5x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,
1077 $ 1x,i5,1x,i5,1x,i6 )
1078 9988
FORMAT( 2x,
' IY JY MY NY IMBY INBY',
1079 $
' MBY NBY RSRCY CSRCY INCY' )
1080 9987
FORMAT(
'Not enough memory for this test: going on to',
1081 $
' next test case.' )
1082 9986
FORMAT(
'Not enough memory. Need: ', i12 )
1083 9985
FORMAT( 2x,
' Tested Subroutine: ', a )
1084 9984
FORMAT( 2x,
' ***** Computational check: ', a,
' ',
1085 $
' FAILED ',
' *****' )
1086 9983
FORMAT( 2x,
' ***** Computational check: ', a,
' ',
1087 $
' PASSED ',
' *****' )
1088 9982
FORMAT( 2x,
' ***** ERROR ***** Matrix operand ', a,
1089 $
' modified by ', a,
' *****' )
1090 9981
FORMAT( 2x,
'Test number ', i4,
' completed.' )
1091 9980
FORMAT( 2x,a1,2x,a7,8x,i4,6x,i4,5x,i4,4x,i4 )
1092 9979
FORMAT( 2x,
' SUBROUTINE TOTAL TESTS PASSED FAILED ',
1094 9978
FORMAT( 2x,
' ---------- ----------- ------ ------ ',
1096 9977
FORMAT( 2x,
'Testing Summary')
1097 9976
FORMAT( 2x,
'End of Tests.' )
1098 9975
FORMAT( 2x,
'Tests started.' )
1099 9974
FORMAT( 2x,
' ***** Operation not supported, error code: ',
1107 SUBROUTINE psbla2tstinfo( SUMMRY, NOUT, NMAT, DIAGVAL, TRANVAL,
1108 $ UPLOVAL, MVAL, NVAL, MAVAL, NAVAL,
1109 $ IMBAVAL, MBAVAL, INBAVAL, NBAVAL,
1110 $ RSCAVAL, CSCAVAL, IAVAL, JAVAL,
1111 $ MXVAL, NXVAL, IMBXVAL, MBXVAL,
1112 $ INBXVAL, NBXVAL, RSCXVAL, CSCXVAL,
1113 $ IXVAL, JXVAL, INCXVAL, MYVAL, NYVAL,
1114 $ IMBYVAL, MBYVAL, INBYVAL, NBYVAL,
1115 $ RSCYVAL, CSCYVAL, IYVAL, JYVAL,
1116 $ INCYVAL, LDVAL, NGRIDS, PVAL, LDPVAL,
1117 $ QVAL, LDQVAL, NBLOG, LTEST, SOF, TEE,
1118 $ IAM, IGAP, IVERB, NPROCS, THRESH, ALPHA,
1128 INTEGER IAM, IGAP, IVERB, LDPVAL, LDQVAL, LDVAL, NBLOG,
1129 $ NGRIDS, NMAT, NOUT, NPROCS
1130 REAL ALPHA, BETA, THRESH
1133 CHARACTER*( * ) SUMMRY
1134 CHARACTER*1 DIAGVAL( LDVAL ), TRANVAL( LDVAL ),
1137 INTEGER CSCAVAL( LDVAL ), CSCXVAL( LDVAL ),
1138 $ CSCYVAL( LDVAL ), IAVAL( LDVAL ),
1139 $ imbaval( ldval ), imbxval( ldval ),
1140 $ imbyval( ldval ), inbaval( ldval ),
1141 $ inbxval( ldval ), inbyval( ldval ),
1142 $ incxval( ldval ), incyval( ldval ),
1143 $ ixval( ldval ), iyval( ldval ), javal( ldval ),
1144 $ jxval( ldval ), jyval( ldval ), maval( ldval ),
1145 $ mbaval( ldval ), mbxval( ldval ),
1146 $ mbyval( ldval ), mval( ldval ), mxval( ldval ),
1147 $ myval( ldval ), naval( ldval ),
1148 $ nbaval( ldval ), nbxval( ldval ),
1149 $ nbyval( ldval ), nval( ldval ), nxval( ldval ),
1150 $ nyval( ldval ), pval( ldpval ), qval( ldqval ),
1151 $ rscaval( ldval ), rscxval( ldval ),
1152 $ rscyval( ldval ), work( * )
1439 PARAMETER ( NIN = 11, nsubs = 7 )
1448 CHARACTER*79 USRINFO
1451 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
1452 $ blacs_gridinit, blacs_setup,
icopy, igebr2d,
1453 $ igebs2d, sgebr2d, sgebs2d
1461 INTRINSIC char, ichar,
max,
min
1464 CHARACTER*7 SNAMES( NSUBS )
1465 COMMON /SNAMEC/SNAMES
1476 OPEN( nin, file=
'PSBLAS2TST.dat', status=
'OLD' )
1477 READ( nin, fmt = * ) summry
1482 READ( nin, fmt = 9999 ) usrinfo
1486 READ( nin, fmt = * ) summry
1487 READ( nin, fmt = * ) nout
1488 IF( nout.NE.0 .AND. nout.NE.6 )
1489 $
OPEN( nout, file = summry, status =
'UNKNOWN' )
1495 READ( nin, fmt = * ) sof
1499 READ( nin, fmt = * ) tee
1503 READ( nin, fmt = * ) iverb
1504 IF( iverb.LT.0 .OR. iverb.GT.3 )
1509 READ( nin, fmt = * ) igap
1515 READ( nin, fmt = * ) thresh
1521 READ( nin, fmt = * ) nblog
1527 READ( nin, fmt = * ) ngrids
1528 IF( ngrids.LT.1 .OR. ngrids.GT.ldpval )
THEN
1529 WRITE( nout, fmt = 9998 )
'Grids', ldpval
1531 ELSE IF( ngrids.GT.ldqval )
THEN
1532 WRITE( nout, fmt = 9998 )
'Grids', ldqval
1538 READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
1539 READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
1543 READ( nin, fmt = * ) alpha
1544 READ( nin, fmt = * ) beta
1548 READ( nin, fmt = * ) nmat
1549 IF( nmat.LT.1 .OR. nmat.GT.ldval )
THEN
1550 WRITE( nout, fmt = 9998 )
'Tests', ldval
1556 READ( nin, fmt = * ) ( uploval( i ), i = 1, nmat )
1557 READ( nin, fmt = * ) ( tranval( i ), i = 1, nmat )
1558 READ( nin, fmt = * ) ( diagval( i ), i = 1, nmat )
1559 READ( nin, fmt = * ) ( mval( i ), i = 1, nmat )
1560 READ( nin, fmt = * ) ( nval( i ), i = 1, nmat )
1561 READ( nin, fmt = * ) ( maval( i ), i = 1, nmat )
1562 READ( nin, fmt = * ) ( naval( i ), i = 1, nmat )
1563 READ( nin, fmt = * ) ( imbaval( i ), i = 1, nmat )
1564 READ( nin, fmt = * ) ( inbaval( i ), i = 1, nmat )
1565 READ( nin, fmt = * ) ( mbaval( i ), i = 1, nmat )
1566 READ( nin, fmt = * ) ( nbaval( i ), i = 1, nmat )
1567 READ( nin, fmt = * ) ( rscaval( i ), i = 1, nmat )
1568 READ( nin, fmt = * ) ( cscaval( i ), i = 1, nmat )
1569 READ( nin, fmt = * ) ( iaval( i ), i = 1, nmat )
1570 READ( nin, fmt = * ) ( javal( i ), i = 1, nmat )
1571 READ( nin, fmt = * ) ( mxval( i ), i = 1, nmat )
1572 READ( nin, fmt = * ) ( nxval( i ), i = 1, nmat )
1573 READ( nin, fmt = * ) ( imbxval( i ), i = 1, nmat )
1574 READ( nin, fmt = * ) ( inbxval( i ), i = 1, nmat )
1575 READ( nin, fmt = * ) ( mbxval( i ), i = 1, nmat )
1576 READ( nin, fmt = * ) ( nbxval( i ), i = 1, nmat )
1577 READ( nin, fmt = * ) ( rscxval( i ), i = 1, nmat )
1578 READ( nin, fmt = * ) ( cscxval( i ), i = 1, nmat )
1579 READ( nin, fmt = * ) ( ixval( i ), i = 1, nmat )
1580 READ( nin, fmt = * ) ( jxval( i ), i = 1, nmat )
1581 READ( nin, fmt = * ) ( incxval( i ), i = 1, nmat )
1582 READ( nin, fmt = * ) ( myval( i ), i = 1, nmat )
1583 READ( nin, fmt = * ) ( nyval( i ), i = 1, nmat )
1584 READ( nin, fmt = * ) ( imbyval( i ), i = 1, nmat )
1585 READ( nin, fmt = * ) ( inbyval( i ), i = 1, nmat )
1586 READ( nin, fmt = * ) ( mbyval( i ), i = 1, nmat )
1587 READ( nin, fmt = * ) ( nbyval( i ), i = 1, nmat )
1588 READ( nin, fmt = * ) ( rscyval( i ), i = 1, nmat )
1589 READ( nin, fmt = * ) ( cscyval( i ), i = 1, nmat )
1590 READ( nin, fmt = * ) ( iyval( i ), i = 1, nmat )
1591 READ( nin, fmt = * ) ( jyval( i ), i = 1, nmat )
1592 READ( nin, fmt = * ) ( incyval( i ), i = 1, nmat )
1598 ltest( i ) = .false.
1601 READ( nin, fmt = 9996,
END = 50 ) SNAMET, ltestt
1603 IF( snamet.EQ.snames( i ) )
1607 WRITE( nout, fmt = 9995 )snamet
1623 IF( nprocs.LT.1 )
THEN
1626 nprocs =
max( nprocs, pval( i )*qval( i ) )
1628 CALL blacs_setup( iam, nprocs )
1634 CALL blacs_get( -1, 0, ictxt )
1635 CALL blacs_gridinit( ictxt,
'Row-major', 1, nprocs )
1643 CALL sgebs2d( ictxt,
'All',
' ', 1, 1, thresh, 1 )
1644 CALL sgebs2d( ictxt,
'All',
' ', 1, 1, alpha, 1 )
1645 CALL sgebs2d( ictxt,
'All',
' ', 1, 1, beta, 1 )
1650 CALL igebs2d( ictxt,
'All',
' ', 3, 1, work, 3 )
1670 work( i ) = ichar( diagval( j ) )
1671 work( i+1 ) = ichar( tranval( j ) )
1672 work( i+2 ) = ichar( uploval( j ) )
1675 CALL icopy( ngrids, pval, 1, work( i ), 1 )
1677 CALL icopy( ngrids, qval, 1, work( i ), 1 )
1679 CALL icopy( nmat, mval, 1, work( i ), 1 )
1681 CALL icopy( nmat, nval, 1, work( i ), 1 )
1683 CALL icopy( nmat, maval, 1, work( i ), 1 )
1685 CALL icopy( nmat, naval, 1, work( i ), 1 )
1687 CALL icopy( nmat, imbaval, 1, work( i ), 1 )
1689 CALL icopy( nmat, inbaval, 1, work( i ), 1 )
1691 CALL icopy( nmat, mbaval, 1, work( i ), 1 )
1693 CALL icopy( nmat, nbaval, 1, work( i ), 1 )
1695 CALL icopy( nmat, rscaval, 1, work( i ), 1 )
1697 CALL icopy( nmat, cscaval, 1, work( i ), 1 )
1699 CALL icopy( nmat, iaval, 1, work( i ), 1 )
1701 CALL icopy( nmat, javal, 1, work( i ), 1 )
1703 CALL icopy( nmat, mxval, 1, work( i ), 1 )
1705 CALL icopy( nmat, nxval, 1, work( i ), 1 )
1707 CALL icopy( nmat, imbxval, 1, work( i ), 1 )
1709 CALL icopy( nmat, inbxval, 1, work( i ), 1 )
1711 CALL icopy( nmat, mbxval, 1, work( i ), 1 )
1713 CALL icopy( nmat, nbxval, 1, work( i ), 1 )
1715 CALL icopy( nmat, rscxval, 1, work( i ), 1 )
1717 CALL icopy( nmat, cscxval, 1, work( i ), 1 )
1719 CALL icopy( nmat, ixval, 1, work( i ), 1 )
1721 CALL icopy( nmat, jxval, 1, work( i ), 1 )
1723 CALL icopy( nmat, incxval, 1, work( i ), 1 )
1725 CALL icopy( nmat, myval, 1, work( i ), 1 )
1727 CALL icopy( nmat, nyval, 1, work( i ), 1 )
1729 CALL icopy( nmat, imbyval, 1, work( i ), 1 )
1731 CALL icopy( nmat, inbyval, 1, work( i ), 1 )
1733 CALL icopy( nmat, mbyval, 1, work( i ), 1 )
1735 CALL icopy( nmat, nbyval, 1, work( i ), 1 )
1737 CALL icopy( nmat, rscyval, 1, work( i ), 1 )
1739 CALL icopy( nmat, cscyval, 1, work( i ), 1 )
1741 CALL icopy( nmat, iyval, 1, work( i ), 1 )
1743 CALL icopy( nmat, jyval, 1, work( i ), 1 )
1745 CALL icopy( nmat, incyval, 1, work( i ), 1 )
1749 IF( ltest( j ) )
THEN
1757 CALL igebs2d( ictxt,
'All',
' ', i, 1, work, i )
1761 WRITE( nout, fmt = 9999 )
'Level 2 PBLAS testing program.'
1762 WRITE( nout, fmt = 9999 ) usrinfo
1763 WRITE( nout, fmt = * )
1764 WRITE( nout, fmt = 9999 )
1765 $
'Tests of the real single precision '//
1767 WRITE( nout, fmt = * )
1768 WRITE( nout, fmt = 9993 ) nmat
1769 WRITE( nout, fmt = 9979 ) nblog
1770 WRITE( nout, fmt = 9992 ) ngrids
1771 WRITE( nout, fmt = 9990 )
1772 $
'P', ( pval(i), i = 1,
min(ngrids, 5) )
1774 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
1775 $
min( 10, ngrids ) )
1777 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
1778 $
min( 15, ngrids ) )
1780 $
WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
1781 WRITE( nout, fmt = 9990 )
1782 $
'Q', ( qval(i), i = 1,
min(ngrids, 5) )
1784 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
1785 $
min( 10, ngrids ) )
1787 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
1788 $
min( 15, ngrids ) )
1790 $
WRITE( nout, fmt = 9991 ) ( qval(i), i = 16, ngrids )
1791 WRITE( nout, fmt = 9988 ) sof
1792 WRITE( nout, fmt = 9987 ) tee
1793 WRITE( nout, fmt = 9983 ) igap
1794 WRITE( nout, fmt = 9986 ) iverb
1795 WRITE( nout, fmt = 9980 ) thresh
1796 WRITE( nout, fmt = 9982 ) alpha
1797 WRITE( nout, fmt = 9981 ) beta
1798 IF( ltest( 1 ) )
THEN
1799 WRITE( nout, fmt = 9985 ) snames( 1 ),
' ... Yes'
1801 WRITE( nout, fmt = 9985 ) snames( 1 ),
' ... No '
1804 IF( ltest( i ) )
THEN
1805 WRITE( nout, fmt = 9984 ) snames( i ),
' ... Yes'
1807 WRITE( nout, fmt = 9984 ) snames( i ),
' ... No '
1810 WRITE( nout, fmt = 9994 ) eps
1811 WRITE( nout, fmt = * )
1818 $
CALL blacs_setup( iam, nprocs )
1823 CALL blacs_get( -1, 0, ictxt )
1824 CALL blacs_gridinit( ictxt,
'Row-major', 1, nprocs )
1830 CALL sgebr2d( ictxt,
'All',
' ', 1, 1, thresh, 1, 0, 0 )
1831 CALL sgebr2d( ictxt,
'All',
' ', 1, 1, alpha, 1, 0, 0 )
1832 CALL sgebr2d( ictxt,
'All',
' ', 1, 1, beta, 1, 0, 0 )
1834 CALL igebr2d( ictxt,
'All',
' ', 3, 1, work, 3, 0, 0 )
1839 i = 2*ngrids + 37*nmat + nsubs + 4
1840 CALL igebr2d( ictxt,
'All',
' ', i, 1, work, i, 0, 0 )
1843 IF( work( i ).EQ.1 )
THEN
1849 IF( work( i ).EQ.1 )
THEN
1860 diagval( j ) = char( work( i ) )
1861 tranval( j ) = char( work( i+1 ) )
1862 uploval( j ) = char( work( i+2 ) )
1865 CALL icopy( ngrids, work( i ), 1, pval, 1 )
1867 CALL icopy( ngrids, work( i ), 1, qval, 1 )
1869 CALL icopy( nmat, work( i ), 1, mval, 1 )
1871 CALL icopy( nmat, work( i ), 1, nval, 1 )
1873 CALL icopy( nmat, work( i ), 1, maval, 1 )
1875 CALL icopy( nmat, work( i ), 1, naval, 1 )
1877 CALL icopy( nmat, work( i ), 1, imbaval, 1 )
1879 CALL icopy( nmat, work( i ), 1, inbaval, 1 )
1881 CALL icopy( nmat, work( i ), 1, mbaval, 1 )
1883 CALL icopy( nmat, work( i ), 1, nbaval, 1 )
1885 CALL icopy( nmat, work( i ), 1, rscaval, 1 )
1887 CALL icopy( nmat, work( i ), 1, cscaval, 1 )
1889 CALL icopy( nmat, work( i ), 1, iaval, 1 )
1891 CALL icopy( nmat, work( i ), 1, javal, 1 )
1893 CALL icopy( nmat, work( i ), 1, mxval, 1 )
1895 CALL icopy( nmat, work( i ), 1, nxval, 1 )
1897 CALL icopy( nmat, work( i ), 1, imbxval, 1 )
1899 CALL icopy( nmat, work( i ), 1, inbxval, 1 )
1901 CALL icopy( nmat, work( i ), 1, mbxval, 1 )
1903 CALL icopy( nmat, work( i ), 1, nbxval, 1 )
1905 CALL icopy( nmat, work( i ), 1, rscxval, 1 )
1907 CALL icopy( nmat, work( i ), 1, cscxval, 1 )
1909 CALL icopy( nmat, work( i ), 1, ixval, 1 )
1911 CALL icopy( nmat, work( i ), 1, jxval, 1 )
1913 CALL icopy( nmat, work( i ), 1, incxval, 1 )
1915 CALL icopy( nmat, work( i ), 1, myval, 1 )
1917 CALL icopy( nmat, work( i ), 1, nyval, 1 )
1919 CALL icopy( nmat, work( i ), 1, imbyval, 1 )
1921 CALL icopy( nmat, work( i ), 1, inbyval, 1 )
1923 CALL icopy( nmat, work( i ), 1, mbyval, 1 )
1925 CALL icopy( nmat, work( i ), 1, nbyval, 1 )
1927 CALL icopy( nmat, work( i ), 1, rscyval, 1 )
1929 CALL icopy( nmat, work( i ), 1, cscyval, 1 )
1931 CALL icopy( nmat, work( i ), 1, iyval, 1 )
1933 CALL icopy( nmat, work( i ), 1, jyval, 1 )
1935 CALL icopy( nmat, work( i ), 1, incyval, 1 )
1939 IF( work( i ).EQ.1 )
THEN
1942 ltest( j ) = .false.
1949 CALL blacs_gridexit( ictxt )
1953 120
WRITE( nout, fmt = 9997 )
1955 IF( nout.NE.6 .AND. nout.NE.0 )
1957 CALL blacs_abort( ictxt, 1 )
1962 9998
FORMAT(
' Number of values of ',5a,
' is less than 1 or greater ',
1964 9997
FORMAT(
' Illegal input in file ',40a,
'. Aborting run.' )
1965 9996
FORMAT( a7, l2 )
1966 9995
FORMAT(
' Subprogram name ', a7,
' not recognized',
1967 $ /
' ******* TESTS ABANDONED *******' )
1968 9994
FORMAT( 2x,
'Relative machine precision (eps) is taken to be ',
1970 9993
FORMAT( 2x,
'Number of Tests : ', i6 )
1971 9992
FORMAT( 2x,
'Number of process grids : ', i6 )
1972 9991
FORMAT( 2x,
' : ', 5i6 )
1973 9990
FORMAT( 2x, a1,
' : ', 5i6 )
1974 9988
FORMAT( 2x,
'Stop on failure flag : ', l6 )
1975 9987
FORMAT( 2x,
'Test for error exits flag : ', l6 )
1976 9986
FORMAT( 2x,
'Verbosity level : ', i6 )
1977 9985
FORMAT( 2x,
'Routines to be tested : ', a, a8 )
1978 9984
FORMAT( 2x,
' ', a, a8 )
1979 9983
FORMAT( 2x,
'Leading dimension gap : ', i6 )
1980 9982
FORMAT( 2x,
'Alpha : ', g16.6 )
1981 9981
FORMAT( 2x,
'Beta : ', g16.6 )
1982 9980
FORMAT( 2x,
'Threshold value : ', g16.6 )
1983 9979
FORMAT( 2x,
'Logical block size : ', i6 )
1996 INTEGER INOUT, NPROCS
2066 PARAMETER ( NSUBS = 7 )
2070 INTEGER I, ICTXT, MYCOL, MYROW, NPCOL, NPROW
2073 INTEGER SCODE( NSUBS )
2076 EXTERNAL BLACS_GET, BLACS_GRIDEXIT, BLACS_GRIDINFO,
2077 $ blacs_gridinit,
psdimee, psgemv, psger,
2084 CHARACTER*7 SNAMES( NSUBS )
2085 COMMON /snamec/snames
2086 COMMON /pberrorc/nout, abrtflg
2089 DATA scode/21, 22, 23, 23, 24, 25, 27/
2096 CALL blacs_get( -1, 0, ictxt )
2097 CALL blacs_gridinit( ictxt,
'Row-major', 1, nprocs )
2098 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
2111 IF( ltest( i ) )
THEN
2112 CALL psoptee( ictxt, nout, psgemv, scode( i ), snames( i ) )
2113 CALL psdimee( ictxt, nout, psgemv, scode( i ), snames( i ) )
2114 CALL psmatee( ictxt, nout, psgemv, scode( i ), snames( i ) )
2115 CALL psvecee( ictxt, nout, psgemv, scode( i ), snames( i ) )
2121 IF( ltest( i ) )
THEN
2122 CALL psoptee( ictxt, nout, pssymv, scode( i ), snames( i ) )
2123 CALL psdimee( ictxt, nout, pssymv, scode( i ), snames( i ) )
2124 CALL psmatee( ictxt, nout, pssymv, scode( i ), snames( i ) )
2125 CALL psvecee( ictxt, nout, pssymv, scode( i ), snames( i ) )
2131 IF( ltest( i ) )
THEN
2132 CALL psoptee( ictxt, nout, pstrmv, scode( i ), snames( i ) )
2133 CALL psdimee( ictxt, nout, pstrmv, scode( i ), snames( i ) )
2134 CALL psmatee( ictxt, nout, pstrmv, scode( i ), snames( i ) )
2135 CALL psvecee( ictxt, nout, pstrmv, scode( i ), snames( i ) )
2141 IF( ltest( i ) )
THEN
2142 CALL psoptee( ictxt, nout, pstrsv, scode( i ), snames( i ) )
2143 CALL psdimee( ictxt, nout, pstrsv, scode( i ), snames( i ) )
2144 CALL psmatee( ictxt, nout, pstrsv, scode( i ), snames( i ) )
2145 CALL psvecee( ictxt, nout, pstrsv, scode( i ), snames( i ) )
2151 IF( ltest( i ) )
THEN
2152 CALL psdimee( ictxt, nout, psger, scode( i ), snames( i ) )
2153 CALL psvecee( ictxt, nout, psger, scode( i ), snames( i ) )
2154 CALL psmatee( ictxt, nout, psger, scode( i ), snames( i ) )
2160 IF( ltest( i ) )
THEN
2161 CALL psoptee( ictxt, nout, pssyr, scode( i ), snames( i ) )
2162 CALL psdimee( ictxt, nout, pssyr, scode( i ), snames( i ) )
2163 CALL psvecee( ictxt, nout, pssyr, scode( i ), snames( i ) )
2164 CALL psmatee( ictxt, nout, pssyr, scode( i ), snames( i ) )
2170 IF( ltest( i ) )
THEN
2171 CALL psoptee( ictxt, nout, pssyr2, scode( i ), snames( i ) )
2172 CALL psdimee( ictxt, nout, pssyr2, scode( i ), snames( i ) )
2173 CALL psvecee( ictxt, nout, pssyr2, scode( i ), snames( i ) )
2174 CALL psmatee( ictxt, nout, pssyr2, scode( i ), snames( i ) )
2177 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2178 $
WRITE( nout, fmt = 9999 )
2180 CALL blacs_gridexit( ictxt )
2186 9999
FORMAT( 2x,
'Error-exit tests completed.' )
2193 SUBROUTINE pschkarg2( ICTXT, NOUT, SNAME, UPLO, TRANS, DIAG, M,
2194 $ N, ALPHA, IA, JA, DESCA, IX, JX, DESCX,
2195 $ INCX, BETA, IY, JY, DESCY, INCY, INFO )
2203 CHARACTER*1 DIAG, TRANS, UPLO
2204 INTEGER IA, ICTXT, INCX, INCY, INFO, IX, IY, JA, JX,
2210 INTEGER DESCA( * ), DESCX( * ), DESCY( * )
2324 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2325 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2327 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
2328 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
2329 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
2330 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
2333 CHARACTER*1 DIAGREF, TRANSREF, UPLOREF
2334 INTEGER I, IAREF, INCXREF, INCYREF, IXREF, IYREF,
2335 $ JAREF, JXREF, JYREF, MREF, MYCOL, MYROW, NPCOL,
2337 REAL ALPHAREF, BETAREF
2340 CHARACTER*15 ARGNAME
2341 INTEGER DESCAREF( DLEN_ ), DESCXREF( DLEN_ ),
2345 EXTERNAL BLACS_GRIDINFO, IGSUM2D
2358 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
2362 IF( info.EQ.0 )
THEN
2373 descaref( i ) = desca( i )
2378 descxref( i ) = descx( i )
2385 descyref( i ) = descy( i )
2394 IF( .NOT. lsame( diag, diagref ) )
THEN
2395 WRITE( argname, fmt =
'(A)' )
'DIAG'
2396 ELSE IF( .NOT. lsame( trans, transref ) )
THEN
2397 WRITE( argname, fmt =
'(A)' )
'TRANS'
2398 ELSE IF( .NOT. lsame( uplo, uploref ) )
THEN
2399 WRITE( argname, fmt =
'(A)' )
'UPLO'
2400 ELSE IF( m.NE.mref )
THEN
2401 WRITE( argname, fmt =
'(A)' )
'M'
2402 ELSE IF( n.NE.nref )
THEN
2403 WRITE( argname, fmt =
'(A)' )
'N'
2404 ELSE IF( alpha.NE.alpharef )
THEN
2405 WRITE( argname, fmt =
'(A)' )
'ALPHA'
2406 ELSE IF( ia.NE.iaref )
THEN
2407 WRITE( argname, fmt =
'(A)' )
'IA'
2408 ELSE IF( ja.NE.jaref )
THEN
2409 WRITE( argname, fmt =
'(A)' )
'JA'
2410 ELSE IF( desca( dtype_ ).NE.descaref( dtype_ ) )
THEN
2411 WRITE( argname, fmt =
'(A)' )
'DESCA( DTYPE_ )'
2412 ELSE IF( desca( m_ ).NE.descaref( m_ ) )
THEN
2413 WRITE( argname, fmt =
'(A)' )
'DESCA( M_ )'
2414 ELSE IF( desca( n_ ).NE.descaref( n_ ) )
THEN
2415 WRITE( argname, fmt =
'(A)' )
'DESCA( N_ )'
2416 ELSE IF( desca( imb_ ).NE.descaref( imb_ ) )
THEN
2417 WRITE( argname, fmt =
'(A)' )
'DESCA( IMB_ )'
2418 ELSE IF( desca( inb_ ).NE.descaref( inb_ ) )
THEN
2419 WRITE( argname, fmt =
'(A)' )
'DESCA( INB_ )'
2420 ELSE IF( desca( mb_ ).NE.descaref( mb_ ) )
THEN
2421 WRITE( argname, fmt =
'(A)' )
'DESCA( MB_ )'
2422 ELSE IF( desca( nb_ ).NE.descaref( nb_ ) )
THEN
2423 WRITE( argname, fmt =
'(A)' )
'DESCA( NB_ )'
2424 ELSE IF( desca( rsrc_ ).NE.descaref( rsrc_ ) )
THEN
2425 WRITE( argname, fmt =
'(A)' )
'DESCA( RSRC_ )'
2426 ELSE IF( desca( csrc_ ).NE.descaref( csrc_ ) )
THEN
2427 WRITE( argname, fmt =
'(A)' )
'DESCA( CSRC_ )'
2428 ELSE IF( desca( ctxt_ ).NE.descaref( ctxt_ ) )
THEN
2429 WRITE( argname, fmt =
'(A)' )
'DESCA( CTXT_ )'
2430 ELSE IF( desca( lld_ ).NE.descaref( lld_ ) )
THEN
2431 WRITE( argname, fmt =
'(A)' )
'DESCA( LLD_ )'
2432 ELSE IF( ix.NE.ixref )
THEN
2433 WRITE( argname, fmt =
'(A)' )
'IX'
2434 ELSE IF( jx.NE.jxref )
THEN
2435 WRITE( argname, fmt =
'(A)' )
'JX'
2436 ELSE IF( descx( dtype_ ).NE.descxref( dtype_ ) )
THEN
2437 WRITE( argname, fmt =
'(A)' )
'DESCX( DTYPE_ )'
2438 ELSE IF( descx( m_ ).NE.descxref( m_ ) )
THEN
2439 WRITE( argname, fmt =
'(A)' )
'DESCX( M_ )'
2440 ELSE IF( descx( n_ ).NE.descxref( n_ ) )
THEN
2441 WRITE( argname, fmt =
'(A)' )
'DESCX( N_ )'
2442 ELSE IF( descx( imb_ ).NE.descxref( imb_ ) )
THEN
2443 WRITE( argname, fmt =
'(A)' )
'DESCX( IMB_ )'
2444 ELSE IF( descx( inb_ ).NE.descxref( inb_ ) )
THEN
2445 WRITE( argname, fmt =
'(A)' )
'DESCX( INB_ )'
2446 ELSE IF( descx( mb_ ).NE.descxref( mb_ ) )
THEN
2447 WRITE( argname, fmt =
'(A)' )
'DESCX( MB_ )'
2448 ELSE IF( descx( nb_ ).NE.descxref( nb_ ) )
THEN
2449 WRITE( argname, fmt =
'(A)' )
'DESCX( NB_ )'
2450 ELSE IF( descx( rsrc_ ).NE.descxref( rsrc_ ) )
THEN
2451 WRITE( argname, fmt =
'(A)' )
'DESCX( RSRC_ )'
2452 ELSE IF( descx( csrc_ ).NE.descxref( csrc_ ) )
THEN
2453 WRITE( argname, fmt =
'(A)' )
'DESCX( CSRC_ )'
2454 ELSE IF( descx( ctxt_ ).NE.descxref( ctxt_ ) )
THEN
2455 WRITE( argname, fmt =
'(A)' )
'DESCX( CTXT_ )'
2456 ELSE IF( descx( lld_ ).NE.descxref( lld_ ) )
THEN
2457 WRITE( argname, fmt =
'(A)' )
'DESCX( LLD_ )'
2458 ELSE IF( incx.NE.incxref )
THEN
2459 WRITE( argname, fmt =
'(A)' )
'INCX'
2460 ELSE IF( beta.NE.betaref )
THEN
2461 WRITE( argname, fmt =
'(A)' )
'BETA'
2462 ELSE IF( iy.NE.iyref )
THEN
2463 WRITE( argname, fmt =
'(A)' )
'IY'
2464 ELSE IF( jy.NE.jyref )
THEN
2465 WRITE( argname, fmt =
'(A)' )
'JY'
2466 ELSE IF( descy( dtype_ ).NE.descyref( dtype_ ) )
THEN
2467 WRITE( argname, fmt =
'(A)' )
'DESCY( DTYPE_ )'
2468 ELSE IF( descy( m_ ).NE.descyref( m_ ) )
THEN
2469 WRITE( argname, fmt =
'(A)' )
'DESCY( M_ )'
2470 ELSE IF( descy( n_ ).NE.descyref( n_ ) )
THEN
2471 WRITE( argname, fmt =
'(A)' )
'DESCY( N_ )'
2472 ELSE IF( descy( imb_ ).NE.descyref( imb_ ) )
THEN
2473 WRITE( argname, fmt =
'(A)' )
'DESCY( IMB_ )'
2474 ELSE IF( descy( inb_ ).NE.descyref( inb_ ) )
THEN
2475 WRITE( argname, fmt =
'(A)' )
'DESCY( INB_ )'
2476 ELSE IF( descy( mb_ ).NE.descyref( mb_ ) )
THEN
2477 WRITE( argname, fmt =
'(A)' )
'DESCY( MB_ )'
2478 ELSE IF( descy( nb_ ).NE.descyref( nb_ ) )
THEN
2479 WRITE( argname, fmt =
'(A)' )
'DESCY( NB_ )'
2480 ELSE IF( descy( rsrc_ ).NE.descyref( rsrc_ ) )
THEN
2481 WRITE( argname, fmt =
'(A)' )
'DESCY( RSRC_ )'
2482 ELSE IF( descy( csrc_ ).NE.descyref( csrc_ ) )
THEN
2483 WRITE( argname, fmt =
'(A)' )
'DESCY( CSRC_ )'
2484 ELSE IF( descy( ctxt_ ).NE.descyref( ctxt_ ) )
THEN
2485 WRITE( argname, fmt =
'(A)' )
'DESCY( CTXT_ )'
2486 ELSE IF( descy( lld_ ).NE.descyref( lld_ ) )
THEN
2487 WRITE( argname, fmt =
'(A)' )
'DESCY( LLD_ )'
2488 ELSE IF( incy.NE.incyref )
THEN
2489 WRITE( argname, fmt =
'(A)' )
'INCY'
2494 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
2496 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
2498 IF( info.NE.0 )
THEN
2499 WRITE( nout, fmt = 9999 ) argname, sname
2501 WRITE( nout, fmt = 9998 ) sname
2508 9999
FORMAT( 2x,
' ***** Input-only parameter check: ', a,
2509 $
' FAILED changed ', a,
' *****' )
2510 9998
FORMAT( 2x,
' ***** Input-only parameter check: ', a,
2518 SUBROUTINE psblas2tstchk( ICTXT, NOUT, NROUT, UPLO, TRANS, DIAG,
2519 $ M, N, ALPHA, A, PA, IA, JA, DESCA, X,
2520 $ PX, IX, JX, DESCX, INCX, BETA, Y, PY,
2521 $ IY, JY, DESCY, INCY, THRESH, ROGUE,
2530 CHARACTER*1 DIAG, TRANS, UPLO
2531 INTEGER IA, ICTXT, INCX, INCY, INFO, IX, IY, JA, JX,
2532 $ JY, M, N, NOUT, NROUT
2533 REAL ALPHA, BETA, ROGUE, THRESH
2536 INTEGER DESCA( * ), DESCX( * ), DESCY( * )
2537 REAL A( * ), PA( * ), PX( * ), PY( * ), WORK( * ),
2752 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
2753 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2754 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2756 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
2757 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
2758 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
2759 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
2762 INTEGER I, MYCOL, MYROW, NPCOL, NPROW
2782 IF( ( m.LE.0 ).OR.( n.LE.0 ) )
2787 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
2793 IF( nrout.EQ.1 )
THEN
2799 CALL psmvch( ictxt, trans, m, n, alpha, a, ia, ja, desca, x,
2800 $ ix, jx, descx, incx, beta, y, py, iy, jy, descy,
2801 $ incy, work, err, ierr( 3 ) )
2803 IF( ierr( 3 ).NE.0 )
THEN
2804 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2805 $
WRITE( nout, fmt = 9997 )
2806 ELSE IF( err.GT.thresh )
THEN
2807 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2808 $
WRITE( nout, fmt = 9996 ) err
2813 CALL pschkmin( err, m, n, a, pa, ia, ja, desca, ierr( 1 ) )
2814 IF( lsame( trans,
'N' ) )
THEN
2815 CALL pschkvin( err, n, x, px, ix, jx, descx, incx,
2818 CALL pschkvin( err, m, x, px, ix, jx, descx, incx,
2822 ELSE IF( nrout.EQ.2 )
THEN
2828 CALL psmvch( ictxt,
'No transpose', n, n, alpha, a, ia, ja,
2829 $ desca, x, ix, jx, descx, incx, beta, y, py, iy,
2830 $ jy, descy, incy, work, err, ierr( 3 ) )
2832 IF( ierr( 3 ).NE.0 )
THEN
2833 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2834 $
WRITE( nout, fmt = 9997 )
2835 ELSE IF( err.GT.thresh )
THEN
2836 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2837 $
WRITE( nout, fmt = 9996 ) err
2842 IF( lsame( uplo,
'L' ) )
THEN
2843 CALL pb_slaset(
'Upper', n-1, n-1, 0, rogue, rogue,
2844 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
2846 CALL pb_slaset(
'Lower', n-1, n-1, 0, rogue, rogue,
2847 $ a( ia+1+(ja-1)*desca( m_ ) ), desca( m_ ) )
2849 CALL pschkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
2850 CALL pschkvin( err, n, x, px, ix, jx, descx, incx, ierr( 2 ) )
2852 ELSE IF( nrout.EQ.3 )
THEN
2858 CALL psmvch( ictxt, trans, n, n, one, a, ia, ja, desca, y, ix,
2859 $ jx, descx, incx, zero, x, px, ix, jx, descx, incx,
2860 $ work, err, ierr( 2 ) )
2862 IF( ierr( 2 ).NE.0 )
THEN
2863 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2864 $
WRITE( nout, fmt = 9997 )
2865 ELSE IF( err.GT.thresh )
THEN
2866 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2867 $
WRITE( nout, fmt = 9996 ) err
2872 IF( lsame( uplo,
'L' ) )
THEN
2873 IF( lsame( diag,
'N' ) )
THEN
2874 CALL pb_slaset(
'Upper', n-1, n-1, 0, rogue, rogue,
2875 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
2877 CALL pb_slaset(
'Upper', n, n, 0, rogue, one,
2878 $ a( ia+(ja-1)*desca( m_ ) ), desca( m_ ) )
2881 IF( lsame( diag,
'N' ) )
THEN
2882 CALL pb_slaset(
'Lower', n-1, n-1, 0, rogue, rogue,
2883 $ a( ia+1+(ja-1)*desca( m_ ) ),
2886 CALL pb_slaset(
'Lower', n, n, 0, rogue, one,
2887 $ a( ia+(ja-1)*desca( m_ ) ), desca( m_ ) )
2890 CALL pschkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
2892 ELSE IF( nrout.EQ.4 )
THEN
2898 CALL strsv( uplo, trans, diag, n, a( ia+(ja-1)*desca( m_ ) ),
2899 $ desca( m_ ), x( ix+(jx-1)*descx( m_ ) ), incx )
2900 CALL pstrmv( uplo, trans, diag, n, pa, ia, ja, desca, px, ix,
2902 CALL psmvch( ictxt, trans, n, n, one, a, ia, ja, desca, x, ix,
2903 $ jx, descx, incx, zero, y, px, ix, jx, descx, incx,
2904 $ work, err, ierr( 2 ) )
2906 IF( ierr( 2 ).NE.0 )
THEN
2907 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2908 $
WRITE( nout, fmt = 9997 )
2909 ELSE IF( err.GT.thresh )
THEN
2910 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2911 $
WRITE( nout, fmt = 9996 ) err
2916 IF( lsame( uplo,
'L' ) )
THEN
2917 IF( lsame( diag,
'N' ) )
THEN
2918 CALL pb_slaset(
'Upper', n-1, n-1, 0, rogue, rogue,
2919 $ a( ia+ja*desca( m_ ) ), desca( m_ ) )
2921 CALL pb_slaset(
'Upper', n, n, 0, rogue, one,
2922 $ a( ia+(ja-1)*desca( m_ ) ), desca( m_ ) )
2925 IF( lsame( diag,
'N' ) )
THEN
2926 CALL pb_slaset(
'Lower', n-1, n-1, 0, rogue, rogue,
2927 $ a( ia+1+(ja-1)*desca( m_ ) ),
2930 CALL pb_slaset(
'Lower', n, n, 0, rogue, one,
2931 $ a( ia+(ja-1)*desca( m_ ) ), desca( m_ ) )
2934 CALL pschkmin( err, n, n, a, pa, ia, ja, desca, ierr( 1 ) )
2936 ELSE IF( nrout.EQ.5 )
THEN
2942 CALL psvmch( ictxt,
'Ge', m, n, alpha, x, ix, jx, descx,
2943 $ incx, y, iy, jy, descy, incy, a, pa, ia, ja,
2944 $ desca, work, err, ierr( 1 ) )
2945 IF( ierr( 1 ).NE.0 )
THEN
2946 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2947 $
WRITE( nout, fmt = 9997 )
2948 ELSE IF( err.GT.thresh )
THEN
2949 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2950 $
WRITE( nout, fmt = 9996 ) err
2955 CALL pschkvin( err, m, x, px, ix, jx, descx, incx, ierr( 2 ) )
2956 CALL pschkvin( err, n, y, py, iy, jy, descy, incy, ierr( 3 ) )
2958 ELSE IF( nrout.EQ.6 )
THEN
2964 CALL psvmch( ictxt, uplo, n, n, alpha, x, ix, jx, descx,
2965 $ incx, x, ix, jx, descx, incx, a, pa, ia, ja,
2966 $ desca, work, err, ierr( 1 ) )
2967 IF( ierr( 1 ).NE.0 )
THEN
2968 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2969 $
WRITE( nout, fmt = 9997 )
2970 ELSE IF( err.GT.thresh )
THEN
2971 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2972 $
WRITE( nout, fmt = 9996 ) err
2977 CALL pschkvin( err, n, x, px, ix, jx, descx, incx, ierr( 2 ) )
2979 ELSE IF( nrout.EQ.7 )
THEN
2985 CALL psvmch2( ictxt, uplo, n, n, alpha, x, ix, jx, descx, incx,
2986 $ y, iy, jy, descy, incy, a, pa, ia, ja, desca,
2987 $ work, err, ierr( 1 ) )
2988 IF( ierr( 1 ).NE.0 )
THEN
2989 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2990 $
WRITE( nout, fmt = 9997 )
2991 ELSE IF( err.GT.thresh )
THEN
2992 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
2993 $
WRITE( nout, fmt = 9996 ) err
2998 CALL pschkvin( err, n, x, px, ix, jx, descx, incx, ierr( 2 ) )
2999 CALL pschkvin( err, n, y, py, iy, jy, descy, incy, ierr( 3 ) )
3003 IF( ierr( 1 ).NE.0 )
THEN
3005 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3006 $
WRITE( nout, fmt = 9999 )
'A'
3009 IF( ierr( 2 ).NE.0 )
THEN
3011 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3012 $
WRITE( nout, fmt = 9998 )
'X'
3015 IF( ierr( 3 ).NE.0 )
THEN
3017 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
3018 $
WRITE( nout, fmt = 9998 )
'Y'
3021 9999
FORMAT( 2x,
' ***** ERROR: Matrix operand ', a,
3022 $
' is incorrect.' )
3023 9998
FORMAT( 2x,
' ***** ERROR: Vector operand ', a,
3024 $
' is incorrect.' )
3025 9997
FORMAT( 2x,
' ***** FATAL ERROR - Computed result is less ',
3026 $
'than half accurate *****' )
3027 9996
FORMAT( 2x,
' ***** Test completed with maximum test ratio: ',
3028 $ f11.5,
' SUSPECT *****' )