69 INTEGER block_cyclic_2d, csrc_, ctxt_, dlen_, dtype_,
70 $ lld_, mb_, m_, nb_, n_, rsrc_
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 dblesz, intgsz, memsiz, ntests, totmem
75 DOUBLE PRECISION padval, zero
76 parameter( dblesz = 8, intgsz = 4, totmem = 4000000,
77 $ memsiz = totmem / dblesz, ntests = 20,
78 $ padval = -9923.0d+0, zero = 0.0d+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,
91 $ nprocs, nprow, nq, nrhs, worksiz
93 DOUBLE PRECISION anorm, anorm1, fresid, nops, rcond,
94 $ sresid, sresid2, tmflops
97 INTEGER desca( dlen_ ), descb( dlen_ ), ierr( 1 ),
98 $ mval( ntests ), nbrval( ntests ),
99 $ nbval( ntests ), nrval( ntests ),
100 $ nval( ntests ), pval( ntests ),
102 DOUBLE PRECISION ctime( 2 ), mem( memsiz ), wtime( 2 )
105 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
122 DATA kfail, kpass, kskip, ktests / 4*0 /
128 CALL blacs_pinfo( iam, nprocs )
131 CALL pdluinfo( outfile, nout, nmat, mval, nval, ntests, nnb,
132 $ nbval, ntests, nnr, nrval, ntests, nnbr, nbrval,
133 $ ntests, ngrids, pval, ntests, qval, ntests, thresh,
134 $ est, mem, iam, nprocs )
135 check = ( thresh.GE.0.0e+0 )
140 WRITE( nout, fmt = * )
141 WRITE( nout, fmt = 9995 )
142 WRITE( nout, fmt = 9994 )
143 WRITE( nout, fmt = * )
156 IF( nprow.LT.1 )
THEN
158 $
WRITE( nout, fmt = 9999 )
'GRID',
'nprow', nprow
160 ELSE IF( npcol.LT.1 )
THEN
162 $
WRITE( nout, fmt = 9999 )
'GRID',
'npcol', npcol
164 ELSE IF( nprow*npcol.GT.nprocs )
THEN
166 $
WRITE( nout, fmt = 9998 ) nprow*npcol, nprocs
170 IF( ierr( 1 ).GT.0 )
THEN
172 $
WRITE( nout, fmt = 9997 )
'grid'
179 CALL blacs_get( -1, 0, ictxt )
186 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
199 $
WRITE( nout, fmt = 9999 )
'MATRIX',
'M', m
201 ELSE IF( n.LT.1 )
THEN
203 $
WRITE( nout, fmt = 9999 )
'MATRIX',
'N', n
209 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
211 IF( ierr( 1 ).GT.0 )
THEN
213 $
WRITE( nout, fmt = 9997 )
'matrix'
228 $
WRITE( nout, fmt = 9999 )
'NB',
'NB', nb
233 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
235 IF( ierr( 1 ).GT.0 )
THEN
237 $
WRITE( nout, fmt = 9997 )
'NB'
244 mp =
numroc( m, nb, myrow, 0, nprow )
245 np =
numroc( n, nb, myrow, 0, nprow )
246 nq =
numroc( n, nb, mycol, 0, npcol )
248 iprepad =
max( nb, mp )
250 ipostpad =
max( nb, nq )
259 CALL descinit( desca, m, n, nb, nb, 0, 0, ictxt,
260 $
max( 1, mp )+imidpad, ierr( 1 ) )
264 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
266 IF( ierr( 1 ).LT.0 )
THEN
268 $
WRITE( nout, fmt = 9997 )
'descriptor'
277 IF( est .AND. m.EQ.n )
THEN
278 ipa0 = ipa + desca( lld_ )*nq + ipostpad + iprepad
279 ippiv = ipa0 + desca( lld_ )*nq + ipostpad + iprepad
281 ippiv = ipa + desca( lld_ )*nq + ipostpad + iprepad
283 lipiv =
iceil( intgsz*( mp+nb ), dblesz )
284 ipw = ippiv + lipiv + ipostpad + iprepad
292 worksiz =
max( 2, nq )
294 worksiz =
max( worksiz, mp*desca( nb_ )+
297 worksiz =
max( worksiz, mp * desca( nb_ ) )
299 worksiz = worksiz + ipostpad
310 IF( ipw+worksiz.GT.memsiz )
THEN
312 $
WRITE( nout, fmt = 9996 )
'factorization',
313 $ ( ipw+worksiz )*dblesz
319 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
321 IF( ierr( 1 ).GT.0 )
THEN
323 $
WRITE( nout, fmt = 9997 )
'MEMORY'
330 CALL pdmatgen( ictxt,
'No transpose',
'No transpose',
331 $ desca( m_ ), desca( n_ ), desca( mb_ ),
332 $ desca( nb_ ), mem( ipa ), desca( lld_ ),
333 $ desca( rsrc_ ), desca( csrc_ ), iaseed, 0,
334 $ mp, 0, nq, myrow, mycol, nprow, npcol )
339 CALL pdfillpad( ictxt, mp, nq, mem( ipa-iprepad ),
340 $ desca( lld_ ), iprepad, ipostpad,
342 CALL pdfillpad( ictxt, lipiv, 1, mem( ippiv-iprepad ),
343 $ lipiv, iprepad, ipostpad, padval )
344 CALL pdfillpad( ictxt, worksiz-ipostpad, 1,
346 $ iprepad, ipostpad, padval )
347 anorm =
pdlange(
'I', m, n, mem( ipa ), 1, 1, desca,
349 anorm1 =
pdlange( '1
', M, N, MEM( IPA ), 1, 1, DESCA,
351 CALL PDCHEKPAD( ICTXT, 'pdlange', MP, NQ,
352 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
353 $ IPREPAD, IPOSTPAD, PADVAL )
354 CALL PDCHEKPAD( ICTXT, 'pdlange', WORKSIZ-IPOSTPAD,
355 $ 1, MEM( IPW-IPREPAD ),
356 $ WORKSIZ-IPOSTPAD, IPREPAD, IPOSTPAD,
360.AND..EQ.
IF( EST MN ) THEN
361 CALL PDMATGEN( ICTXT, 'no transpose
', 'no transpose
',
362 $ DESCA( M_ ), DESCA( N_ ), DESCA( MB_ ),
363 $ DESCA( NB_ ), MEM( IPA0 ),
364 $ DESCA( LLD_ ), DESCA( RSRC_ ),
365 $ DESCA( CSRC_ ), IASEED, 0, MP, 0, NQ,
366 $ MYROW, MYCOL, NPROW, NPCOL )
368 $ CALL PDFILLPAD( ICTXT, MP, NQ, MEM( IPA0-IPREPAD ),
369 $ DESCA( LLD_ ), IPREPAD, IPOSTPAD,
374 CALL BLACS_BARRIER( ICTXT, 'all
' )
379 CALL PDGETRF( M, N, MEM( IPA ), 1, 1, DESCA,
380 $ MEM( IPPIV ), INFO )
386 $ WRITE( NOUT, FMT = * ) 'pdgetrf info=
', INFO
396 CALL PDCHEKPAD( ICTXT, 'pdgetrf', MP, NQ,
397 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
398 $ IPREPAD, IPOSTPAD, PADVAL )
399 CALL PDCHEKPAD( ICTXT, 'pdgetrf', LIPIV, 1,
400 $ MEM( IPPIV-IPREPAD ), LIPIV, IPREPAD,
415 CALL PDGETRRV( M, N, MEM( IPA ), 1, 1, DESCA,
416 $ MEM( IPPIV ), MEM( IPW ) )
417 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1, 1,
418 $ DESCA, IASEED, ANORM, FRESID,
423 CALL PDCHEKPAD( ICTXT, 'pdgetrrv', MP, NQ,
424 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
425 $ IPREPAD, IPOSTPAD, PADVAL )
426 CALL PDCHEKPAD( ICTXT, 'pdgetrrv', LIPIV, 1,
427 $ MEM( IPPIV-IPREPAD ), LIPIV,
428 $ IPREPAD, IPOSTPAD, PADVAL )
430 $ WORKSIZ-IPOSTPAD, 1,
431 $ MEM( IPW-IPREPAD ),
432 $ WORKSIZ-IPOSTPAD, IPREPAD,
437.LE..AND.
IF( ( FRESIDTHRESH )
438.EQ.
$ ( (FRESID-FRESID)0.0D+0 ) ) THEN
444.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
445 $ WRITE( NOUT, FMT = 9986 ) FRESID
453 FRESID = FRESID - FRESID
460 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 1, 1,
462 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1,
467.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
475 NOPS = DBLE( MAXMN )*( DBLE( MINMN )**2 ) -
476 $ (1.0D+0 / 3.0D+0)*( DBLE( MINMN )**3 ) -
477 $ (1.0D+0 / 2.0D+0)*( DBLE( MINMN )**2 )
484.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
485 TMFLOPS = NOPS / ( WTIME( 1 ) * 1.0D+6 )
491.GE.
IF( WTIME( 1 )0.0D+0 )
492 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N, NB,
493 $ NRHS, NBRHS, NPROW, NPCOL, WTIME( 1 ),
494 $ WTIME( 2 ), TMFLOPS, PASSED
498.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
499 TMFLOPS = NOPS / ( CTIME( 1 ) * 1.0D+6 )
505.GE.
IF( CTIME( 1 )0.0D+0 )
506 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N, NB,
507 $ NRHS, NBRHS, NPROW, NPCOL, CTIME( 1 ),
508 $ CTIME( 2 ), TMFLOPS, PASSED
519 LWORK = MAX( 1, 2*NP ) + MAX( 1, 2*NQ ) +
520 $ MAX( 2, DESCA( NB_ )*
521 $ MAX( 1, ICEIL( NPROW-1, NPCOL ) ),
523 $ MAX( 1, ICEIL( NPCOL-1, NPROW ) ) )
524 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
525 LIWORK = MAX( 1, NP )
526 LW2 = ICEIL( LIWORK*INTGSZ, DBLESZ ) + IPOSTPAD
529.GT.
IF( IPW2+LW2MEMSIZ ) THEN
531 $ WRITE( NOUT, FMT = 9996 )'cond est
',
532 $ ( IPW2+LW2 )*DBLESZ
538 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
541.GT.
IF( IERR( 1 )0 ) THEN
543 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
549 CALL PDFILLPAD( ICTXT, LWORK, 1,
550 $ MEM( IPW-IPREPAD ), LWORK,
551 $ IPREPAD, IPOSTPAD, PADVAL )
552 CALL PDFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
553 $ MEM( IPW2-IPREPAD ),
554 $ LW2-IPOSTPAD, IPREPAD,
560 CALL PDGECON( '1
', N, MEM( IPA ), 1, 1, DESCA,
561 $ ANORM1, RCOND, MEM( IPW ), LWORK,
562 $ MEM( IPW2 ), LIWORK, INFO )
565 CALL PDCHEKPAD( ICTXT, 'pdgecon', NP, NQ,
566 $ MEM( IPA-IPREPAD ),
567 $ DESCA( LLD_ ), IPREPAD,
569 CALL PDCHEKPAD( ICTXT, 'pdgecon', LWORK, 1,
570 $ MEM( IPW-IPREPAD ), LWORK,
571 $ IPREPAD, IPOSTPAD, PADVAL )
572 CALL PDCHEKPAD( ICTXT, 'pdgecon',
574 $ MEM( IPW2-IPREPAD ),
575 $ LW2-IPOSTPAD, IPREPAD,
592 CALL DESCINIT( DESCB, N, NRHS, NB, NBRHS, 0, 0,
593 $ ICTXT, MAX( 1, NP )+IMIDPAD,
598 CALL IGSUM2D( ICTXT, 'all',
' ', 1, 1, ierr, 1,
601 IF( ierr( 1 ).LT.0 )
THEN
603 $
WRITE( nout, fmt = 9997 )
'descriptor'
610 myrhs =
numroc( descb( n_ ), descb( nb_ ),
611 $ mycol, descb( csrc_ ), npcol )
615 ipb0 = ipb + descb( lld_ )*myrhs + ipostpad +
617 ipferr = ipb0 + descb( lld_ )*myrhs +
619 ipberr = myrhs + ipferr + ipostpad + iprepad
620 ipw = myrhs + ipberr + ipostpad + iprepad
622 ipw = ipb + descb( lld_ )*myrhs + ipostpad +
630 lcm =
ilcm( nprow, npcol )
632 worksiz =
max( worksiz-ipostpad,
633 $ nq * nbrhs + np * nbrhs +
634 $
max(
max( nq*nb, 2*nbrhs ),
637 worksiz = ipostpad + worksiz
643 IF( ipw+worksiz.GT.memsiz )
THEN
645 $
WRITE( nout, fmt = 9996 )'solve
',
646 $ ( IPW+WORKSIZ )*DBLESZ
652 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1,
655.GT.
IF( IERR( 1 )0 ) THEN
657 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
664 CALL PDMATGEN( ICTXT, 'no
', 'no
', DESCB( M_ ),
665 $ DESCB( N_ ), DESCB( MB_ ),
666 $ DESCB( NB_ ), MEM( IPB ),
667 $ DESCB( LLD_ ), DESCB( RSRC_ ),
668 $ DESCB( CSRC_ ), IBSEED, 0, NP, 0,
669 $ MYRHS, MYROW, MYCOL, NPROW,
673 $ CALL PDFILLPAD( ICTXT, NP, MYRHS,
674 $ MEM( IPB-IPREPAD ),
675 $ DESCB( LLD_ ), IPREPAD,
679 CALL PDMATGEN( ICTXT, 'no
', 'no
',
680 $ DESCB( M_ ), DESCB( N_ ),
681 $ DESCB( MB_ ), DESCB( NB_ ),
682 $ MEM( IPB0 ), DESCB( LLD_ ),
684 $ DESCB( CSRC_ ), IBSEED, 0, NP,
685 $ 0, MYRHS, MYROW, MYCOL, NPROW,
688 CALL PDFILLPAD( ICTXT, NP, MYRHS,
689 $ MEM( IPB0-IPREPAD ),
690 $ DESCB( LLD_ ), IPREPAD,
692 CALL PDFILLPAD( ICTXT, 1, MYRHS,
693 $ MEM( IPFERR-IPREPAD ), 1,
696 CALL PDFILLPAD( ICTXT, 1, MYRHS,
697 $ MEM( IPBERR-IPREPAD ), 1,
703 CALL BLACS_BARRIER( ICTXT, 'all
' )
708 CALL PDGETRS( 'no
', N, NRHS, MEM( IPA ), 1, 1,
709 $ DESCA, MEM( IPPIV ), MEM( IPB ),
710 $ 1, 1, DESCB, INFO )
718 CALL PDCHEKPAD( ICTXT, 'pdgetrs', NP, NQ,
719 $ MEM( IPA-IPREPAD ),
720 $ DESCA( LLD_ ), IPREPAD,
722 CALL PDCHEKPAD( ICTXT, 'pdgetrs', LIPIV, 1,
723 $ MEM( IPPIV-IPREPAD ), LIPIV,
724 $ IPREPAD, IPOSTPAD, PADVAL )
725 CALL PDCHEKPAD( ICTXT, 'pdgetrs', NP,
726 $ MYRHS, MEM( IPB-IPREPAD ),
727 $ DESCB( LLD_ ), IPREPAD,
730 CALL PDFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
731 $ 1, MEM( IPW-IPREPAD ),
732 $ WORKSIZ-IPOSTPAD, IPREPAD,
737 CALL PDLASCHK( 'no
', 'n
', N, NRHS,
738 $ MEM( IPB ), 1, 1, DESCB,
739 $ IASEED, 1, 1, DESCA, IBSEED,
740 $ ANORM, SRESID, MEM( IPW ) )
742.EQ..AND..GT.
IF( IAM0 SRESIDTHRESH )
743 $ WRITE( NOUT, FMT = 9985 ) SRESID
747 CALL PDCHEKPAD( ICTXT, 'pdlaschk', NP,
748 $ MYRHS, MEM( IPB-IPREPAD ),
749 $ DESCB( LLD_ ), IPREPAD,
752 $ WORKSIZ-IPOSTPAD, 1,
753 $ MEM( IPW-IPREPAD ),
755 $ IPREPAD, IPOSTPAD, PADVAL )
759.LE..AND.
IF( SRESIDTHRESH
760.EQ.
$ ( SRESID-SRESID )0.0D+0 ) THEN
769 SRESID = SRESID - SRESID
777 LWORK = MAX( 1, 3*NP )
778 IPW2 = IPW + LWORK + IPOSTPAD + IPREPAD
779 LIWORK = MAX( 1, NP )
780 LW2 = ICEIL( LIWORK*INTGSZ, DBLESZ ) +
784.GT.
IF( IPW2+LW2MEMSIZ ) THEN
786 $ WRITE( NOUT, FMT = 9996 )
787 $ 'iter ref
', ( IPW2+LW2 )*DBLESZ
793 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
796.GT.
IF( IERR( 1 )0 ) THEN
798 $ WRITE( NOUT, FMT = 9997 )
805 CALL PDFILLPAD( ICTXT, LWORK, 1,
806 $ MEM( IPW-IPREPAD ),
807 $ LWORK, IPREPAD, IPOSTPAD,
809 CALL PDFILLPAD( ICTXT, LW2-IPOSTPAD, 1,
810 $ MEM( IPW2-IPREPAD ),
811 $ LW2-IPOSTPAD, IPREPAD,
818 CALL PDGERFS( 'no
', N, NRHS, MEM( IPA0 ), 1,
819 $ 1, DESCA, MEM( IPA ), 1, 1,
820 $ DESCA, MEM( IPPIV ),
821 $ MEM( IPB0 ), 1, 1, DESCB,
822 $ MEM( IPB ), 1, 1, DESCB,
823 $ MEM( IPFERR ), MEM( IPBERR ),
824 $ MEM( IPW ), LWORK, MEM( IPW2 ),
828 CALL PDCHEKPAD( ICTXT, 'pdgerfs', NP,
829 $ NQ, MEM( IPA0-IPREPAD ),
830 $ DESCA( LLD_ ), IPREPAD,
832 CALL PDCHEKPAD( ICTXT, 'pdgerfs', NP,
833 $ NQ, MEM( IPA-IPREPAD ),
834 $ DESCA( LLD_ ), IPREPAD,
836 CALL PDCHEKPAD( ICTXT, 'pdgerfs', LIPIV,
837 $ 1, MEM( IPPIV-IPREPAD ),
840 CALL PDCHEKPAD( ICTXT, 'pdgerfs', NP,
841 $ MYRHS, MEM( IPB-IPREPAD ),
842 $ DESCB( LLD_ ), IPREPAD,
844 CALL PDCHEKPAD( ICTXT, 'pdgerfs', NP,
846 $ MEM( IPB0-IPREPAD ),
847 $ DESCB( LLD_ ), IPREPAD,
849 CALL PDCHEKPAD( ICTXT, 'pdgerfs', 1,
851 $ MEM( IPFERR-IPREPAD ), 1,
854 CALL PDCHEKPAD( ICTXT, 'pdgerfs', 1,
856 $ MEM( IPBERR-IPREPAD ), 1,
859 CALL PDCHEKPAD( ICTXT, 'pdgerfs', LWORK,
860 $ 1, MEM( IPW-IPREPAD ),
861 $ LWORK, IPREPAD, IPOSTPAD,
863 CALL PDCHEKPAD( ICTXT, 'pdgerfs',
865 $ MEM( IPW2-IPREPAD ),
866 $ LW2-IPOSTPAD, IPREPAD,
869 CALL PDFILLPAD( ICTXT, WORKSIZ-IPOSTPAD,
870 $ 1, MEM( IPW-IPREPAD ),
871 $ WORKSIZ-IPOSTPAD, IPREPAD,
876 CALL PDLASCHK( 'no
', 'n
', N, NRHS,
877 $ MEM( IPB ), 1, 1, DESCB,
878 $ IASEED, 1, 1, DESCA,
879 $ IBSEED, ANORM, SRESID2,
882.EQ..AND..GT.
IF( IAM0 SRESID2THRESH )
883 $ WRITE( NOUT, FMT = 9985 ) SRESID2
887 CALL PDCHEKPAD( ICTXT, 'pdlaschk', NP,
888 $ MYRHS, MEM( IPB-IPREPAD ),
889 $ DESCB( LLD_ ), IPREPAD,
892 $ WORKSIZ-IPOSTPAD, 1,
893 $ MEM( IPW-IPREPAD ),
894 $ WORKSIZ-IPOSTPAD, IPREPAD,
901 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 2, 1,
903 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 2, 1,
908.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
912 NOPS = (2.0D+0/3.0D+0)*( DBLE(N)**3 ) -
913 $ (1.0D+0/2.0D+0)*( DBLE(N)**2 )
917 NOPS = NOPS + 2.0D+0*(DBLE(N)**2)*DBLE(NRHS)
925.GT.
IF( WTIME( 1 ) + WTIME( 2 ) 0.0D+0 )
928 $ ( ( WTIME( 1 )+WTIME( 2 ) ) * 1.0D+6 )
935.GE.
IF( WTIME( 2 )0.0D+0 )
936 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N,
937 $ NB, NRHS, NBRHS, NPROW, NPCOL,
938 $ WTIME( 1 ), WTIME( 2 ), TMFLOPS,
943.GT.
IF( CTIME( 1 )+CTIME( 2 )0.0D+0 )
946 $ ( ( CTIME( 1 )+CTIME( 2 ) ) * 1.0D+6 )
951.GE.
IF( CTIME( 2 )0.0D+0 )
952 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N,
953 $ NB, NRHS, NBRHS, NPROW, NPCOL,
954 $ CTIME( 1 ), CTIME( 2 ), TMFLOPS,
960.AND..GT.
IF( CHECK( SRESIDTHRESH ) ) THEN
964 CALL PDGETRRV( M, N, MEM( IPA ), 1, 1, DESCA,
965 $ MEM( IPPIV ), MEM( IPW ) )
966 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
967 $ 1, DESCA, IASEED, ANORM, FRESID,
972 CALL PDCHEKPAD( ICTXT, 'pdgetrrv', NP, NQ,
973 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
974 $ IPREPAD, IPOSTPAD, PADVAL )
975 CALL PDCHEKPAD( ICTXT, 'pdgetrrv', LIPIV,
976 $ 1, MEM( IPPIV-IPREPAD ), LIPIV,
977 $ IPREPAD, IPOSTPAD, PADVAL )
979 $ WORKSIZ-IPOSTPAD, 1,
980 $ MEM( IPW-IPREPAD ),
981 $ WORKSIZ-IPOSTPAD, IPREPAD,
984.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
985 $ WRITE( NOUT, FMT = 9986 ) FRESID
990 CALL BLACS_GRIDEXIT( ICTXT )
997 KTESTS = KPASS + KFAIL + KSKIP
998 WRITE( NOUT, FMT = * )
999 WRITE( NOUT, FMT = 9992 ) KTESTS
1001 WRITE( NOUT, FMT = 9991 ) KPASS
1002 WRITE( NOUT, FMT = 9989 ) KFAIL
1004 WRITE( NOUT, FMT = 9990 ) KPASS
1006 WRITE( NOUT, FMT = 9988 ) KSKIP
1007 WRITE( NOUT, FMT = * )
1008 WRITE( NOUT, FMT = * )
1009 WRITE( NOUT, FMT = 9987 )
1010.NE..AND..NE.
IF( NOUT6 NOUT0 )
1014 CALL BLACS_EXIT( 0 )
1016 9999 FORMAT( 'illegal
', A6, ':
', A5, ' =
', I3,
1017 $ '; it should be at least 1
' )
1018 9998 FORMAT( 'illegal grid: nprow*npcol =
', I4, '. it can be at most
',
1020 9997 FORMAT( 'bad
', A6, ' parameters: going on to next test case.
' )
1021 9996 FORMAT( 'unable to perform
', A, ': need totmem of at least
',
1023 9995 FORMAT( 'time m n nb nrhs nbrhs p q lu time
',
1024 $ 'sol time mflops check
' )
1025 9994 FORMAT( '---- ----- ----- --- ---- ----- ---- ---- --------
',
1026 $ '-------- -------- ------
' )
1027 9993 FORMAT( A4, 1X, I5, 1X, I5, 1X, I3, 1X, I5, 1X, I4, 1X, I4, 1X,
1028 $ I4, 1X, F8.2, 1X, F8.2, 1X, F8.2, 1X, A6 )
1029 9992 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
1030 9991 FORMAT( I5, ' tests completed and passed residual checks.
' )
1031 9990 FORMAT( I5, ' tests completed without checking.
' )
1032 9989 FORMAT( I5, ' tests completed and failed residual checks.
' )
1033 9988 FORMAT( I5, ' tests skipped because of illegal input values.
' )
1034 9987 FORMAT( 'END OF TESTS.
' )
1035 9986 FORMAT( '||A - P*L*U|| / (||A|| * N * eps) =
', G25.7 )
1036 9985 FORMAT( '||Ax-b||/(||x||*||A||*eps*N)
', F25.7 )
subroutine pdlafchk(aform, diag, m, n, a, ia, ja, desca, iaseed, anorm, fresid, work)
subroutine pdmatgen(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 pdgetrs(trans, n, nrhs, a, ia, ja, desca, ipiv, b, ib, jb, descb, info)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine pdgetrf(m, n, a, ia, ja, desca, ipiv, info)
subroutine pdgecon(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)
double precision function pdlange(norm, m, n, a, ia, ja, desca, work)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pdchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine pdfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
subroutine pdgerfs(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 pdgetrrv(m, n, a, ia, ja, desca, ipiv, work)
subroutine pdlaschk(symm, diag, n, nrhs, x, ix, jx, descx, iaseed, ia, ja, desca, ibseed, anorm, resid, work)
subroutine pdluinfo(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)