69 INTEGER block_cyclic_2d, csrc_, ctxt_, dlen_, dtype_,
71 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
72 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
73 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
74 INTEGER intgsz, memsiz, ntests, realsz, totmem
76 parameter( intgsz = 4, realsz = 4, totmem = 2000000,
78 $ padval = -9923.0e+0, zero = 0.0e+0 )
84 INTEGER hh, i, iam, iaseed, ibseed, ictxt, imidpad,
85 $ info, ipa, ipa0, ipb, ipb0, ipberr, ipferr,
86 $ ipostpad, ippiv, iprepad, ipw, ipw2, j, k,
87 $ kfail, kk, kpass, kskip, ktests, lcm, lcmq,
88 $ lipiv, liwork, lwork, lw2, m, maxmn,
89 $ minmn, mp, mycol, myrhs, myrow, n, nb, nbrhs,
90 $ ngrids, nmat, nnb, nnbr, nnr, nout, np, npcol,
92 REAL anorm, anorm1, fresid, rcond, sresid, sresid2,
94 DOUBLE PRECISION nops, tmflops
97 INTEGER desca( dlen_ ), descb( dlen_ ), ierr( 1 ),
98 $ mval( ntests ), nbrval( ntests ),
99 $ nbval( ntests ), nrval( ntests ),
100 $ nval( ntests ), pval( ntests ),
103 DOUBLE PRECISION ctime( 2 ), wtime( 2 )
106 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
123 DATA kfail, kpass, kskip, ktests / 4*0 /
129 CALL blacs_pinfo( iam, nprocs )
132 CALL psluinfo( outfile, nout, nmat, mval, nval, ntests, nnb,
133 $ nbval, ntests, nnr, nrval, ntests, nnbr, nbrval,
134 $ ntests, ngrids, pval, ntests, qval, ntests, thresh,
135 $ est, mem, iam, nprocs )
136 check = ( thresh.GE.0.0e+0 )
141 WRITE( nout, fmt = * )
142 WRITE( nout, fmt = 9995 )
143 WRITE( nout, fmt = 9994 )
144 WRITE( nout, fmt = * )
157 IF( nprow.LT.1 )
THEN
159 $
WRITE( nout, fmt = 9999 )
'GRID', 'nprow
', NPROW
161.LT.
ELSE IF( NPCOL1 ) THEN
163 $ WRITE( NOUT, FMT = 9999 ) 'grid
', 'npcol
', NPCOL
165.GT.
ELSE IF( NPROW*NPCOLNPROCS ) THEN
167 $ WRITE( NOUT, FMT = 9998 ) NPROW*NPCOL, NPROCS
171.GT.
IF( IERR( 1 )0 ) THEN
173 $ WRITE( NOUT, FMT = 9997 ) 'grid
'
180 CALL BLACS_GET( -1, 0, ICTXT )
181 CALL BLACS_GRIDINIT( ICTXT, 'row-major
', NPROW, NPCOL )
182 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
187.GE..OR..GE.
IF( MYROWNPROW MYCOLNPCOL )
200 $ WRITE( NOUT, FMT = 9999 ) 'matrix
', 'm
', M
202.LT.
ELSE IF( N1 ) THEN
204 $ WRITE( NOUT, FMT = 9999 ) 'matrix
', 'n
', N
210 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1, 0 )
212.GT.
IF( IERR( 1 )0 ) THEN
214 $ WRITE( NOUT, FMT = 9997 ) 'matrix
'
229 $ WRITE( NOUT, FMT = 9999 ) 'nb
', 'nb
', NB
234 CALL IGSUM2D( ICTXT, 'all',
' ', 1, 1, ierr, 1, -1, 0 )
236 IF( ierr( 1 ).GT.0 )
THEN
238 $
WRITE( nout, fmt = 9997 )
'NB'
245 mp =
numroc( m, nb, myrow, 0, nprow )
246 np =
numroc( n, nb, myrow, 0, nprow )
247 nq =
numroc( n, nb, mycol, 0, npcol )
249 iprepad =
max( nb, mp )
251 ipostpad =
max( nb, nq )
260 CALL descinit( desca, m, n, nb, nb, 0, 0, ictxt,
261 $
max( 1, mp )+imidpad, ierr( 1 ) )
265 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
267 IF( ierr( 1 ).LT.0 )
THEN
269 $
WRITE( nout, fmt = 9997 )
'descriptor'
278 IF( est .AND. m.EQ.n )
THEN
279 ipa0 = ipa + desca( lld_ )*nq + ipostpad + iprepad
280 ippiv = ipa0 + desca( lld_ )*nq + ipostpad + iprepad
282 ippiv = ipa + desca( lld_ )*nq + ipostpad + iprepad
284 lipiv =
iceil( intgsz*( mp+nb ), realsz )
285 ipw = ippiv + lipiv + ipostpad + iprepad
293 worksiz =
max( 2, nq )
295 worksiz =
max( worksiz, mp*desca( nb_ )+
298 worksiz =
max( worksiz, mp * desca( nb_ ) )
300 worksiz = worksiz + ipostpad
311 IF( ipw+worksiz.GT.memsiz )
THEN
313 WRITE( nout, fmt = 9996 )
'factorization',
314 $ ( ipw+worksiz )*realsz
320 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
322 IF( ierr( 1 ).GT.0 )
THEN
324 $
WRITE( nout, fmt = 9997 )
'MEMORY'
331 CALL psmatgen( ictxt,
'No transpose',
'No transpose',
332 $ desca( m_ ), desca( n_ ), desca( mb_ ),
333 $ desca( nb_ ), mem( ipa ), desca( lld_ ),
334 $ desca( rsrc_ ), desca( csrc_ ), iaseed, 0,
335 $ mp, 0, nq, myrow, mycol, nprow, npcol )
340 CALL psfillpad( ictxt, mp, nq, mem( ipa-iprepad ),
341 $ desca( lld_ ), iprepad, ipostpad,
343 CALL psfillpad( ictxt, lipiv, 1, mem( ippiv-iprepad ),
344 $ lipiv, iprepad, ipostpad, padval )
345 CALL psfillpad( ictxt, worksiz-ipostpad, 1,
346 $ mem( ipw-iprepad ), worksiz-ipostpad,
347 $ iprepad, ipostpad, padval )
348 anorm =
pslange(
'I', m, n, mem( ipa ), 1, 1, desca,
350 anorm1 =
pslange(
'1', m, n, mem( ipa ), 1, 1, desca,
352 CALL pschekpad( ictxt,
'PSLANGE', mp, nq,
353 $ mem( ipa-iprepad ), desca( lld_ ),
354 $ iprepad, ipostpad, padval )
355 CALL pschekpad( ictxt,
'PSLANGE', worksiz-ipostpad,
356 $ 1, mem( ipw-iprepad ),
357 $ worksiz-ipostpad, iprepad, ipostpad,
361 IF( est .AND. m.EQ.n )
THEN
362 CALL psmatgen( ictxt,
'No transpose',
'No transpose',
363 $ desca( m_ ), desca( n_ ), desca( mb_ ),
364 $ desca( nb_ ), mem( ipa0 ),
365 $ desca( lld_ ), desca( rsrc_ ),
366 $ desca( csrc_ ), iaseed, 0, mp, 0, nq,
367 $ myrow, mycol, nprow, npcol )
369 $
CALL psfillpad( ictxt, mp, nq, mem( ipa0-iprepad ),
370 $ desca( lld_ ), iprepad, ipostpad,
375 CALL blacs_barrier( ictxt,
'All' )
380 CALL psgetrf( m, n, mem( ipa ), 1, 1, desca,
381 $ mem( ippiv ), info )
387 $
WRITE( nout, fmt = * )
'PSGETRF INFO=', info
397 CALL pschekpad( ictxt,
'PSGETRF', mp, nq,
398 $ mem( ipa-iprepad ), desca( lld_ ),
399 $ iprepad, ipostpad, padval )
400 CALL pschekpad( ictxt,
'PSGETRF', lipiv, 1,
401 $ mem( ippiv-iprepad ), lipiv, iprepad,
416 CALL psgetrrv( m, n, mem( ipa ), 1, 1, desca,
417 $ mem( ippiv ), mem( ipw ) )
418 CALL pslafchk(
'No',
'No', m, n, mem( ipa ), 1, 1,
419 $ desca, iaseed, anorm, fresid,
424 CALL pschekpad( ictxt,
'PSGETRRV', mp, nq,
425 $ mem( ipa-iprepad ), desca( lld_ ),
426 $ iprepad, ipostpad, padval )
427 CALL pschekpad( ictxt,
'PSGETRRV', lipiv, 1,
428 $ mem( ippiv-iprepad ), lipiv,
429 $ iprepad, ipostpad, padval )
431 $ worksiz-ipostpad, 1,
432 $ mem( ipw-iprepad ),
433 $ worksiz-ipostpad, iprepad,
438 IF( ( fresid.LE.thresh ) .AND.
439 $ ( (fresid-fresid).EQ.0.0e+0 ) )
THEN
445 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
446 $
WRITE( nout, fmt = 9986 ) fresid
454 fresid = fresid - fresid
461 CALL slcombine( ictxt, 'all
', '>
', 'w
', 1, 1,
463 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1,
468.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
476 NOPS = DBLE( MAXMN )*( DBLE( MINMN )**2 ) -
477 $ (1.0D+0 / 3.0D+0)*( DBLE( MINMN )**3 ) -
478 $ (1.0D+0 / 2.0D+0)*( DBLE( MINMN )**2 )
485.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
486 TMFLOPS = NOPS / ( WTIME( 1 ) * 1.0D+6 )
492.GE.
IF( WTIME( 1 )0.0D+0 )
493 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N, NB,
494 $ NRHS, NBRHS, NPROW, NPCOL, WTIME( 1 ),
495 $ WTIME( 2 ), TMFLOPS, PASSED
499.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
500 TMFLOPS = NOPS / ( CTIME( 1 ) * 1.0D+6 )
506.GE.
IF( CTIME( 1 )0.0D+0 )
507 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N, NB,
508 $ NRHS, NBRHS, NPROW, NPCOL, CTIME( 1 ),
509 $ CTIME( 2 ), TMFLOPS, PASSED
520 LWORK = MAX( 1, 2*NP ) + MAX( 1, 2*NQ ) +
521 $ MAX( 2, DESCA( NB_ )*
522 $ MAX( 1, ICEIL( NPROW-1, NPCOL ) ),
524 $ MAX( 1, ICEIL( NPCOL-1, NPROW ) ) )
525 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
526 LIWORK = MAX( 1, NP )
527 LW2 = ICEIL( LIWORK*INTGSZ, REALSZ ) + IPOSTPAD
530.GT.
IF( IPW2+LW2MEMSIZ ) THEN
532 $ WRITE( NOUT, FMT = 9996 )'cond est
',
533 $ ( IPW2+LW2 )*REALSZ
539 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
542.GT.
IF( IERR( 1 )0 ) THEN
544 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
550 CALL PSFILLPAD( ICTXT, LWORK, 1,
551 $ MEM( IPW-IPREPAD ), LWORK,
552 $ IPREPAD, IPOSTPAD, PADVAL )
553 CALL PSFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
554 $ MEM( IPW2-IPREPAD ),
555 $ LW2-IPOSTPAD, IPREPAD,
561 CALL PSGECON( '1
', N, MEM( IPA ), 1, 1, DESCA,
562 $ ANORM1, RCOND, MEM( IPW ), LWORK,
563 $ MEM( IPW2 ), LIWORK, INFO )
566 CALL PSCHEKPAD( ICTXT, 'psgecon', NP, NQ,
567 $ MEM( IPA-IPREPAD ),
568 $ DESCA( LLD_ ), IPREPAD,
570 CALL PSCHEKPAD( ICTXT, 'psgecon', LWORK, 1,
571 $ MEM( IPW-IPREPAD ), LWORK,
572 $ IPREPAD, IPOSTPAD, PADVAL )
573 CALL PSCHEKPAD( ICTXT, 'psgecon',
575 $ MEM( IPW2-IPREPAD ),
576 $ LW2-IPOSTPAD, IPREPAD,
593 CALL DESCINIT( DESCB, N, NRHS, NB, NBRHS, 0, 0,
594 $ ICTXT, MAX( 1, NP )+IMIDPAD,
599 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
602.LT.
IF( IERR( 1 )0 ) THEN
604 $ WRITE( NOUT, FMT = 9997 ) 'descriptor
'
611 MYRHS = NUMROC( DESCB( N_ ), DESCB( NB_ ),
612 $ MYCOL, DESCB( CSRC_ ), NPCOL )
616 IPB0 = IPB + DESCB( LLD_ )*MYRHS + IPOSTPAD +
618 IPFERR = IPB0 + DESCB( LLD_ )*MYRHS +
620 IPBERR = MYRHS + IPFERR + IPOSTPAD + IPREPAD
621 IPW = MYRHS + IPBERR + IPOSTPAD + IPREPAD
623 IPW = IPB + DESCB( LLD_ )*MYRHS + IPOSTPAD +
631 LCM = ILCM( NPROW, NPCOL )
633 WORKSIZ = MAX( WORKSIZ-IPOSTPAD,
634 $ NQ * NBRHS + NP * NBRHS +
635 $ MAX( MAX( NQ*NB, 2*NBRHS ),
636 $ NBRHS * NUMROC( NUMROC(N,NB,0,0,NPCOL),NB,
638 WORKSIZ = IPOSTPAD + WORKSIZ
644.GT.
IF( IPW+WORKSIZMEMSIZ ) THEN
646 $ WRITE( NOUT, FMT = 9996 )'solve
',
647 $ ( IPW+WORKSIZ )*REALSZ
653 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
656.GT.
IF( IERR( 1 )0 ) THEN
658 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
665 CALL PSMATGEN( ICTXT, 'no
', 'no
', DESCB( M_ ),
666 $ DESCB( N_ ), DESCB( MB_ ),
667 $ DESCB( NB_ ), MEM( IPB ),
668 $ DESCB( LLD_ ), DESCB( RSRC_ ),
669 $ DESCB( CSRC_ ), IBSEED, 0, NP, 0,
670 $ MYRHS, MYROW, MYCOL, NPROW,
674 $ CALL PSFILLPAD( ICTXT, NP, MYRHS,
675 $ MEM( IPB-IPREPAD ),
676 $ DESCB( LLD_ ), IPREPAD,
680 CALL PSMATGEN( ICTXT, 'no
', 'no
',
681 $ DESCB( M_ ), DESCB( N_ ),
682 $ DESCB( MB_ ), DESCB( NB_ ),
683 $ MEM( IPB0 ), DESCB( LLD_ ),
685 $ DESCB( CSRC_ ), IBSEED, 0, NP,
686 $ 0, MYRHS, MYROW, MYCOL, NPROW,
689 CALL PSFILLPAD( ICTXT, NP, MYRHS,
690 $ MEM( IPB0-IPREPAD ),
691 $ DESCB( LLD_ ), IPREPAD,
693 CALL PSFILLPAD( ICTXT, 1, MYRHS,
694 $ MEM( IPFERR-IPREPAD ), 1,
697 CALL PSFILLPAD( ICTXT, 1, MYRHS,
698 $ MEM( IPBERR-IPREPAD ), 1,
704 CALL BLACS_BARRIER( ICTXT, 'all
' )
709 CALL PSGETRS( 'no
', N, NRHS, MEM( IPA ), 1, 1,
710 $ DESCA, MEM( IPPIV ), MEM( IPB ),
711 $ 1, 1, DESCB, INFO )
719 CALL PSCHEKPAD( ICTXT, 'psgetrs', NP, NQ,
720 $ MEM( IPA-IPREPAD ),
721 $ DESCA( LLD_ ), IPREPAD,
723 CALL PSCHEKPAD( ICTXT, 'psgetrs', LIPIV, 1,
724 $ MEM( IPPIV-IPREPAD ), LIPIV,
725 $ IPREPAD, IPOSTPAD, PADVAL )
726 CALL PSCHEKPAD( ICTXT, 'psgetrs', NP,
727 $ MYRHS, MEM( IPB-IPREPAD ),
728 $ DESCB( LLD_ ), IPREPAD,
731 CALL PSFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
732 $ 1, MEM( IPW-IPREPAD ),
733 $ WORKSIZ-IPOSTPAD, IPREPAD,
738 CALL PSLASCHK( 'no
', 'n
', N, NRHS,
739 $ MEM( IPB ), 1, 1, DESCB,
740 $ IASEED, 1, 1, DESCA, IBSEED,
741 $ ANORM, SRESID, MEM( IPW ) )
743.EQ..AND..GT.
IF( IAM0 SRESIDTHRESH )
744 $ WRITE( NOUT, FMT = 9985 ) SRESID
748 CALL PSCHEKPAD( ICTXT, 'pslaschk', NP,
749 $ MYRHS, MEM( IPB-IPREPAD ),
750 $ DESCB( LLD_ ), IPREPAD,
753 $ WORKSIZ-IPOSTPAD, 1,
754 $ MEM( IPW-IPREPAD ),
756 $ IPREPAD, IPOSTPAD, PADVAL )
760.LE..AND.
IF( SRESIDTHRESH
761.EQ.
$ ( SRESID-SRESID )0.0E+0 ) THEN
770 SRESID = SRESID - SRESID
778 LWORK = MAX( 1, 3*NP )
779 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
780 LIWORK = MAX( 1, NP )
781 LW2 = ICEIL( LIWORK*INTGSZ, REALSZ ) +
785.GT.
IF( IPW2+LW2MEMSIZ ) THEN
787 $ WRITE( NOUT, FMT = 9996 )
788 $ 'iter ref
', ( IPW2+LW2 )*REALSZ
794 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
797.GT.
IF( IERR( 1 )0 ) THEN
799 $ WRITE( NOUT, FMT = 9997 )
806 CALL PSFILLPAD( ICTXT, LWORK, 1,
807 $ MEM( IPW-IPREPAD ),
808 $ LWORK, IPREPAD, IPOSTPAD,
810 CALL PSFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
811 $ MEM( IPW2-IPREPAD ),
812 $ LW2-IPOSTPAD, IPREPAD,
819 CALL PSGERFS( 'no
', N, NRHS, MEM( IPA0 ), 1,
820 $ 1, DESCA, MEM( IPA ), 1, 1,
821 $ DESCA, MEM( IPPIV ),
822 $ MEM( IPB0 ), 1, 1, DESCB,
823 $ MEM( IPB ), 1, 1, DESCB,
824 $ MEM( IPFERR ), MEM( IPBERR ),
825 $ MEM( IPW ), LWORK, MEM( IPW2 ),
829 CALL PSCHEKPAD( ICTXT, 'psgerfs', NP,
830 $ NQ, MEM( IPA0-IPREPAD ),
831 $ DESCA( LLD_ ), IPREPAD,
833 CALL PSCHEKPAD( ICTXT, 'psgerfs', NP,
834 $ NQ, MEM( IPA-IPREPAD ),
835 $ DESCA( LLD_ ), IPREPAD,
837 CALL PSCHEKPAD( ICTXT, 'psgerfs', LIPIV,
838 $ 1, MEM( IPPIV-IPREPAD ),
841 CALL PSCHEKPAD( ICTXT, 'psgerfs', NP,
842 $ MYRHS, MEM( IPB-IPREPAD ),
843 $ DESCB( LLD_ ), IPREPAD,
845 CALL PSCHEKPAD( ICTXT, 'psgerfs', NP,
847 $ MEM( IPB0-IPREPAD ),
848 $ DESCB( LLD_ ), IPREPAD,
850 CALL PSCHEKPAD( ICTXT, 'psgerfs', 1,
852 $ MEM( IPFERR-IPREPAD ), 1,
855 CALL PSCHEKPAD( ICTXT, 'psgerfs', 1,
857 $ MEM( IPBERR-IPREPAD ), 1,
860 CALL PSCHEKPAD( ICTXT, 'psgerfs', LWORK,
861 $ 1, MEM( IPW-IPREPAD ),
862 $ LWORK, IPREPAD, IPOSTPAD,
864 CALL PSCHEKPAD( ICTXT, 'psgerfs',
866 $ MEM( IPW2-IPREPAD ),
867 $ LW2-IPOSTPAD, IPREPAD,
870 CALL PSFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
871 $ 1, MEM( IPW-IPREPAD ),
872 $ WORKSIZ-IPOSTPAD, IPREPAD,
877 CALL PSLASCHK( 'no
', 'n
', N, NRHS,
878 $ MEM( IPB ), 1, 1, DESCB,
879 $ IASEED, 1, 1, DESCA,
880 $ IBSEED, ANORM, SRESID2,
883.EQ..AND..GT.
IF( IAM0 SRESID2THRESH )
884 $ WRITE( NOUT, FMT = 9985 ) SRESID2
888 CALL PSCHEKPAD( ICTXT, 'pslaschk', NP,
889 $ MYRHS, MEM( IPB-IPREPAD ),
890 $ DESCB( LLD_ ), IPREPAD,
893 $ WORKSIZ-IPOSTPAD, 1,
894 $ MEM( IPW-IPREPAD ),
895 $ WORKSIZ-IPOSTPAD, IPREPAD,
902 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 2, 1,
904 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 2, 1,
909.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
913 NOPS = (2.0D+0/3.0D+0)*( DBLE(N)**3 ) -
914 $ (1.0D+0/2.0D+0)*( DBLE(N)**2 )
918 NOPS = NOPS + 2.0D+0*(DBLE(N)**2)*DBLE(NRHS)
926.GT.
IF( WTIME( 1 ) + WTIME( 2 ) 0.0D+0 )
929 $ ( ( WTIME( 1 )+WTIME( 2 ) ) * 1.0D+6 )
936.GE.
IF( WTIME( 2 )0.0D+0 )
937 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N,
938 $ NB, NRHS, NBRHS, NPROW, NPCOL,
939 $ WTIME( 1 ), WTIME( 2 ), TMFLOPS,
944.GT.
IF( CTIME( 1 )+CTIME( 2 )0.0D+0 )
947 $ ( ( CTIME( 1 )+CTIME( 2 ) ) * 1.0D+6 )
952.GE.
IF( CTIME( 2 )0.0D+0 )
953 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N,
954 $ NB, NRHS, NBRHS, NPROW, NPCOL,
955 $ CTIME( 1 ), CTIME( 2 ), TMFLOPS,
961.AND..GT.
IF( CHECK( SRESIDTHRESH ) ) THEN
965 CALL PSGETRRV( M, N, MEM( IPA ), 1, 1, DESCA,
966 $ MEM( IPPIV ), MEM( IPW ) )
967 CALL PSLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
968 $ 1, DESCA, IASEED, ANORM, FRESID,
973 CALL PSCHEKPAD( ICTXT, 'psgetrrv', NP, NQ,
974 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
975 $ IPREPAD, IPOSTPAD, PADVAL )
976 CALL PSCHEKPAD( ICTXT, 'psgetrrv', LIPIV,
977 $ 1, MEM( IPPIV-IPREPAD ), LIPIV,
978 $ IPREPAD, IPOSTPAD, PADVAL )
980 $ WORKSIZ-IPOSTPAD, 1,
981 $ MEM( IPW-IPREPAD ),
982 $ WORKSIZ-IPOSTPAD, IPREPAD,
985.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
986 $ WRITE( NOUT, FMT = 9986 ) FRESID
991 CALL BLACS_GRIDEXIT( ICTXT )
998 KTESTS = KPASS + KFAIL + KSKIP
999 WRITE( NOUT, FMT = * )
1000 WRITE( NOUT, FMT = 9992 ) KTESTS
1002 WRITE( NOUT, FMT = 9991 ) KPASS
1003 WRITE( NOUT, FMT = 9989 ) KFAIL
1005 WRITE( NOUT, FMT = 9990 ) KPASS
1007 WRITE( NOUT, FMT = 9988 ) KSKIP
1008 WRITE( NOUT, FMT = * )
1009 WRITE( NOUT, FMT = * )
1010 WRITE( NOUT, FMT = 9987 )
1011.NE..AND..NE.
IF( NOUT6 NOUT0 )
1015 CALL BLACS_EXIT( 0 )
1017 9999 FORMAT( 'illegal
', A6, ':
', A5, ' = ', i3,
1018 $
'; It should be at least 1' )
1019 9998
FORMAT(
'ILLEGAL GRID: nprow*npcol = ', i4,
'. It can be at most',
1021 9997
FORMAT(
'Bad ', a6,
' parameters: going on to next test case.' )
1022 9996
FORMAT(
'Unable to perform ', a,
': need TOTMEM of at least',
1024 9995
FORMAT(
'TIME M N NB NRHS NBRHS P Q LU Time ',
1025 $
'Sol Time MFLOPS CHECK' )
1026 9994
FORMAT(
'---- ----- ----- --- ---- ----- ---- ---- -------- ',
1027 $
'-------- -------- ------' )
1028 9993
FORMAT( a4, 1x, i5, 1x, i5, 1x, i3, 1x, i5, 1x, i4, 1x, i4, 1x,
1029 $ i4, 1x, f8.2, 1x, f8.2, 1x, f8.2, 1x, a6 )
1030 9992
FORMAT(
'Finished ', i6,
' tests, with the following results:' )
1031 9991
FORMAT( i5,
' tests completed and passed residual checks.' )
1032 9990
FORMAT( i5,
' tests completed without checking.' )
1033 9989
FORMAT( i5,
' tests completed and failed residual checks.' )
1034 9988
FORMAT( i5,
' tests skipped because of illegal input values.' )
1035 9987
FORMAT(
'END OF TESTS.' )
1036 9986
FORMAT(
'||A - P*L*U|| / (||A|| * N * eps) = ', g25.7 )
1037 9985
FORMAT(
'||Ax-b||/(||x||*||A||*eps*N) ', f25.7 )
subroutine pslafchk(aform, diag, m, n, a, ia, ja, desca, iaseed, anorm, fresid, work)
subroutine psmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
integer function iceil(inum, idenom)
integer function ilcm(m, n)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine psgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
real function pslange(norm, m, n, a, ia, ja, desca, work)
subroutine psgetrf(m, n, a, ia, ja, desca, ipiv, info)
subroutine psgecon(norm, n, a, ia, ja, desca, anorm, rcond, work, lwork, iwork, liwork, info)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
subroutine blacs_gridexit(cntxt)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pschekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine psfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
subroutine psgerfs(trans, n, nrhs, a, ia, ja, desca, af, iaf, jaf, descaf, ipiv, b, ib, jb, descb, x, ix, jx, descx, ferr, berr, work, lwork, iwork, liwork, info)
subroutine psgetrrv(m, n, a, ia, ja, desca, ipiv, work)
subroutine pslaschk(symm, diag, n, nrhs, x, ix, jx, descx, iaseed, ia, ja, desca, ibseed, anorm, resid, work)
subroutine psluinfo(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)