66 INTEGER block_cyclic_2d, csrc_, , dlen_, dtype_,
67 $ lld_, mb_, m_, nb_, n_, rsrc_
68 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
69 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
70 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
71 INTEGER dblesz, intgsz, memsiz, ntests, totmem
72 DOUBLE PRECISION padval
73 parameter( dblesz = 8, intgsz = 4, totmem = 2000000,
74 $ memsiz = totmem / dblesz, ntests = 20,
75 $ padval = -9923.0d+0 )
84 INTEGER i, iam, iaseed, ictxt, imidpad, info, ipa,
85 $ ipostpad, ippiv, , iptau, ipw, j, k
87 $ lwork, m, maxmn, mb, minmn, mnp, mnq, mp,
88 $ mycol, myrow, n, nb, nfact, ngrids, nmat, nnb,
89 $ nout, npcol, nprocs, , nq, workfct,
92 DOUBLE PRECISION anorm, fresid, nops, tmflops
95 CHARACTER*2 factor( ntests )
96 INTEGER ( dlen_ ), ierr( 1 ), mbval( ntests ),
97 $ mval( ntests ), nbval( ntests ),
98 $ nval( ntests ), pval( ntests ), qval( ntests )
99 DOUBLE PRECISION ctime( 1 ), mem( ), wtime( 1 )
102 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
122 DATA ktests, kpass, kfail, kskip /4*0/
128 CALL blacs_pinfo( iam, nprocs )
130 CALL pdqrinfo( outfile, nout, nfact, factor, ntests, nmat, mval,
131 $ ntests, nval, ntests, nnb, mbval, ntests, nbval
132 $ ntests, ngrids, pval, ntests, qval, ntests,
133 $ thresh, mem, iam, nprocs )
134 check = ( thresh.GE.0.0e+0 )
145 WRITE( nout, fmt = * )
146 IF(
lsamen( 2, fact,
'QR' ) )
THEN
149 WRITE( nout, fmt = 9986 )
150 $
'QR factorization tests.'
151 ELSE IF(
lsamen( 2, fact,
'QL' ) )
THEN
154 WRITE( nout, fmt = 9986 )
155 $
'QL factorization tests.'
156 ELSE IF(
lsamen( 2, fact,
'LQ' ) )
THEN
159 WRITE( nout, fmt = 9986 )
160 $
'LQ factorization tests.'
161 ELSE IF(
lsamen( 2, fact,
'RQ' ) )
THEN
164 WRITE( nout, fmt = 9986 )
165 $
'RQ factorization tests.'
166 ELSE IF(
lsamen( 2, fact,
'QP' ) )
THEN
169 WRITE( nout, fmt = 9986 )
170 $
'QR factorization with column pivoting tests.'
171 ELSE IF(
lsamen( 2, fact,
'TZ' ) )
THEN
174 WRITE( nout, fmt = 9986 )
175 $
'Complete orthogonal factorization tests.'
177 WRITE( nout, fmt = * )
178 WRITE( nout, fmt = 9995 )
179 WRITE( nout, fmt = 9994 )
180 WRITE( nout, fmt = * )
193 IF( nprow.LT.1 )
THEN
195 $
WRITE( nout, fmt = 9999 )
'GRID',
'nprow', nprow
197 ELSE IF( npcol.LT.1 )
THEN
199 $
WRITE( nout, fmt = 9999 )
'GRID',
'npcol', npcol
201 ELSE IF( nprow*npcol.GT.nprocs )
THEN
203 $
WRITE( nout, fmt = 9998 ) nprow*npcol, nprocs
207 IF( ierr( 1 ).GT.0 )
THEN
209 $
WRITE( nout, fmt = 9997 )
'grid'
216 CALL blacs_get( -1, 0, ictxt )
222 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
235 $
WRITE( nout, fmt = 9999 )
'MATRIX', 'm
', M
237.LT.
ELSE IF( N1 ) THEN
239 $ WRITE( NOUT, FMT = 9999 ) 'matrix
', 'n
', N
245 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1, 0 )
247.GT.
IF( IERR( 1 )0 ) THEN
249 $ WRITE( NOUT, FMT = 9997 ) 'matrix
'
267 $ WRITE( NOUT, FMT = 9999 ) 'mb
', 'mb
', MB
272 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
275.GT.
IF( IERR( 1 )0 ) THEN
277 $ WRITE( NOUT, FMT = 9997 ) 'mb
'
288 $ WRITE( NOUT, FMT = 9999 ) 'nb
', 'nb
', NB
293 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
296.GT.
IF( IERR( 1 )0 ) THEN
298 $ WRITE( NOUT, FMT = 9997 ) 'nb
'
305 MP = NUMROC( M, MB, MYROW, 0, NPROW )
306 NQ = NUMROC( N, NB, MYCOL, 0, NPCOL )
307 MNP = NUMROC( MIN( M, N ), MB, MYROW, 0, NPROW )
308 MNQ = NUMROC( MIN( M, N ), NB, MYCOL, 0, NPCOL )
310 IPREPAD = MAX( MB, MP )
312 IPOSTPAD = MAX( NB, NQ )
321 CALL DESCINIT( DESCA, M, N, MB, NB, 0, 0, ICTXT,
322 $ MAX( 1, MP ) + IMIDPAD, IERR( 1 ) )
326 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
329.LT.
IF( IERR( 1 )0 ) THEN
331 $ WRITE( NOUT, FMT = 9997 ) 'descriptor
'
340 IPTAU = IPA + DESCA( LLD_ ) * NQ + IPOSTPAD + IPREPAD
342 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
345 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
350 LWORK = DESCA( NB_ ) * ( MP + NQ + DESCA( NB_ ) )
351 WORKFCT = LWORK + IPOSTPAD
360 WORKSIZ = LWORK + MP*DESCA( NB_ ) + IPOSTPAD
364 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
367 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
372 LWORK = DESCA( NB_ ) * ( MP + NQ + DESCA( NB_ ) )
373 WORKFCT = LWORK + IPOSTPAD
382 WORKSIZ = LWORK + MP*DESCA( NB_ ) + IPOSTPAD
386 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
389 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
394 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
395 WORKFCT = LWORK + IPOSTPAD
405 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
410 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
413 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
418 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
419 WORKFCT = LWORK + IPOSTPAD
429 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
434 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
437 IPPIV = IPTAU + LTAU + IPOSTPAD + IPREPAD
438 LIPIV = ICEIL( INTGSZ*NQ, DBLESZ )
439 IPW = IPPIV + LIPIV + IPOSTPAD + IPREPAD
444 LWORK = MAX( 3, MP + MAX( 1, NQ ) ) + 2 * NQ
445 WORKFCT = LWORK + IPOSTPAD
454 WORKSIZ = MAX( WORKSIZ - IPOSTPAD,
455 $ DESCA( NB_ )*( 2*MP + NQ + DESCA( NB_ ) ) ) +
459 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
462 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
467 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
468 WORKFCT = LWORK + IPOSTPAD
478 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
488.GT.
IF( IPW+WORKSIZMEMSIZ ) THEN
490 $ WRITE( NOUT, FMT = 9996 )
491 $ FACT // ' factorization
',
492 $ ( IPW+WORKSIZ )*DBLESZ
498 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
501.GT.
IF( IERR( 1 )0 ) THEN
503 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
510 CALL PDMATGEN( ICTXT, 'n
', 'n
', DESCA( M_ ),
511 $ DESCA( N_ ), DESCA( MB_ ),
512 $ DESCA( NB_ ), MEM( IPA ),
513 $ DESCA( LLD_ ), DESCA( RSRC_ ),
514 $ DESCA( CSRC_ ), IASEED, 0, MP, 0, NQ,
515 $ MYROW, MYCOL, NPROW, NPCOL )
520 CALL PDFILLPAD( ICTXT, MP, NQ, MEM( IPA-IPREPAD ),
521 $ DESCA( LLD_ ), IPREPAD, IPOSTPAD,
523 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
524 CALL PDFILLPAD( ICTXT, LIPIV, 1,
525 $ MEM( IPPIV-IPREPAD ), LIPIV,
526 $ IPREPAD, IPOSTPAD, PADVAL )
528 CALL PDFILLPAD( ICTXT, LTAU, 1,
529 $ MEM( IPTAU-IPREPAD ), LTAU,
530 $ IPREPAD, IPOSTPAD, PADVAL )
531 CALL PDFILLPAD( ICTXT, WORKSIZ-IPOSTPAD, 1,
532 $ MEM( IPW-IPREPAD ),
534 $ IPREPAD, IPOSTPAD, PADVAL )
535 ANORM = PDLANGE( 'i
', M, N, MEM( IPA ), 1, 1,
536 $ DESCA, MEM( IPW ) )
537 CALL PDCHEKPAD( ICTXT, 'pdlange', MP, NQ,
538 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
539 $ IPREPAD, IPOSTPAD, PADVAL )
540 CALL PDCHEKPAD( ICTXT, 'pdlange',
541 $ WORKSIZ-IPOSTPAD, 1,
542 $ MEM( IPW-IPREPAD ),
543 $ WORKSIZ-IPOSTPAD, IPREPAD,
545 CALL PDFILLPAD( ICTXT, WORKFCT-IPOSTPAD, 1,
546 $ MEM( IPW-IPREPAD ),
548 $ IPREPAD, IPOSTPAD, PADVAL )
552 CALL BLACS_BARRIER( ICTXT, 'all
' )
556 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
558 CALL PDGEQRF( M, N, MEM( IPA ), 1, 1, DESCA,
559 $ MEM( IPTAU ), MEM( IPW ), LWORK,
562 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
564 CALL PDGEQLF( M, N, MEM( IPA ), 1, 1, DESCA,
565 $ MEM( IPTAU ), MEM( IPW ), LWORK,
568 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
570 CALL PDGELQF( M, N, MEM( IPA ), 1, 1, DESCA,
571 $ MEM( IPTAU ), MEM( IPW ), LWORK,
574 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
576 CALL PDGERQF( M, N, MEM( IPA ), 1, 1, DESCA,
577 $ MEM( IPTAU ), MEM( IPW ), LWORK,
580 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
582 CALL PDGEQPF( M, N, MEM( IPA ), 1, 1, DESCA,
583 $ MEM( IPPIV ), MEM( IPTAU ),
584 $ MEM( IPW ), LWORK, INFO )
586 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
589 $ CALL PDTZRZF( M, N, MEM( IPA ), 1, 1, DESCA,
590 $ MEM( IPTAU ), MEM( IPW ), LWORK,
599 CALL PDCHEKPAD( ICTXT, ROUT, MP, NQ,
600 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
601 $ IPREPAD, IPOSTPAD, PADVAL )
602 CALL PDCHEKPAD( ICTXT, ROUT, LTAU, 1,
603 $ MEM( IPTAU-IPREPAD ), LTAU,
604 $ IPREPAD, IPOSTPAD, PADVAL )
605 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
606 CALL PDCHEKPAD( ICTXT, ROUT, LIPIV, 1,
607 $ MEM( IPPIV-IPREPAD ), LIPIV,
608 $ IPREPAD, IPOSTPAD, PADVAL )
610 CALL PDCHEKPAD( ICTXT, ROUT, WORKFCT-IPOSTPAD, 1,
611 $ MEM( IPW-IPREPAD ),
612 $ WORKFCT-IPOSTPAD, IPREPAD,
614 CALL PDFILLPAD( ICTXT, WORKSIZ-IPOSTPAD, 1,
615 $ MEM( IPW-IPREPAD ),
617 $ IPREPAD, IPOSTPAD, PADVAL )
619 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
623 CALL PDGEQRRV( M, N, MEM( IPA ), 1, 1, DESCA,
624 $ MEM( IPTAU ), MEM( IPW ) )
625 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
626 $ 1, DESCA, IASEED, ANORM, FRESID,
628 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
632 CALL PDGEQLRV( M, N, MEM( IPA ), 1, 1, DESCA,
633 $ MEM( IPTAU ), MEM( IPW ) )
634 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
635 $ 1, DESCA, IASEED, ANORM, FRESID,
637 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
641 CALL PDGELQRV( M, N, MEM( IPA ), 1, 1, DESCA,
642 $ MEM( IPTAU ), MEM( IPW ) )
643 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
644 $ 1, DESCA, IASEED, ANORM, FRESID,
646 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
650 CALL PDGERQRV( M, N, MEM( IPA ), 1, 1, DESCA,
651 $ MEM( IPTAU ), MEM( IPW ) )
652 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
653 $ 1, DESCA, IASEED, ANORM, FRESID,
655 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
659 CALL PDGEQRRV( M, N, MEM( IPA ), 1, 1, DESCA,
660 $ MEM( IPTAU ), MEM( IPW ) )
661 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
666 CALL PDTZRZRV( M, N, MEM( IPA ), 1, 1, DESCA,
667 $ MEM( IPTAU ), MEM( IPW ) )
669 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
670 $ 1, DESCA, IASEED, ANORM, FRESID,
676 CALL PDCHEKPAD( ICTXT, ROUTCHK, MP, NQ,
677 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
678 $ IPREPAD, IPOSTPAD, PADVAL )
679 CALL PDCHEKPAD( ICTXT, ROUTCHK, LTAU, 1,
680 $ MEM( IPTAU-IPREPAD ), LTAU,
681 $ IPREPAD, IPOSTPAD, PADVAL )
682 CALL PDCHEKPAD( ICTXT, ROUTCHK, WORKSIZ-IPOSTPAD,
683 $ 1, MEM( IPW-IPREPAD ),
684 $ WORKSIZ-IPOSTPAD, IPREPAD,
687 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
689 CALL PDQPPIV( M, N, MEM( IPA ), 1, 1, DESCA,
694 CALL PDCHEKPAD( ICTXT, 'pdqppiv', MP, NQ,
695 $ MEM( IPA-IPREPAD ),
697 $ IPREPAD, IPOSTPAD, PADVAL )
698 CALL PDCHEKPAD( ICTXT, 'pdqppiv', LIPIV, 1,
699 $ MEM( IPPIV-IPREPAD ), LIPIV,
700 $ IPREPAD, IPOSTPAD, PADVAL )
702 CALL PDLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
703 $ 1, DESCA, IASEED, ANORM, FRESID,
708 CALL PDCHEKPAD( ICTXT, 'pdlafchk', MP, NQ,
709 $ MEM( IPA-IPREPAD ),
711 $ IPREPAD, IPOSTPAD, PADVAL )
713 $ WORKSIZ-IPOSTPAD, 1,
714 $ MEM( IPW-IPREPAD ),
715 $ WORKSIZ-IPOSTPAD, IPREPAD,
721 IF( LSAMEN( 2, FACT, 'tz.AND..LT.
' ) NM ) THEN
725.LE..AND.
IF( FRESIDTHRESH
726.EQ.
$ (FRESID-FRESID)0.0D+0 ) THEN
740 FRESID = FRESID - FRESID
747 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 1, 1, WTIME )
748 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1, CTIME )
752.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
757 IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
766 $ DBLE( N )*( DBLE( M )**2 ) -
768 $ DBLE( N )*DBLE( M ) ) +
769 $ DBLE( M )**2 ) / 2.0D+0
777 NOPS = 2.0D+0 * ( DBLE( MINMN )**2 ) *
778 $ ( DBLE( MAXMN )-DBLE( MINMN ) / 3.0D+0 ) +
779 $ ( DBLE( MAXMN )+DBLE( MINMN ) )*DBLE( MINMN )
784.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
785 TMFLOPS = NOPS / ( WTIME( 1 ) * 1.0D+6 )
789.GE.
IF( WTIME( 1 )0.0D+0 )
790 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N, MB, NB,
791 $ NPROW, NPCOL, WTIME( 1 ), TMFLOPS,
796.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
797 TMFLOPS = NOPS / ( CTIME( 1 ) * 1.0D+6 )
801.GE.
IF( CTIME( 1 )0.0D+0 )
802 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N, MB, NB,
803 $ NPROW, NPCOL, CTIME( 1 ), TMFLOPS,
812 CALL BLACS_GRIDEXIT( ICTXT )
821 KTESTS = KPASS + KFAIL + KSKIP
822 WRITE( NOUT, FMT = * )
823 WRITE( NOUT, FMT = 9992 ) KTESTS
825 WRITE( NOUT, FMT = 9991 ) KPASS
826 WRITE( NOUT, FMT = 9989 ) KFAIL
828 WRITE( NOUT, FMT = 9990 ) KPASS
830 WRITE( NOUT, FMT = 9988 ) KSKIP
831 WRITE( NOUT, FMT = * )
832 WRITE( NOUT, FMT = * )
833 WRITE( NOUT, FMT = 9987 )
834.NE..AND..NE.
IF( NOUT6 NOUT0 )
840 9999 FORMAT( 'illegal
', A6, ':
', A5, ' =
', I3,
841 $ '; it should be at least 1
' )
842 9998 FORMAT( 'illegal grid: nprow*npcol =
', I4, '. it can be at most
',
844 9997 FORMAT( 'bad
', A6, ' parameters: going on to next test case.
' )
845 9996 FORMAT( 'unable to perform
', A, ': need totmem of at least
',
847 9995 FORMAT( 'time m n mb nb p q fact time
',
848 $ ' mflops check residual
' )
849 9994 FORMAT( '---- ------ ------ --- --- ----- ----- ---------
',
850 $ '----------- ------ --------
' )
851 9993 FORMAT( A4, 1X, I6, 1X, I6, 1X, I3, 1X, I3, 1X, I5, 1X, I5, 1X,
852 $ F9.2, 1X, F11.2, 1X, A6, 2X, G8.1 )
853 9992 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
854 9991 FORMAT( I5, ' tests completed and passed residual checks.
' )
855 9990 FORMAT( I5, ' tests completed without checking.
' )
856 9989 FORMAT( I5, ' tests completed and failed residual checks.
' )
857 9988 FORMAT( I5, ' tests skipped because of illegal input values.
' )
858 9987 FORMAT( 'END OF TESTS.
' )
867 SUBROUTINE PDQPPIV( M, N, A, IA, JA, DESCA, IPIV )
878 INTEGER DESCA( * ), IPIV( * )
879 DOUBLE PRECISION A( * )
978 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
979 $ LLD_, MB_, M_, NB_, N_, RSRC_
980 PARAMETER ( BLOCK_CYCLIC_2D = 1, DLEN_ = 9, DTYPE_ = 1,
981 $ CTXT_ = 2, M_ = 3, N_ = 4, MB_ = 5, NB_ = 6,
982 $ RSRC_ = 7, CSRC_ = 8, LLD_ = 9 )
985 INTEGER IACOL, ICOFFA, ICTXT, IITMP, IPVT, IPCOL,
986 $ IPROW, ITMP, J, JJ, JJA, KK, MYCOL, MYROW,
990 EXTERNAL BLACS_GRIDINFO, IGEBR2D, IGEBS2D, IGERV2D,
991 $ IGESD2D, IGAMN2D, INFOG1L, PDSWAP
994 INTEGER INDXL2G, NUMROC
995 EXTERNAL INDXL2G, NUMROC
1004 ICTXT = DESCA( CTXT_ )
1005 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
1006 CALL INFOG1L( JA, DESCA( NB_ ), NPCOL, MYCOL, DESCA( CSRC_ ), JJA,
1008 ICOFFA = MOD( JA-1, DESCA( NB_ ) )
1009 NQ = NUMROC( N+ICOFFA, DESCA( NB_ ), MYCOL, IACOL, NPCOL )
1010.EQ.
IF( MYCOLIACOL )
1013 DO 20 J = JA, JA+N-2
1020 CALL INFOG1L( J, DESCA( NB_ ), NPCOL, MYCOL, DESCA( CSRC_ ),
1022 DO 10 KK = JJ, JJA+NQ-1
1023.LT.
IF( IPIV( KK )IPVT )THEN
1031 CALL IGAMN2D( ICTXT, 'Rowwise
', ' ', 1, 1, IPVT, 1, IPROW,
1032 $ IPCOL, 1, -1, MYCOL )
1036.EQ.
IF( MYCOLIPCOL ) THEN
1037 ITMP = INDXL2G( IITMP, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),
1039 CALL IGEBS2D( ICTXT, 'Rowwise
', ' ', 1, 1, ITMP, 1 )
1040.NE.
IF( IPCOLIACOL ) THEN
1041 CALL IGERV2D( ICTXT, 1, 1, IPIV( IITMP ), 1, MYROW,
1044.EQ.
IF( MYCOLIACOL )
1045 $ IPIV( IITMP ) = IPIV( JJ )
1048 CALL IGEBR2D( ICTXT, 'Rowwise
', ' ', 1, 1, ITMP, 1, MYROW,
1050 IF( mycol.EQ.iacol .AND. ipcol.NE.iacol )
1051 $
CALL igesd2d( ictxt, 1, 1, ipiv( jj ), 1, myrow, ipcol )
1056 CALL pdswap( m, a, ia, itmp, desca, 1, a, ia, j, desca, 1 )
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
logical function lsamen(n, ca, cb)
LSAMEN
integer function iceil(inum, idenom)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
subroutine pdgeqpf(m, n, a, ia, ja, desca, ipiv, tau, work, lwork, 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 pdgelqf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pdgelqrv(m, n, a, ia, ja, desca, tau, work)
subroutine pdgeqlf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pdgeqlrv(m, n, a, ia, ja, desca, tau, work)
subroutine pdgeqrf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pdgeqrrv(m, n, a, ia, ja, desca, tau, work)
subroutine pdgerqf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pdgerqrv(m, n, a, ia, ja, desca, tau, work)
subroutine pdqppiv(m, n, a, ia, ja, desca, ipiv)
subroutine pdqrinfo(summry, nout, nfact, factor, ldfact, nmat, mval, ldmval, nval, ldnval, nnb, mbval, ldmbval, nbval, ldnbval, ngrids, pval, ldpval, qval, ldqval, thresh, work, iam, nprocs)
subroutine pdtzrzf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pdtzrzrv(m, n, a, ia, ja, desca, tau, work)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)