70 INTEGER block_cyclic_2d, csrc_, ctxt_, , dtype_,
71 $ lld_, mb_, m_, nb_, n_, rsrc_
72 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
73 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
74 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
75 INTEGER intgsz, dblesz, memsiz, ntests, totmem, zplxsz
78 parameter( intgsz = 4, dblesz = 8, totmem = 8000000,
79 $ zplxsz = 16, memsiz = totmem / zplxsz,
81 $ padval = ( -9923.0d+0, -9923.0d+0 ),
88 INTEGER hh, i, iam, iaseed, ibseed, ictxt, imidpad,
95 $ nprocs, , nq, nrhs, worksiz
97 DOUBLE PRECISION anorm, anorm1, fresid, , rcond,
98 $ sresid, sresid2, tmflops
101 INTEGER desca( dlen_ ), descb( dlen_ ), ierr( 1 ),
102 $ mval( ntests ), nbrval( ntests ),
103 $ ( ntests ), nrval( ntests ),
104 $ nval( ntests ), pval( ntests ),
106 DOUBLE PRECISION ctime( 2 ), wtime( 2 )
107 COMPLEX*16 mem( memsiz )
110 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
127 DATA kfail, kpass, kskip, ktests / 4*0 /
133 CALL blacs_pinfo( iam, nprocs )
136 CALL pzluinfo( outfile, nout, nmat, mval, nval, ntests, nnb,
137 $ nbval, ntests, nnr, nrval, ntests, nnbr, nbrval,
138 $ ntests, ngrids, pval, ntests, qval, ntests, thresh,
139 $ est, mem, iam, nprocs )
140 check = ( thresh.GE.0.0e+0 )
145 WRITE( nout, fmt = * )
146 WRITE( nout, fmt = 9995 )
147 WRITE( nout, fmt = 9994 )
148 WRITE( nout, fmt = * )
161 IF( nprow.LT.1 )
THEN
163 $
WRITE( nout, fmt = 9999 )
'GRID',
'nprow', nprow
165 ELSE IF( npcol.LT.1 )
THEN
167 $
WRITE( nout, fmt = 9999 )
'GRID',
'npcol', npcol
169 ELSE IF( nprow*npcol.GT.nprocs )
THEN
171 $
WRITE( nout, fmt = 9998 ) nprow*npcol, nprocs
175 IF( ierr( 1 ).GT.0 )
THEN
177 $
WRITE( nout, fmt = 9997 )
'grid'
184 CALL blacs_get( -1, 0, ictxt )
191 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
204 $
WRITE( nout, fmt = 9999 )
'MATRIX',
'M', m
206 ELSE IF( n.LT.1 )
THEN
208 $
WRITE( nout, fmt = 9999 )
'MATRIX',
'N', n
214 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
216 IF( ierr( 1 ).GT.0 )
THEN
218 $
WRITE( nout, fmt = 9997 )
'matrix'
233 $
WRITE( nout, fmt = 9999 )
'NB',
'NB', nb
238 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
240 IF( ierr( 1 ).GT.0 )
THEN
242 $
WRITE( nout, fmt = 9997 )
'NB'
249 mp =
numroc( m, nb, myrow, 0, nprow )
250 np =
numroc( n, nb, myrow, 0, nprow )
251 nq =
numroc( n, nb, mycol, 0, npcol )
253 iprepad =
max( nb, mp )
255 ipostpad =
max( nb, nq )
264 CALL descinit( desca, m, n, nb, nb, 0, 0, ictxt,
265 $
max( 1, mp )+imidpad, ierr( 1 ) )
269 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
271 IF( ierr( 1 ).LT.0 )
THEN
273 $
WRITE( nout, fmt = 9997 )
'descriptor'
282 IF( est .AND. m.EQ.n )
THEN
283 ipa0 = ipa + desca( lld_ )*nq + ipostpad + iprepad
284 ippiv = ipa0 + desca( lld_ )*nq + ipostpad + iprepad
286 ippiv = ipa + desca( lld_ )*nq + ipostpad + iprepad
288 lipiv =
iceil( intgsz*( mp+nb ), zplxsz )
289 ipw = ippiv + lipiv + ipostpad + iprepad
297 worksiz =
max( 2, nq )
299 worksiz =
max( worksiz, mp*desca( nb_ )+
302 worksiz =
max( worksiz, mp * desca( nb_ ) )
304 worksiz = worksiz + ipostpad
315 IF( ipw+worksiz.GT.memsiz )
THEN
317 $
WRITE( nout, fmt = 9996 )
'factorization',
318 $ ( ipw+worksiz )*zplxsz
324 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
326 IF( ierr( 1 ).GT.0 )
THEN
328 $
WRITE( nout, fmt = 9997 )
'MEMORY'
335 CALL pzmatgen( ictxt,
'No transpose',
'No transpose',
336 $ desca( m_ ), desca( n_ ), desca( mb_ ),
337 $ desca( nb_ ), mem( ipa ), desca( lld_ ),
338 $ desca( rsrc_ ), desca( csrc_ ), iaseed, 0,
339 $ mp, 0, nq, myrow, mycol, nprow, npcol )
344 CALL pzfillpad( ictxt, mp, nq, mem( ipa-iprepad ),
345 $ desca( lld_ ), iprepad, ipostpad,
347 CALL pzfillpad( ictxt, lipiv, 1, mem( ippiv-iprepad ),
348 $ lipiv, iprepad, ipostpad, padval )
349 CALL pzfillpad( ictxt, worksiz-ipostpad, 1,
350 $ mem( ipw-iprepad ), worksiz-ipostpad,
351 $ iprepad, ipostpad, padval )
352 anorm =
pzlange(
'I', m, n, mem( ipa ), 1, 1, desca,
354 anorm1 =
pzlange(
'1', m, n, mem( ipa ), 1, 1, desca,
356 CALL pzchekpad( ictxt,
'PZLANGE', mp, nq,
357 $ mem( ipa-iprepad ), desca( lld_ ),
358 $ iprepad, ipostpad, padval )
359 CALL pzchekpad( ictxt,
'PZLANGE', worksiz-ipostpad,
360 $ 1, mem( ipw-iprepad ),
361 $ worksiz-ipostpad, iprepad, ipostpad,
365 IF( est .AND. m.EQ.n )
THEN
366 CALL pzmatgen( ictxt,
'No transpose',
'No transpose',
367 $ desca( m_ ), desca( n_ ), desca( mb_ ),
368 $ desca( nb_ ), mem( ipa0 ),
369 $ desca( lld_ ), desca( rsrc_ ),
370 $ desca( csrc_ ), iaseed, 0, mp, 0, nq,
371 $ myrow, mycol, nprow, npcol )
373 $
CALL pzfillpad( ictxt, mp, nq, mem( ipa0-iprepad ),
374 $ desca( lld_ ), iprepad, ipostpad,
379 CALL blacs_barrier( ictxt,
'All' )
384 CALL pzgetrf( m, n, mem( ipa ), 1, 1, desca,
385 $ mem( ippiv ), info )
391 $
WRITE( nout, fmt = * )
'PZGETRF INFO=', info
401 CALL pzchekpad( ictxt,
'PZGETRF', mp, nq,
402 $ mem( ipa-iprepad ), desca( lld_ ),
403 $ iprepad, ipostpad, padval )
404 CALL pzchekpad( ictxt,
'PZGETRF', lipiv, 1,
405 $ mem( ippiv-iprepad ), lipiv, iprepad,
420 CALL pzgetrrv( m, n, mem( ipa ), 1, 1, desca,
421 $ mem( ippiv ), mem( ipw ) )
422 CALL pzlafchk(
'No',
'No', m, n, mem( ipa ), 1, 1,
423 $ desca, iaseed, anorm, fresid,
428 CALL pzchekpad( ictxt,
'PZGETRRV', mp, nq,
429 $ mem( ipa-iprepad ), desca( lld_ ),
430 $ iprepad, ipostpad, padval )
431 CALL pzchekpad( ictxt,
'PZGETRRV', lipiv, 1,
432 $ mem( ippiv-iprepad ), lipiv,
433 $ iprepad, ipostpad, padval )
435 $ worksiz-ipostpad, 1,
436 $ mem( ipw-iprepad ),
437 $ worksiz-ipostpad, iprepad,
442 IF( ( fresid.LE.thresh ) .AND.
443 $ ( (fresid-fresid).EQ.0.0d+0 ) )
THEN
449.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
450 $ WRITE( NOUT, FMT = 9986 ) FRESID
458 FRESID = FRESID - FRESID
465 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 1, 1,
467 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1,
472.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
480 NOPS = 4.0D+0*DBLE(MAXMN)*(DBLE(MINMN)**2) -
481 $ (4.0D+0 / 3.0D+0)*( DBLE( MINMN )**3 ) +
482 $ (2.0D+0)*DBLE( MAXMN )*DBLE( MINMN ) -
483 $ (3.0D+0)*( DBLE( MINMN )**2 )
490.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
491 TMFLOPS = NOPS / ( WTIME( 1 ) * 1.0D+6 )
497.GE.
IF( WTIME( 1 )0.0D+0 )
498 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N, NB,
499 $ NRHS, NBRHS, NPROW, NPCOL, WTIME( 1 ),
500 $ WTIME( 2 ), TMFLOPS, PASSED
504.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
505 TMFLOPS = NOPS / ( CTIME( 1 ) * 1.0D+6 )
511.GE.
IF( CTIME( 1 )0.0D+0 )
512 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N, NB,
513 $ NRHS, NBRHS, NPROW, NPCOL, CTIME( 1 ),
514 $ CTIME( 2 ), TMFLOPS, PASSED
525 LWORK = MAX( 1, 2*NP ) +
526 $ MAX( 2, DESCA( NB_ )*
527 $ MAX( 1, ICEIL( NPROW-1, NPCOL ) ),
529 $ MAX( 1, ICEIL( NPCOL-1, NPROW ) ) )
530 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
531 LRWORK = MAX( 1, 2*NQ )
532 LW2 = ICEIL( LRWORK*DBLESZ, ZPLXSZ ) + IPOSTPAD
535.GT.
IF( IPW2+LW2MEMSIZ ) THEN
537 $ WRITE( NOUT, FMT = 9996 )'cond est
',
538 $ ( IPW2+LW2 )*ZPLXSZ
544 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
547.GT.
IF( IERR( 1 )0 ) THEN
549 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
555 CALL PZFILLPAD( ICTXT, LWORK, 1,
556 $ MEM( IPW-IPREPAD ), LWORK,
557 $ IPREPAD, IPOSTPAD, PADVAL )
558 CALL PZFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
559 $ MEM( IPW2-IPREPAD ),
560 $ LW2-IPOSTPAD, IPREPAD,
566 CALL PZGECON( '1
', N, MEM( IPA ), 1, 1, DESCA,
567 $ ANORM1, RCOND, MEM( IPW ), LWORK,
568 $ MEM( IPW2 ), LRWORK, INFO )
571 CALL PZCHEKPAD( ICTXT, 'pzgecon', NP, NQ,
572 $ MEM( IPA-IPREPAD ),
573 $ DESCA( LLD_ ), IPREPAD,
575 CALL PZCHEKPAD( ICTXT, 'pzgecon', LWORK, 1,
576 $ MEM( IPW-IPREPAD ), LWORK,
577 $ IPREPAD, IPOSTPAD, PADVAL )
578 CALL PZCHEKPAD( ICTXT, 'pzgecon',
580 $ MEM( IPW2-IPREPAD ),
581 $ LW2-IPOSTPAD, IPREPAD,
598 CALL DESCINIT( DESCB, N, NRHS, NB, NBRHS, 0, 0,
599 $ ICTXT, MAX( 1, NP )+IMIDPAD,
604 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
607.LT.
IF( IERR( 1 )0 ) THEN
609 $ WRITE( NOUT, FMT = 9997 ) 'descriptor
'
616 MYRHS = NUMROC( DESCB( N_ ), DESCB( NB_ ),
617 $ MYCOL, DESCB( CSRC_ ), NPCOL )
621 IPB0 = IPB + DESCB( LLD_ )*MYRHS + IPOSTPAD +
623 IPFERR = IPB0 + DESCB( LLD_ )*MYRHS +
625 IPBERR = MYRHS + IPFERR + IPOSTPAD + IPREPAD
626 IPW = MYRHS + IPBERR + IPOSTPAD + IPREPAD
628 IPW = IPB + DESCB( LLD_ )*MYRHS + IPOSTPAD +
636 LCM = ILCM( NPROW, NPCOL )
638 WORKSIZ = MAX( WORKSIZ-IPOSTPAD,
639 $ NQ * NBRHS + NP * NBRHS +
640 $ MAX( MAX( NQ*NB, 2*NBRHS ),
641 $ NBRHS * NUMROC( NUMROC(N,NB,0,0,NPCOL),NB,
643 WORKSIZ = IPOSTPAD + WORKSIZ
649.GT.
IF( IPW+WORKSIZMEMSIZ ) THEN
651 $ WRITE( NOUT, FMT = 9996 )'solve
',
652 $ ( IPW+WORKSIZ )*ZPLXSZ
658 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
661.GT.
IF( IERR( 1 )0 ) THEN
663 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
670 CALL PZMATGEN( ICTXT, 'no
', 'no
', DESCB( M_ ),
671 $ DESCB( N_ ), DESCB( MB_ ),
672 $ DESCB( NB_ ), MEM( IPB ),
673 $ DESCB( LLD_ ), DESCB( RSRC_ ),
674 $ DESCB( CSRC_ ), IBSEED, 0, NP, 0,
675 $ MYRHS, MYROW, MYCOL, NPROW,
679 $ CALL PZFILLPAD( ICTXT, NP, MYRHS,
680 $ MEM( IPB-IPREPAD ),
681 $ DESCB( LLD_ ), IPREPAD,
685 CALL PZMATGEN( ICTXT, 'no
', 'no
',
686 $ DESCB( M_ ), DESCB( N_ ),
687 $ DESCB( MB_ ), DESCB( NB_ ),
688 $ MEM( IPB0 ), DESCB( LLD_ ),
690 $ DESCB( CSRC_ ), IBSEED, 0, NP,
691 $ 0, MYRHS, MYROW, MYCOL, NPROW,
694 CALL PZFILLPAD( ICTXT, NP, MYRHS,
695 $ MEM( IPB0-IPREPAD ),
696 $ DESCB( LLD_ ), IPREPAD,
698 CALL PZFILLPAD( ICTXT, 1, MYRHS,
699 $ MEM( IPFERR-IPREPAD ), 1,
702 CALL PZFILLPAD( ICTXT, 1, MYRHS,
703 $ MEM( IPBERR-IPREPAD ), 1,
709 CALL BLACS_BARRIER( ICTXT, 'all
' )
714 CALL PZGETRS( 'no
', N, NRHS, MEM( IPA ), 1, 1,
715 $ DESCA, MEM( IPPIV ), MEM( IPB ),
716 $ 1, 1, DESCB, INFO )
724 CALL PZCHEKPAD( ICTXT, 'pzgetrs', NP, NQ,
725 $ MEM( IPA-IPREPAD ),
726 $ DESCA( LLD_ ), IPREPAD,
728 CALL PZCHEKPAD( ICTXT, 'pzgetrs', LIPIV, 1,
729 $ MEM( IPPIV-IPREPAD ), LIPIV,
730 $ IPREPAD, IPOSTPAD, PADVAL )
731 CALL PZCHEKPAD( ICTXT, 'pzgetrs', NP,
732 $ MYRHS, MEM( IPB-IPREPAD ),
733 $ DESCB( LLD_ ), IPREPAD,
736 CALL PZFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
737 $ 1, MEM( IPW-IPREPAD ),
738 $ WORKSIZ-IPOSTPAD, IPREPAD,
743 CALL PZLASCHK( 'no
', 'n
', N, NRHS,
744 $ MEM( IPB ), 1, 1, DESCB,
745 $ IASEED, 1, 1, DESCA, IBSEED,
746 $ ANORM, SRESID, MEM( IPW ) )
748.EQ..AND..GT.
IF( IAM0 SRESIDTHRESH )
749 $ WRITE( NOUT, FMT = 9985 ) SRESID
753 CALL PZCHEKPAD( ICTXT, 'pzlaschk', NP,
754 $ MYRHS, MEM( IPB-IPREPAD ),
755 $ DESCB( LLD_ ), IPREPAD,
758 $ WORKSIZ-IPOSTPAD, 1,
759 $ MEM( IPW-IPREPAD ),
761 $ IPREPAD, IPOSTPAD, PADVAL )
765.LE..AND.
IF( SRESIDTHRESH
766.EQ.
$ ( SRESID-SRESID )0.0D+0 ) THEN
775 SRESID = SRESID - SRESID
783 LWORK = MAX( 1, 2*NP )
784 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
785 LRWORK = MAX( 1, NP )
786 LW2 = ICEIL( LRWORK*DBLESZ, ZPLXSZ ) +
790.GT.
IF( IPW2+LW2MEMSIZ ) THEN
792 $ WRITE( NOUT, FMT = 9996 )
793 $ 'iter ref
', ( IPW2+LW2 )*ZPLXSZ
799 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
802.GT.
IF( IERR( 1 )0 ) THEN
804 $ WRITE( NOUT, FMT = 9997 )
811 CALL PZFILLPAD( ICTXT, LWORK, 1,
812 $ MEM( IPW-IPREPAD ),
813 $ LWORK, IPREPAD, IPOSTPAD,
815 CALL PZFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
816 $ MEM( IPW2-IPREPAD ),
817 $ LW2-IPOSTPAD, IPREPAD,
824 CALL PZGERFS( 'no
', N, NRHS, MEM( IPA0 ), 1,
825 $ 1, DESCA, MEM( IPA ), 1, 1,
826 $ DESCA, MEM( IPPIV ),
827 $ MEM( IPB0 ), 1, 1, DESCB,
828 $ MEM( IPB ), 1, 1, DESCB,
829 $ MEM( IPFERR ), MEM( IPBERR ),
830 $ MEM( IPW ), LWORK, MEM( IPW2 ),
834 CALL PZCHEKPAD( ICTXT, 'pzgerfs', NP,
835 $ NQ, MEM( IPA0-IPREPAD ),
836 $ DESCA( LLD_ ), IPREPAD,
838 CALL PZCHEKPAD( ICTXT, 'pzgerfs', NP,
839 $ NQ, MEM( IPA-IPREPAD ),
840 $ DESCA( LLD_ ), IPREPAD,
842 CALL PZCHEKPAD( ICTXT, 'pzgerfs', LIPIV,
843 $ 1, MEM( IPPIV-IPREPAD ),
846 CALL PZCHEKPAD( ICTXT, 'pzgerfs', NP,
847 $ MYRHS, MEM( IPB-IPREPAD ),
848 $ DESCB( LLD_ ), IPREPAD,
850 CALL PZCHEKPAD( ICTXT, 'pzgerfs', NP,
852 $ MEM( IPB0-IPREPAD ),
853 $ DESCB( LLD_ ), IPREPAD,
855 CALL PZCHEKPAD( ICTXT, 'pzgerfs', 1,
857 $ MEM( IPFERR-IPREPAD ), 1,
860 CALL PZCHEKPAD( ICTXT, 'pzgerfs', 1,
862 $ MEM( IPBERR-IPREPAD ), 1,
865 CALL PZCHEKPAD( ICTXT, 'pzgerfs', LWORK,
866 $ 1, MEM( IPW-IPREPAD ),
867 $ LWORK, IPREPAD, IPOSTPAD,
869 CALL PZCHEKPAD( ICTXT, 'pzgerfs',
871 $ MEM( IPW2-IPREPAD ),
872 $ LW2-IPOSTPAD, IPREPAD,
875 CALL PZFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
876 $ 1, MEM( IPW-IPREPAD ),
877 $ WORKSIZ-IPOSTPAD, IPREPAD,
882 CALL PZLASCHK( 'no
', 'n
', N, NRHS,
883 $ MEM( IPB ), 1, 1, DESCB,
884 $ IASEED, 1, 1, DESCA,
885 $ IBSEED, ANORM, SRESID2,
888.EQ..AND..GT.
IF( IAM0 SRESID2THRESH )
889 $ WRITE( NOUT, FMT = 9985 ) SRESID2
893 CALL PZCHEKPAD( ICTXT, 'pzlaschk', NP,
894 $ MYRHS, MEM( IPB-IPREPAD ),
895 $ DESCB( LLD_ ), IPREPAD,
898 $ WORKSIZ-IPOSTPAD, 1,
899 $ MEM( IPW-IPREPAD ),
900 $ WORKSIZ-IPOSTPAD, IPREPAD,
907 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 2, 1,
909 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 2, 1,
914.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
918 NOPS = (8.0D+0/3.0D+0)*( DBLE(N)**3 ) -
923 NOPS = NOPS + 8.0D+0*(DBLE(N)**2)*DBLE(NRHS)
931.GT.
IF( WTIME( 1 ) + WTIME( 2 ) 0.0D+0 )
934 $ ( ( WTIME( 1 )+WTIME( 2 ) ) * 1.0D+6 )
941.GE.
IF( WTIME( 2 )0.0D+0 )
942 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N,
943 $ NB, NRHS, NBRHS, NPROW, NPCOL,
944 $ WTIME( 1 ), WTIME( 2 ), TMFLOPS,
949.GT.
IF( CTIME( 1 )+CTIME( 2 )0.0D+0 )
952 $ ( ( CTIME( 1 )+CTIME( 2 ) ) * 1.0D+6 )
957.GE.
IF( CTIME( 2 )0.0D+0 )
958 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N,
959 $ NB, NRHS, NBRHS, NPROW, NPCOL,
960 $ CTIME( 1 ), CTIME( 2 ), TMFLOPS,
966.AND..GT.
IF( CHECK( SRESIDTHRESH ) ) THEN
970 CALL PZGETRRV( M, N, MEM( IPA ), 1, 1, DESCA,
971 $ MEM( IPPIV ), MEM( IPW ) )
972 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
973 $ 1, DESCA, IASEED, ANORM, FRESID,
978 CALL PZCHEKPAD( ICTXT, 'pzgetrrv', NP, NQ,
979 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
980 $ IPREPAD, IPOSTPAD, PADVAL )
981 CALL PZCHEKPAD( ICTXT, 'pzgetrrv', LIPIV,
982 $ 1, MEM( IPPIV-IPREPAD ), LIPIV,
983 $ IPREPAD, IPOSTPAD, PADVAL )
985 $ WORKSIZ-IPOSTPAD, 1,
986 $ MEM( IPW-IPREPAD ),
987 $ WORKSIZ-IPOSTPAD, IPREPAD,
990.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
991 $ WRITE( NOUT, FMT = 9986 ) FRESID
996 CALL BLACS_GRIDEXIT( ICTXT )
1003 KTESTS = KPASS + KFAIL + KSKIP
1004 WRITE( NOUT, FMT = * )
1005 WRITE( NOUT, FMT = 9992 ) KTESTS
1007 WRITE( NOUT, FMT = 9991 ) KPASS
1008 WRITE( NOUT, FMT = 9989 ) KFAIL
1010 WRITE( NOUT, FMT = 9990 ) KPASS
1012 WRITE( NOUT, FMT = 9988 ) KSKIP
1013 WRITE( NOUT, FMT = * )
1014 WRITE( NOUT, FMT = * )
1015 WRITE( NOUT, FMT = 9987 )
1016.NE..AND..NE.
IF( NOUT6 NOUT0 )
1020 CALL BLACS_EXIT( 0 )
1022 9999 FORMAT( 'illegal
', A6, ':
', A5, ' =
', I3,
1023 $ '; it should be at least 1
' )
1024 9998 FORMAT( 'illegal grid: nprow*npcol =
', I4, '. it can be at most
',
1026 9997 FORMAT( 'bad
', A6, ' parameters: going on to next test case.
' )
1027 9996 FORMAT( 'unable to perform
', A, ': need totmem of at least
',
1029 9995 FORMAT( 'time m n nb nrhs nbrhs p q lu time
',
1030 $ 'sol time mflops check
' )
1031 9994 FORMAT( '---- ----- ----- --- ---- ----- ---- ---- --------
',
1032 $ '-------- -------- ------
' )
1033 9993 FORMAT( A4, 1X, I5, 1X, I5, 1X, I3, 1X, I5, 1X, I4, 1X, I4, 1X,
1034 $ I4, 1X, F8.2, 1X, F8.2, 1X, F8.2, 1X, A6 )
1035 9992 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
1036 9991 FORMAT( I5, ' tests completed and passed residual checks.
' )
1037 9990 FORMAT( I5, ' tests completed without checking.
' )
1038 9989 FORMAT( I5, ' tests completed and failed residual checks.
' )
1039 9988 FORMAT( I5, ' tests skipped because of illegal input values.
' )
1040 9987 FORMAT( 'END OF TESTS.
' )
1041 9986 FORMAT( '||A - P*L*U|| / (||A|| * N * eps) =
', G25.7 )
1042 9985 FORMAT( '||Ax-b||/(||x||*||A||*eps*N)
', F25.7 )
subroutine pzlafchk(aform, diag, m, n, a, ia, ja, desca, iaseed, anorm, fresid, work)
subroutine pzmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
end diagonal values have been computed in the(sparse) matrix id.SOL
integer function iceil(inum, idenom)
integer function ilcm(m, n)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine pzgetrf(m, n, a, ia, ja, desca, ipiv, info)
subroutine pzgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
double precision function pzlange(norm, m, n, a, ia, ja, desca, work)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
subroutine pzgecon(norm, n, a, ia, ja, desca, anorm, rcond, work, lwork, iwork, liwork, info)
subroutine blacs_gridexit(cntxt)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pzchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine pzfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
subroutine pzgerfs(trans, n, nrhs, a, ia, ja, desca, af, iaf, jaf, descaf, ipiv, b, ib, jb, descb, x, ix, jx, descx, ferr, berr, work, lwork, rwork, lrwork, info)
subroutine pzgetrrv(m, n, a, ia, ja, desca, ipiv, work)
subroutine pzlaschk(symm, diag, n, nrhs, x, ix, jx, descx, iaseed, ia, ja, desca, ibseed, anorm, resid, work)
subroutine pzluinfo(summry, nout, nmat, mval, nval, ldnval, nnb, nbval, ldnbval, nnr, nrval, ldnrval, nnbr, nbrval, ldnbrval, ngrids, pval, ldpval, qval, ldqval, thresh, est, work, iam, nprocs)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)