64 INTEGER block_cyclic_2d, csrc_, ctxt_, dlen_, dtype_,
65 $ lld_, mb_, m_, nb_, n_, rsrc_
66 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
67 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
68 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
69 INTEGER cplxsz, memsiz, ntests, realsz, totmem
71 COMPLEX one, padval, zero
72 parameter( cplxsz = 8, realsz = 8, totmem = 2000000,
73 $ memsiz = totmem / cplxsz, ntests = 20,
74 $ padval = ( -9923.0e+0, -9923.0e+0 ) )
75 parameter( one = ( 1.0e+0, 0.0e+0 ), rzero = 0.0e+0,
76 $ rone = 1.0e+0, zero = ( 0.0e+0, 0.0e+0 ) )
83 INTEGER hh, i, iam, iaseed, ibseed, ictxt, ii, imidpad,
84 $ info, ipa, ipb, ipostpad, iprepad, ipw, ipw2,
85 $ ipx, iscale, itran, itype, j, jj, k, kfail, kk,
86 $ kpass, kskip, ktests, lcm, lcmp, , lwf,
87 $ lwork, lws, m, mnp, mnrhsp, mp, mq, mycol,
88 $ myrow, n, nb, nbrhs, ncols, ngrids, nmat, nnb,
89 $ nnbr, nnr, nnrhsq, nout, np, npcol, nprocs,
90 $ nprow, nrows, nq, nrhs, nrhsp, nrhsq, worksiz
91 REAL anorm, bnorm, sresid, thresh
92 DOUBLE PRECISION addfac, adds, mulfac, mults, nops, tmflops
95 INTEGER desca( dlen_ ), descb( dlen_ ), descw( lld_ ),
96 $ descx( dlen_ ), ierr( 2 ), mval( ntests ),
97 $ nbrval( ntests ), nbval( ntests ),
98 $ nrval( ntests ), nval( ntests ),
99 $ pval( ntests ), qval( ntests )
101 DOUBLE PRECISION ctime( 1 ), wtime( 1 )
102 COMPLEX mem( memsiz )
105 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
124 DATA ktests, kpass, kfail, kskip / 4*0 /
130 CALL blacs_pinfo( iam, nprocs )
134 CALL pclsinfo( outfile, nout, nmat, mval, ntests, nval,
135 $ ntests, nnb, nbval, ntests, nnr, nrval, ntests,
136 $ nnbr, nbrval, ntests, ngrids, pval, ntests, qval,
137 $ ntests, thresh, mem, iam, nprocs )
138 check = ( thresh.GE.0.0e+0 )
143 WRITE( nout, fmt = * )
144 WRITE( nout, fmt = 9995 )
145 WRITE( nout, fmt = 9994 )
146 WRITE( nout, fmt = * )
159 IF( nprow.LT.1 )
THEN
161 $
WRITE( nout, fmt = 9999 )
'GRID',
'nprow', nprow
163 ELSE IF( npcol.LT.1 )
THEN
165 $
WRITE( nout, fmt = 9999 )
'GRID',
'npcol', npcol
167 ELSE IF( nprow*npcol.GT.nprocs )
THEN
169 $
WRITE( nout, fmt = 9998 ) nprow*npcol, nprocs
173 IF( ierr( 1 ).GT.0 )
THEN
175 $
WRITE( nout, fmt = 9997 )
'grid'
182 CALL blacs_get( -1, 0, ictxt )
188 IF( ( myrow.GE.nprow ).OR.( mycol.GE.npcol ) )
201 $
WRITE( nout, fmt = 9999 )
'MATRIX',
'M', m
203 ELSE IF( n.LT.1 )
THEN
205 $
WRITE( nout, fmt
'MATRIX',
'N', n
211 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
213 IF( ierr( 1 ).GT.0 )
THEN
215 $
WRITE( nout, fmt = 9997 )
'matrix'
232 $
WRITE( nout, fmt = 9999 )
'NB',
'NB', nb
237 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
239 IF( ierr( 1 ).GT.0 )
THEN
241 $
WRITE( nout, fmt = 9997 )
'NB'
248 mp =
numroc( m, nb, myrow, 0, nprow )
249 mq =
numroc( m, nb, mycol, 0, npcol )
250 np =
numroc( n, nb, myrow, 0, nprow )
252 nq =
numroc( n, nb, mycol, 0, npcol )
255 iprepad =
max( nb, mp )
257 ipostpad =
max( nb, nq )
266 CALL descinit( desca, m, n, nb, nb, 0, 0, ictxt,
267 $
max( 1, mp ) + imidpad, ierr( 1 ) )
271 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1, 0 )
273 IF( ierr( 1 ).LT.0 )
THEN
275 $
WRITE( nout, fmt = 9997 )
'descriptor'
288 ipx = ipa + desca( lld_ )*nq + ipostpad + iprepad
291 worksiz = nq + ipostpad
296 IF( ( ipw+worksiz ).GT.memsiz )
THEN
298 $
WRITE( nout, fmt = 9996 )
'MEMORY',
299 $ ( ipx+worksiz )*cplxsz
305 CALL igsum2d( ictxt,
'All',
' ', 1, 1, ierr, 1, -1,
308 IF( ierr( 1 ).GT.0 )
THEN
310 $
WRITE( nout, fmt = 9997 )
'MEMORY'
316 CALL pcfillpad( ictxt, mp, nq, mem( ipa-iprepad ),
317 $ desca( lld_ ), iprepad, ipostpad,
319 CALL pcfillpad( ictxt, worksiz-ipostpad, 1,
320 $ mem( ipw-iprepad ),
321 $ worksiz-ipostpad, iprepad,
327 CALL pcqrt13( iscale, m, n, mem( ipa ), 1, 1,
328 $ desca, anorm, iaseed, mem( ipw ) )
331 CALL pcchekpad( ictxt,
'PCQRT13', mp, nq,
332 $ mem( ipa-iprepad ), desca( lld_ ),
333 $ iprepad, ipostpad, padval )
335 $ worksiz-ipostpad, 1,
336 $ mem( ipw-iprepad ),
337 $ worksiz-ipostpad, iprepad,
343 IF( itran.EQ.1 )
THEN
365 nrhsp =
numroc( nrhs, nbrhs, myrow, 0,
367 nrhsq =
numroc( nrhs, nbrhs, mycol, 0,
373 $ nbrhs, 0, 0, ictxt,
374 $
max( 1, mnp ) + imidpad,
377 CALL descinit( descw, m, nrhs, nb, nbrhs,
378 $ 0, 0, ictxt,
max( 1, mp ) +
379 $ imidpad, ierr( 2 ) )
381 CALL descinit( descw, n, nrhs, nb, nbrhs,
382 $ 0, 0, ictxt,
max( 1, np ) +
383 $ imidpad, ierr( 2 ) )
388 CALL igsum2d( ictxt,
'All',
' ', 2, 1, ierr,
391 IF( ierr( 1 ).LT.0 .OR. ierr( 2 ).LT.0 )
THEN
393 $
WRITE( nout, fmt = 9997 )
'descriptor'
400 ipx = ipa + desca( lld_ )*nq + ipostpad +
402 ipw = ipx + descx( lld_ )*nrhsq + ipostpad +
404 worksiz = descw( lld_ )*nrhsq + ipostpad
407 IF( ipw+worksiz.GT.memsiz )
THEN
409 $
WRITE( nout, fmt = 9996 ) 'generation
',
410 $ ( IPW+WORKSIZ )*CPLXSZ
416 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR,
419.GT.
IF( IERR( 1 )0 ) THEN
421 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
429 CALL PCMATGEN( ICTXT, 'no
', 'no
',
430 $ DESCW( M_ ), DESCW( N_ ),
431 $ DESCW( MB_ ), DESCW( NB_ ),
432 $ MEM( IPW ), DESCW( LLD_ ),
434 $ DESCW( CSRC_ ), IBSEED, 0,
435 $ MP, 0, NRHSQ, MYROW, MYCOL,
438 CALL PCMATGEN( ICTXT, 'no
', 'no
',
439 $ DESCW( M_ ), DESCW( N_ ),
440 $ DESCW( MB_ ), DESCW( NB_ ),
441 $ MEM( IPW ), DESCW( LLD_ ),
443 $ DESCW( CSRC_ ), IBSEED, 0,
444 $ NP, 0, NRHSQ, MYROW, MYCOL,
449 CALL PCFILLPAD( ICTXT, MNP, NRHSQ,
450 $ MEM( IPX-IPREPAD ),
451 $ DESCX( LLD_ ), IPREPAD,
454 CALL PCFILLPAD( ICTXT, MP, NRHSQ,
455 $ MEM( IPW-IPREPAD ),
456 $ DESCW( LLD_ ), IPREPAD,
459 CALL PCFILLPAD( ICTXT, NP, NRHSQ,
460 $ MEM( IPW-IPREPAD ),
461 $ DESCW( LLD_ ), IPREPAD,
467 CALL PSCNRM2( NCOLS, BNORM, MEM( IPW ),
470 $ CALL PCSSCAL( NCOLS, RONE / BNORM,
471 $ MEM( IPW ), 1, JJ, DESCW,
475 CALL PCGEMM( TRANS, 'n
', NROWS, NRHS, NCOLS,
476 $ ONE, MEM( IPA ), 1, 1, DESCA,
477 $ MEM( IPW ), 1, 1, DESCW, ZERO,
478 $ MEM( IPX ), 1, 1, DESCX )
484 CALL PCCHEKPAD( ICTXT, 'generation
', MP,
485 $ NQ, MEM( IPA-IPREPAD ),
486 $ DESCA( LLD_ ), IPREPAD,
488 CALL PCCHEKPAD( ICTXT, 'generation
', MNP,
489 $ NRHSQ, MEM( IPX-IPREPAD ),
490 $ DESCX( LLD_ ), IPREPAD,
493 CALL PCCHEKPAD( ICTXT, 'generation
',
495 $ MEM( IPW-IPREPAD ),
496 $ DESCW( LLD_ ), IPREPAD,
499 CALL PCCHEKPAD( ICTXT, 'generation
',
501 $ MEM( IPW-IPREPAD ),
502 $ DESCW( LLD_ ), IPREPAD,
511 CALL DESCINIT( DESCB, N, NRHS, NB,
512 $ NBRHS, 0, 0, ICTXT,
513 $ MAX( 1, NP ) + IMIDPAD,
516 CALL DESCINIT( DESCB, M, NRHS, NB,
517 $ NBRHS, 0, 0, ICTXT,
518 $ MAX( 1, MP ) + IMIDPAD,
524 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
527.LT.
IF( IERR( 1 )0 ) THEN
529 $ WRITE( NOUT, FMT = 9997 )
535 IPW = IPB + DESCB( LLD_ )*NRHSQ +
543 LTAU = NUMROC( MIN(M,N), NB, MYCOL, 0,
545 LWF = NB * ( MP + NQ + NB )
546 LWS = MAX( ( NB*( NB - 1 ) ) / 2,
547 $ ( MP + NRHSQ ) * NB ) + NB*NB
549 LCM = ILCM( NPROW, NPCOL )
551 LTAU = NUMROC( MIN(M,N), NB, MYROW, 0,
553 LWF = NB * ( MP + NQ + NB )
554 LWS = MAX( ( NB*( NB - 1 ) ) / 2, ( NP +
555 $ MAX( NQ + NUMROC( NUMROC( N, NB, 0,
556 $ 0, NPROW ), NB, 0, 0, LCMP ),
557 $ NRHSQ ) ) * NB ) + NB*NB
560 LWORK = LTAU + MAX( LWF, LWS )
561 WORKSIZ = LWORK + IPOSTPAD
566.GT.
IF( IPW+WORKSIZMEMSIZ ) THEN
568 $ WRITE( NOUT, FMT = 9996 ) 'solve
',
569 $ ( IPW+WORKSIZ )*CPLXSZ
575 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR,
578.GT.
IF( IERR( 1 )0 ) THEN
580 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
589 CALL PCLACPY( 'all
', NROWS, NRHS,
590 $ MEM( IPX ), 1, 1, DESCX,
591 $ MEM( IPB ), 1, 1, DESCB )
594 CALL PCFILLPAD( ICTXT, NP, NRHSQ,
595 $ MEM( IPB-IPREPAD ),
596 $ DESCB( LLD_ ), IPREPAD,
599 CALL PCFILLPAD( ICTXT, MP, NRHSQ,
600 $ MEM( IPB-IPREPAD ),
601 $ DESCB( LLD_ ), IPREPAD,
604 CALL PCFILLPAD( ICTXT, LWORK, 1,
605 $ MEM( IPW-IPREPAD ),
611 CALL BLACS_BARRIER( ICTXT, 'all
' )
616 CALL PCGELS( TRANS, M, N, NRHS, MEM( IPA ),
617 $ 1, 1, DESCA, MEM( IPX ), 1, 1,
618 $ DESCX, MEM( IPW ), LWORK, INFO )
626 CALL PCCHEKPAD( ICTXT, 'pcgels', MP,
627 $ NQ, MEM( IPA-IPREPAD ),
628 $ DESCA( LLD_ ), IPREPAD,
630 CALL PCCHEKPAD( ICTXT, 'pcgels', MNP,
631 $ NRHSQ, MEM( IPX-IPREPAD ),
632 $ DESCX( LLD_ ), IPREPAD,
634 CALL PCCHEKPAD( ICTXT, 'pcgels', LWORK,
635 $ 1, MEM( IPW-IPREPAD ),
643 CALL PCQRT13( ISCALE, M, N, MEM( IPA ), 1, 1,
644 $ DESCA, ANORM, IASEED,
653.GE..AND..NOT..OR.
IF( ( MN ( TPSD ) )
654.LT..AND.
$ ( MN TPSD ) ) THEN
662 WORKSIZ = NP*NRHSQ + NRHSP*MQ
665 $ ICEIL( REALSZ*MAX( NQ, MAX(
666 $ MQ, NRHSQ ) ), CPLXSZ ) +
669 WORKSIZ = MP*NRHSQ + NRHSP*NQ
672 $ ICEIL( REALSZ*MAX( NQ,
673 $ NRHSQ ), CPLXSZ ) +
681.GT.
IF( ( IPW+WORKSIZ )MEMSIZ ) THEN
683 $ WRITE( NOUT, FMT = 9996 )
684 $ 'memory
', ( IPW+WORKSIZ )*CPLXSZ
690 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
693.GT.
IF( IERR( 1 )0 ) THEN
695 $ WRITE( NOUT, FMT = 9997 )
701 CALL PCFILLPAD( ICTXT,
702 $ WORKSIZ-IPOSTPAD, 1,
703 $ MEM( IPW-IPREPAD ),
708 RESULT( 2 ) = PCQRT17( TRANS, 1, M, N,
720 CALL PCCHEKPAD( ICTXT, 'pcqrt17',
722 $ MEM( IPA-IPREPAD ),
726 CALL PCCHEKPAD( ICTXT, 'pcqrt17',
728 $ MEM( IPX-IPREPAD ),
729 $ DESCX( LLD_ ), IPREPAD,
732 CALL PCCHEKPAD( ICTXT, 'pcqrt17',
734 $ MEM( IPB-IPREPAD ),
739 CALL PCCHEKPAD( ICTXT, 'pcqrt17',
741 $ MEM( IPB-IPREPAD ),
746 CALL PCCHEKPAD( ICTXT, 'pcqrt17',
747 $ WORKSIZ-IPOSTPAD, 1,
748 $ MEM( IPW-IPREPAD ),
757 WORKSIZ = MP + IPOSTPAD
759 WORKSIZ = NQ + IPOSTPAD
765.GT.
IF( ( IPW+WORKSIZ )MEMSIZ ) THEN
767 $ WRITE( NOUT, FMT = 9996 ) 'memory
',
768 $ ( IPW+WORKSIZ )*CPLXSZ
774 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
777.GT.
IF( IERR( 1 )0 ) THEN
779 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
784 CALL PCFILLPAD( ICTXT,
785 $ WORKSIZ-IPOSTPAD, 1,
786 $ MEM( IPW-IPREPAD ),
791 CALL PCQRT16( TRANS, M, N, NRHS,
792 $ MEM( IPA ), 1, 1, DESCA,
793 $ MEM( IPX ), 1, 1, DESCX,
794 $ MEM( IPB ), 1, 1, DESCB,
795 $ MEM( IPW ), RESULT( 1 ) )
797 CALL PCCHEKPAD( ICTXT, 'pcqrt16',
799 $ MEM( IPA-IPREPAD ),
803 CALL PCCHEKPAD( ICTXT, 'pcqrt16',
805 $ MEM( IPX-IPREPAD ),
806 $ DESCX( LLD_ ), IPREPAD,
809 CALL PCCHEKPAD( ICTXT, 'pcqrt16',
811 $ MEM( IPB-IPREPAD ),
816 CALL PCCHEKPAD( ICTXT, 'pcqrt16',
818 $ MEM( IPB-IPREPAD ),
823 CALL PCCHEKPAD( ICTXT, 'pcqrt16',
824 $ WORKSIZ-IPOSTPAD, 1,
825 $ MEM( IPW-IPREPAD ),
832.GE..AND..OR.
IF( ( MN TPSD )
833.LT..AND..NOT.
$ ( MN ( TPSD ) ) ) THEN
839 NNRHSQ = NUMROC( N+NRHS, NB, MYCOL,
841 LTAU = NUMROC( MIN( M, N+NRHS ), NB,
843 LWF = NB * ( NB + MP + NNRHSQ )
844 WORKSIZ = MP * NNRHSQ + LTAU + LWF +
849 MNRHSP = NUMROC( M+NRHS, NB, MYROW,
851 LTAU = NUMROC( MIN( M+NRHS, N ), NB,
853 LWF = NB * ( NB + MNRHSP + NQ )
854 WORKSIZ = MNRHSP * NQ + LTAU + LWF +
863.GT.
IF( ( IPW+WORKSIZ )MEMSIZ ) THEN
865 $ WRITE( NOUT, FMT = 9996 )
866 $ 'memory
', ( IPW+WORKSIZ )*CPLXSZ
872 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1,
875.GT.
IF( IERR( 1 )0 ) THEN
877 $ WRITE( NOUT, FMT = 9997 )
883 CALL PCFILLPAD( ICTXT,
884 $ WORKSIZ-IPOSTPAD, 1,
885 $ MEM( IPW-IPREPAD ),
892 RESULT( 2 ) = PCQRT14( TRANS, M, N,
901 CALL PCCHEKPAD( ICTXT, 'pcqrt14',
903 $ MEM( IPA-IPREPAD ),
907 CALL PCCHEKPAD( ICTXT, 'pcqrt14',
909 $ MEM( IPX-IPREPAD ),
910 $ DESCX( LLD_ ), IPREPAD,
912 CALL PCCHEKPAD( ICTXT, 'pcqrt14',
913 $ WORKSIZ-IPOSTPAD, 1,
914 $ MEM( IPW-IPREPAD ),
925.GE..AND.
IF( ( RESULT( II )THRESH )
926.EQ.
$ ( RESULT( II )-RESULT( II )0.0E+0
929 $ WRITE( NOUT, FMT = 9986 )TRANS,
930 $ M, N, NRHS, NB, ITYPE, II,
944 SRESID = SRESID - SRESID
952 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 1, 1,
954 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1,
959.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
968 MULTS = N*( ( ( 23.D0 / 6.D0 )+M+N /
969 $ 2.D0 )+ N*( M-N / 3.D0 ) ) +
970 $ N*NRHS*( 2.D0*M+2.D0-N )
971 ADDS = N*( ( 5.D0 / 6.D0 )+N*
972 $ ( 1.D0 / 2.D0+( M-N / 3.D0 ) ) )
973 $ + N*NRHS*( 2.D0*M+1.D0-N )
980 MULTS = M*( ( ( 29.D0 / 6.D0 )+2.D0*N-M
981 $ / 2.D0 )+M*( N-M / 3.D0 ) )
982 $ + N*NRHS*( 2.D0*M+2.D0-N )
983 ADDS = M*( ( 5.D0 / 6.D0 )+M / 2.D0+M*
985 $ + N*NRHS*( 2.D0*M+1.D0-N )
987 NOPS = ADDFAC*ADDS + MULFAC*MULTS
994.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
995 TMFLOPS = NOPS / ( WTIME( 1 )*1.0D+6 )
1000.GE.
IF( WTIME( 1 )0.0D+0 )
1001 $ WRITE( NOUT, FMT = 9993 )
1002 $ 'wall
', TRANS, M, N, NB, NRHS,
1003 $ NBRHS, NPROW, NPCOL, WTIME( 1 ),
1008.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
1009 TMFLOPS = NOPS / ( CTIME( 1 )*1.0D+6 )
1014.GE.
IF( CTIME( 1 )0.0D+0 )
1015 $ WRITE( NOUT, FMT = 9993 )
1016 $ 'cpu
', TRANS, M, N, NB, NRHS,
1017 $ NBRHS, NPROW, NPCOL, CTIME( 1 ),
1026 CALL BLACS_GRIDEXIT( ICTXT )
1032 KTESTS = KPASS + KFAIL + KSKIP
1033 WRITE( NOUT, FMT = * )
1034 WRITE( NOUT, FMT = 9992 ) KTESTS
1036 WRITE( NOUT, FMT = 9991 ) KPASS
1037 WRITE( NOUT, FMT = 9989 ) KFAIL
1039 WRITE( NOUT, FMT = 9990 ) KPASS
1041 WRITE( NOUT, FMT = 9988 ) KSKIP
1042 WRITE( NOUT, FMT = * )
1043 WRITE( NOUT, FMT = * )
1044 WRITE( NOUT, FMT = 9987 )
1045.NE..AND..NE.
IF( NOUT6 NOUT0 )
1049 CALL BLACS_EXIT( 0 )
1051 9999 FORMAT( 'illegal
', A6, ':
', A5, ' =
', I3,
1052 $ '; it should be at least 1
' )
1053 9998 FORMAT( 'illegal grid: nprow*npcol =
', I4, '. it can be at most
',
1055 9997 FORMAT( 'bad
', A6, ' parameters: going on to next test case.
' )
1056 9996 FORMAT( 'unable to perform
', A, ': need totmem of at least
',
1058 9995 FORMAT( 'time trans m n nb nrhs nbrhs p q
',
1059 $ 'ls time mflops check
' )
1060 9994 FORMAT( '---- ----- ------ ------ --- ----- ----- ----- -----
',
1061 $ '--------- -------- ------
' )
1062 9993 FORMAT( A4, 3X, A1, 3X, I6, 1X, I6, 1X, I3, 1X, I5, 1X, I5, 1X,
1063 $ I5, 1X, I5, 1X, F9.2, 1X, F8.2, 1X, A6 )
1064 9992 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
1065 9991 FORMAT( I5, ' tests completed and passed residual checks.
' )
1066 9990 FORMAT( I5, ' tests completed without checking.
' )
1067 9989 FORMAT( I5, ' tests completed and failed residual checks.
' )
1068 9988 FORMAT( I5, ' tests skipped because of illegal input values.
' )
1069 9987 FORMAT( 'END OF TESTS.
' )
1070 9986 FORMAT( ' TRANS=
''', A1, ''', M=
', I5, ', N=
', I5, ', NRHS=
', I4,
1071 $ ', NB=
', I4, ', type
', I2, ', test(
', I2, ')=
', G12.5 )
subroutine pcmatgen(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
logical function lsame(ca, cb)
LSAME
integer function iceil(inum, idenom)
integer function ilcm(m, n)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine pscnrm2(n, norm2, x, ix, jx, descx, incx)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
real function pclange(norm, m, n, a, ia, ja, desca, work)
subroutine blacs_gridexit(cntxt)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pcchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine pcfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
subroutine pcgels(trans, m, n, nrhs, a, ia, ja, desca, b, ib, jb, descb, work, lwork, info)
subroutine pclacpy(uplo, m, n, a, ia, ja, desca, b, ib, jb, descb)
subroutine pclsinfo(summry, nout, nmat, mval, ldmval, nval, ldnval, nnb, nbval, ldnbval, nnr, nrval, ldnrval, nnbr, nbrval, ldnbrval, ngrids, pval, ldpval, qval, ldqval, thresh, work, iam, nprocs)
subroutine pcqrt13(scale, m, n, a, ia, ja, desca, norma, iseed, work)
real function pcqrt14(trans, m, n, nrhs, a, ia, ja, desca, x, ix, jx, descx, work)
subroutine pcqrt16(trans, m, n, nrhs, a, ia, ja, desca, x, ix, jx, descx, b, ib, jb, descb, rwork, resid)
real function pcqrt17(trans, iresid, m, n, nrhs, a, ia, ja, desca, x, ix, jx, descx, b, ib, jb, descb, work, rwork)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)