68 INTEGER block_cyclic_2d, csrc_, ctxt_, dlen_, dtype_,
69 $ lld_, mb_, m_, nb_, n_, rsrc_
70 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
71 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
72 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
73 INTEGER , intgsz, memsiz, ntests, totmem, zplxsz
75 parameter( dblesz = 8, intgsz = 4, totmem = 2000000,
76 $ zplxsz = 16, memsiz = totmem / zplxsz,
78 $ padval = ( -9923.0d+0, -9923.0d+0 ) )
87 INTEGER i, iam, iaseed, ictxt, imidpad, info, ipa,
88 $ ipostpad, ippiv, iprepad, iptau, iprw, ipw, j,
89 $ k, kfail, kpass, kskip, ktests, l, lipiv,
90 $ lrwork, ltau, lwork, m, maxmn, mb, minmn, mnp,
91 $ mnq, mp, mycol, myrow, n, nb, nfact, ngrids,
92 $ nmat, nnb, nout, npcol, nprocs, nprow, nq,
93 $ workfct, workrfct, worksiz
95 DOUBLE PRECISION anorm, fresid, nops, tmflops
98 CHARACTER*2 factor( ntests )
99 INTEGER desca( dlen_ ), ierr( 1 ), mbval( ntests ),
100 $ mval( ntests ), nbval( ntests ),
101 $ nval( ntests ), pval( ntests ), qval( ntests )
102 DOUBLE PRECISION ctime( 1 ), wtime( 1 )
103 COMPLEX*16 mem( memsiz )
106 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
126 DATA ktests, kpass, kfail, kskip /4*0/
132 CALL blacs_pinfo( iam, nprocs )
134 CALL pzqrinfo( outfile, nout, nfact, factor, ntests, nmat, mval,
135 $ ntests, nval, ntests, nnb, mbval, ntests, nbval,
136 $ ntests, ngrids, pval, ntests, qval, ntests,
137 $ thresh, mem, iam, nprocs )
138 check = ( thresh.GE.0.0e+0 )
149 WRITE( nout, fmt = * )
150 IF(
lsamen( 2, fact,
'QR' ) )
THEN
153 WRITE( nout, fmt = 9986 )
154 $
'QR factorization tests.'
155 ELSE IF(
lsamen( 2, fact,
'QL' ) )
THEN
158 WRITE( nout, fmt = 9986 )
159 $
'QL factorization tests.'
160 ELSE IF(
lsamen( 2, fact,
'LQ' ) )
THEN
163 WRITE( nout, fmt = 9986 )
164 $
'LQ factorization tests.'
165 ELSE IF(
lsamen( 2, fact,
'RQ' ) )
THEN
168 WRITE( nout, fmt = 9986 )
169 $ 'rq factorization tests.
'
170 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
173 WRITE( NOUT, FMT = 9986 )
174 $ 'qr factorization with column pivoting tests.
'
175 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
178 WRITE( NOUT, FMT = 9986 )
179 $ 'complete unitary factorization tests.
'
181 WRITE( NOUT, FMT = * )
182 WRITE( NOUT, FMT = 9995 )
183 WRITE( NOUT, FMT = 9994 )
184 WRITE( NOUT, FMT = * )
197.LT.
IF( NPROW1 ) THEN
199 $ WRITE( NOUT, FMT = 9999 ) 'grid
', 'nprow
', NPROW
201.LT.
ELSE IF( NPCOL1 ) THEN
203 $ WRITE( NOUT, FMT = 9999 ) 'grid
', 'npcol
', NPCOL
205.GT.
ELSE IF( NPROW*NPCOLNPROCS ) THEN
207 $ WRITE( NOUT, FMT = 9998 ) NPROW*NPCOL, NPROCS
211.GT.
IF( IERR( 1 )0 ) THEN
213 $ WRITE( NOUT, FMT = 9997 ) 'grid
'
220 CALL BLACS_GET( -1, 0, ICTXT )
221 CALL BLACS_GRIDINIT( ICTXT, 'row-major
', NPROW, NPCOL )
222 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
226.GE..OR..GE.
IF( MYROWNPROW MYCOLNPCOL )
239 $ WRITE( NOUT, FMT = 9999 ) 'matrix
', 'm
', M
241.LT.
ELSE IF( N1 ) THEN
243 $ WRITE( NOUT, FMT = 9999 ) 'matrix
', 'n
', N
249 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1, 0 )
251.GT.
IF( IERR( 1 )0 ) THEN
253 $ WRITE( NOUT, FMT = 9997 ) 'matrix
'
271 $ WRITE( NOUT, FMT = 9999 ) 'mb
', 'mb
', MB
276 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
279.GT.
IF( IERR( 1 )0 ) THEN
281 $ WRITE( NOUT, FMT = 9997 ) 'mb
'
292 $ WRITE( NOUT, FMT = 9999 ) 'nb
', 'nb
', NB
297 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
300.GT.
IF( IERR( 1 )0 ) THEN
302 $ WRITE( NOUT, FMT = 9997 ) 'nb
'
309 MP = NUMROC( M, MB, MYROW, 0, NPROW )
310 NQ = NUMROC( N, NB, MYCOL, 0, NPCOL )
311 MNP = NUMROC( MIN( M, N ), MB, MYROW, 0, NPROW )
312 MNQ = NUMROC( MIN( M, N ), NB, MYCOL, 0, NPCOL )
314 IPREPAD = MAX( MB, MP )
316 IPOSTPAD = MAX( NB, NQ )
325 CALL DESCINIT( DESCA, M, N, MB, NB, 0, 0, ICTXT,
326 $ MAX( 1, MP ) + IMIDPAD, IERR( 1 ) )
330 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
333.LT.
IF( IERR( 1 )0 ) THEN
335 $ WRITE( NOUT, FMT = 9997 ) 'descriptor
'
344 IPTAU = IPA + DESCA( LLD_ ) * NQ + IPOSTPAD + IPREPAD
346 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
349 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
354 LWORK = DESCA( NB_ ) * ( MP + NQ + DESCA( NB_ ) )
355 WORKFCT = LWORK + IPOSTPAD
364 WORKSIZ = LWORK + MP*DESCA( NB_ ) + IPOSTPAD
368 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
371 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
376 LWORK = DESCA( NB_ ) * ( MP + NQ + DESCA( NB_ ) )
377 WORKFCT = LWORK + IPOSTPAD
386 WORKSIZ = LWORK + MP*DESCA( NB_ ) + IPOSTPAD
390 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
393 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
398 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
399 WORKFCT = LWORK + IPOSTPAD
409 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
414 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
417 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
422 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
423 WORKFCT = LWORK + IPOSTPAD
433 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
438 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
441 IPPIV = IPTAU + LTAU + IPOSTPAD + IPREPAD
442 LIPIV = ICEIL( INTGSZ*NQ, ZPLXSZ )
443 IPW = IPPIV + LIPIV + IPOSTPAD + IPREPAD
448 LWORK = MAX( 3, MP + MAX( 1, NQ ) )
449 WORKFCT = LWORK + IPOSTPAD
450 LRWORK = MAX( 1, 2 * NQ )
451 WORKRFCT = ICEIL( LRWORK*DBLESZ, ZPLXSZ ) +
453 IPRW = IPW + WORKFCT + IPREPAD
454 WORKSIZ = WORKFCT + IPREPAD + WORKRFCT
462 WORKSIZ = MAX( WORKSIZ - IPOSTPAD,
463 $ DESCA( NB_ )*( 2*MP + NQ + DESCA( NB_ ) ) ) +
467 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
470 IPW = IPTAU + LTAU + IPOSTPAD + IPREPAD
475 LWORK = DESCA( MB_ ) * ( MP + NQ + DESCA( MB_ ) )
476 WORKFCT = LWORK + IPOSTPAD
486 $ MAX( MP*DESCA( NB_ ), NQ*DESCA( MB_ )
496.GT.
IF( IPW+WORKSIZMEMSIZ ) THEN
498 $ WRITE( NOUT, FMT = 9996 )
499 $ FACT // ' factorization
',
500 $ ( IPW+WORKSIZ )*ZPLXSZ
506 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1,
509.GT.
IF( IERR( 1 )0 ) THEN
511 $ WRITE( NOUT, FMT = 9997 ) 'memory
'
518 CALL PZMATGEN( ICTXT, 'n
', 'n
', DESCA( M_ ),
519 $ DESCA( N_ ), DESCA( MB_ ),
520 $ DESCA( NB_ ), MEM( IPA ),
521 $ DESCA( LLD_ ), DESCA( RSRC_ ),
522 $ DESCA( CSRC_ ), IASEED, 0, MP, 0, NQ,
523 $ MYROW, MYCOL, NPROW, NPCOL )
528 CALL PZFILLPAD( ICTXT, MP, NQ, MEM( IPA-IPREPAD ),
529 $ DESCA( LLD_ ), IPREPAD, IPOSTPAD,
531 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
532 CALL PZFILLPAD( ICTXT, LIPIV, 1,
533 $ MEM( IPPIV-IPREPAD ), LIPIV,
534 $ IPREPAD, IPOSTPAD, PADVAL )
536 CALL PZFILLPAD( ICTXT, LTAU, 1,
537 $ MEM( IPTAU-IPREPAD ), LTAU,
538 $ IPREPAD, IPOSTPAD, PADVAL )
539 CALL PZFILLPAD( ICTXT, WORKSIZ-IPOSTPAD, 1,
540 $ MEM( IPW-IPREPAD ),
542 $ IPREPAD, IPOSTPAD, PADVAL )
543 ANORM = PZLANGE( 'i
', M, N, MEM( IPA ), 1, 1,
544 $ DESCA, MEM( IPW ) )
545 CALL PZCHEKPAD( ICTXT, 'pzlange', MP, NQ,
546 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
547 $ IPREPAD, IPOSTPAD, PADVAL )
548 CALL PZCHEKPAD( ICTXT, 'pzlange',
549 $ WORKSIZ-IPOSTPAD, 1,
550 $ MEM( IPW-IPREPAD ),
551 $ WORKSIZ-IPOSTPAD, IPREPAD,
553 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
554 CALL PZFILLPAD( ICTXT, WORKRFCT-IPOSTPAD, 1,
555 $ MEM( IPRW-IPREPAD ),
557 $ IPREPAD, IPOSTPAD, PADVAL )
559 CALL PZFILLPAD( ICTXT, WORKFCT-IPOSTPAD, 1,
560 $ MEM( IPW-IPREPAD ),
562 $ IPREPAD, IPOSTPAD, PADVAL )
566 CALL BLACS_BARRIER( ICTXT, 'all
' )
570 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
572 CALL PZGEQRF( M, N, MEM( IPA ), 1, 1, DESCA,
573 $ MEM( IPTAU ), MEM( IPW ), LWORK,
576 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
578 CALL PZGEQLF( M, N, MEM( IPA ), 1, 1, DESCA,
579 $ MEM( IPTAU ), MEM( IPW ), LWORK,
582 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
584 CALL PZGELQF( M, N, MEM( IPA ), 1, 1, DESCA,
585 $ MEM( IPTAU ), MEM( IPW ), LWORK,
588 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
590 CALL PZGERQF( M, N, MEM( IPA ), 1, 1, DESCA,
591 $ MEM( IPTAU ), MEM( IPW ), LWORK,
594 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
596 CALL PZGEQPF( M, N, MEM( IPA ), 1, 1, DESCA,
597 $ MEM( IPPIV ), MEM( IPTAU ),
598 $ MEM( IPW ), LWORK, MEM( IPRW ),
601 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
604 $ CALL PZTZRZF( M, N, MEM( IPA ), 1, 1, DESCA,
605 $ MEM( IPTAU ), MEM( IPW ), LWORK,
614 CALL PZCHEKPAD( ICTXT, ROUT, MP, NQ,
615 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
616 $ IPREPAD, IPOSTPAD, PADVAL )
617 CALL PZCHEKPAD( ICTXT, ROUT, LTAU, 1,
618 $ MEM( IPTAU-IPREPAD ), LTAU,
619 $ IPREPAD, IPOSTPAD, PADVAL )
620 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
621 CALL PZCHEKPAD( ICTXT, ROUT, LIPIV, 1,
622 $ MEM( IPPIV-IPREPAD ), LIPIV,
623 $ IPREPAD, IPOSTPAD, PADVAL )
624 CALL PZCHEKPAD( ICTXT, ROUT, WORKRFCT-IPOSTPAD,
625 $ 1, MEM( IPRW-IPREPAD ),
627 $ IPREPAD, IPOSTPAD, PADVAL )
629 CALL PZCHEKPAD( ICTXT, ROUT, WORKFCT-IPOSTPAD, 1,
630 $ MEM( IPW-IPREPAD ),
631 $ WORKFCT-IPOSTPAD, IPREPAD,
633 CALL PZFILLPAD( ICTXT, WORKSIZ-IPOSTPAD, 1,
634 $ MEM( IPW-IPREPAD ),
636 $ IPREPAD, IPOSTPAD, PADVAL )
638 IF( LSAMEN( 2, FACT, 'qr
' ) ) THEN
642 CALL PZGEQRRV( M, N, MEM( IPA ), 1, 1, DESCA,
643 $ MEM( IPTAU ), MEM( IPW ) )
644 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
645 $ 1, DESCA, IASEED, ANORM, FRESID,
647 ELSE IF( LSAMEN( 2, FACT, 'ql
' ) ) THEN
651 CALL PZGEQLRV( M, N, MEM( IPA ), 1, 1, DESCA,
652 $ MEM( IPTAU ), MEM( IPW ) )
653 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
654 $ 1, DESCA, IASEED, ANORM, FRESID,
656 ELSE IF( LSAMEN( 2, FACT, 'lq
' ) ) THEN
660 CALL PZGELQRV( M, N, MEM( IPA ), 1, 1, DESCA,
661 $ MEM( IPTAU ), MEM( IPW ) )
662 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
663 $ 1, DESCA, IASEED, ANORM, FRESID,
665 ELSE IF( LSAMEN( 2, FACT, 'rq
' ) ) THEN
669 CALL PZGERQRV( M, N, MEM( IPA ), 1, 1, DESCA,
670 $ MEM( IPTAU ), MEM( IPW ) )
671 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
672 $ 1, DESCA, IASEED, ANORM, FRESID,
674 ELSE IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
678 CALL PZGEQRRV( M, N, MEM( IPA ), 1, 1, DESCA,
679 $ MEM( IPTAU ), MEM( IPW ) )
680 ELSE IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
685 CALL PZTZRZRV( M, N, MEM( IPA ), 1, 1, DESCA,
686 $ MEM( IPTAU ), MEM( IPW ) )
688 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
689 $ 1, DESCA, IASEED, ANORM, FRESID,
695 CALL PZCHEKPAD( ICTXT, ROUTCHK, MP, NQ,
696 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
697 $ IPREPAD, IPOSTPAD, PADVAL )
698 CALL PZCHEKPAD( ICTXT, ROUTCHK, LTAU, 1,
699 $ MEM( IPTAU-IPREPAD ), LTAU,
700 $ IPREPAD, IPOSTPAD, PADVAL )
701 CALL PZCHEKPAD( ICTXT, ROUTCHK, WORKSIZ-IPOSTPAD,
702 $ 1, MEM( IPW-IPREPAD ),
703 $ WORKSIZ-IPOSTPAD, IPREPAD,
706 IF( LSAMEN( 2, FACT, 'qp
' ) ) THEN
708 CALL PZQPPIV( M, N, MEM( IPA ), 1, 1, DESCA,
713 CALL PZCHEKPAD( ICTXT, 'pzqppiv', MP, NQ,
714 $ MEM( IPA-IPREPAD ),
716 $ IPREPAD, IPOSTPAD, PADVAL )
717 CALL PZCHEKPAD( ICTXT, 'pzqppiv', LIPIV, 1,
718 $ MEM( IPPIV-IPREPAD ), LIPIV,
719 $ IPREPAD, IPOSTPAD, PADVAL )
721 CALL PZLAFCHK( 'no
', 'no
', M, N, MEM( IPA ), 1,
722 $ 1, DESCA, IASEED, ANORM, FRESID,
727 CALL PZCHEKPAD( ICTXT, 'pzlafchk', MP, NQ,
728 $ MEM( IPA-IPREPAD ),
730 $ IPREPAD, IPOSTPAD, PADVAL )
732 $ WORKSIZ-IPOSTPAD, 1,
733 $ MEM( IPW-IPREPAD ),
734 $ WORKSIZ-IPOSTPAD, IPREPAD,
740 IF( LSAMEN( 2, FACT, 'tz.AND..LT.
' ) NM ) THEN
744.LE..AND.
IF( FRESIDTHRESH
745.EQ.
$ (FRESID-FRESID)0.0D+0 ) THEN
759 FRESID = FRESID - FRESID
766 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'w
', 1, 1, WTIME )
767 CALL SLCOMBINE( ICTXT, 'all
', '>
', 'c
', 1, 1, CTIME )
771.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
776 IF( LSAMEN( 2, FACT, 'tz
' ) ) THEN
785 $ DBLE( N )*( DBLE( M )**2 ) -
787 $ 13.0D+0*DBLE( N )*DBLE( M ) -
796 NOPS = 8.0D+0 * ( DBLE( MINMN )**2 ) *
797 $ ( DBLE( MAXMN )-DBLE( MINMN ) / 3.0D+0 ) +
798 $ ( 6.0D+0 * DBLE( MAXMN ) +
799 $ 8.0D+0 * DBLE( MINMN ) ) *
805.GT.
IF( WTIME( 1 )0.0D+0 ) THEN
806 TMFLOPS = NOPS / ( WTIME( 1 ) * 1.0D+6 )
810.GE.
IF( WTIME( 1 )0.0D+0 )
811 $ WRITE( NOUT, FMT = 9993 ) 'wall
', M, N, MB, NB,
812 $ NPROW, NPCOL, WTIME( 1 ), TMFLOPS,
817.GT.
IF( CTIME( 1 )0.0D+0 ) THEN
818 TMFLOPS = NOPS / ( CTIME( 1 ) * 1.0D+6 )
822.GE.
IF( CTIME( 1 )0.0D+0 )
823 $ WRITE( NOUT, FMT = 9993 ) 'cpu
', M, N, MB, NB,
824 $ NPROW, NPCOL, CTIME( 1 ), TMFLOPS,
833 CALL BLACS_GRIDEXIT( ICTXT )
842 KTESTS = KPASS + KFAIL + KSKIP
843 WRITE( NOUT, FMT = * )
844 WRITE( NOUT, FMT = 9992 ) KTESTS
846 WRITE( NOUT, FMT = 9991 ) KPASS
847 WRITE( NOUT, FMT = 9989 ) KFAIL
849 WRITE( NOUT, FMT = 9990 ) KPASS
851 WRITE( NOUT, FMT = 9988 ) KSKIP
852 WRITE( NOUT, FMT = * )
853 WRITE( NOUT, FMT = * )
854 WRITE( NOUT, FMT = 9987 )
855.NE..AND..NE.
IF( NOUT6 NOUT0 )
861 9999 FORMAT( 'illegal
', A6, ':
', A5, ' =
', I3,
862 $ '; it should be at least 1
' )
863 9998 FORMAT( 'illegal grid: nprow*npcol =
', I4, '. it can be at most
',
865 9997 FORMAT( 'bad
', A6, ' parameters: going on to next test case.
' )
866 9996 FORMAT( 'unable to perform
', A, ': need totmem of at least
',
868 9995 FORMAT( 'time m n mb nb p q fact time
',
869 $ ' mflops check residual
' )
870 9994 FORMAT( '---- ------ ------ --- --- ----- ----- ---------
',
871 $ '----------- ------ --------
' )
872 9993 FORMAT( A4, 1X, I6, 1X, I6, 1X, I3, 1X, I3, 1X, I5, 1X, I5, 1X,
873 $ F9.2, 1X, F11.2, 1X, A6, 2X, G8.1 )
874 9992 FORMAT( 'finished
', I6, ' tests, with
the following results:
' )
875 9991 FORMAT( I5, ' tests completed and passed residual checks.
' )
876 9990 FORMAT( I5, ' tests completed without checking.
' )
877 9989 FORMAT( I5, ' tests completed and failed residual checks.
' )
878 9988 FORMAT( I5, ' tests skipped because of illegal input values.
' )
879 9987 FORMAT( 'END OF TESTS.
' )
888 SUBROUTINE PZQPPIV( M, N, A, IA, JA, DESCA, IPIV )
899 INTEGER DESCA( * ), IPIV( * )
999 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
1000 $ LLD_, MB_, M_, NB_, N_, RSRC_
1001 PARAMETER ( BLOCK_CYCLIC_2D = 1, DLEN_ = 9, DTYPE_ = 1,
1002 $ CTXT_ = 2, M_ = 3, N_ = 4, MB_ = 5, NB_ = 6,
1003 $ RSRC_ = 7, CSRC_ = 8, LLD_ = 9 )
1006 INTEGER IACOL, ICOFFA, ICTXT, IITMP, IPVT, IPCOL,
1007 $ IPROW, ITMP, J, JJ, JJA, KK, MYCOL, MYROW,
1011 EXTERNAL BLACS_GRIDINFO, IGEBR2D, IGEBS2D, IGERV2D,
1012 $ IGESD2D, IGAMN2D, INFOG1L, PZSWAP
1015 INTEGER INDXL2G, NUMROC
1016 EXTERNAL INDXL2G, NUMROC
1025 ICTXT = DESCA( CTXT_ )
1026 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
1027 CALL INFOG1L( JA, DESCA( NB_ ), NPCOL, MYCOL, DESCA( CSRC_ ), JJA,
1029 ICOFFA = MOD( JA-1, DESCA( NB_ ) )
1030 NQ = NUMROC( N+ICOFFA, DESCA( NB_ ), MYCOL, IACOL, NPCOL )
1031.EQ.
IF( MYCOLIACOL )
1034 DO 20 J = JA, JA+N-2
1041 CALL INFOG1L( J, DESCA( NB_ ), NPCOL, MYCOL, DESCA( CSRC_ ),
1043 DO 10 KK = JJ, JJA+NQ-1
1044.LT.
IF( IPIV( KK )IPVT )THEN
1052 CALL IGAMN2D( ICTXT, 'Rowwise
', ' ', 1, 1, IPVT, 1, IPROW,
1053 $ IPCOL, 1, -1, MYCOL )
1057.EQ.
IF( MYCOLIPCOL ) THEN
1058 ITMP = INDXL2G( IITMP, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),
1060 CALL IGEBS2D( ICTXT, 'Rowwise
', ' ', 1, 1, ITMP, 1 )
1061.NE.
IF( IPCOLIACOL ) THEN
1062 CALL IGERV2D( ICTXT, 1, 1, IPIV( IITMP ), 1, MYROW,
1065.EQ.
IF( MYCOLIACOL )
1066 $ IPIV( IITMP ) = IPIV( JJ )
1069 CALL IGEBR2D( ICTXT, 'Rowwise
', ' ', 1, 1, ITMP, 1, MYROW,
1071.EQ..AND..NE.
IF( MYCOLIACOL IPCOLIACOL )
1072 $ CALL IGESD2D( ICTXT, 1, 1, IPIV( JJ ), 1, MYROW, IPCOL )
1077 CALL PZSWAP( M, A, IA, ITMP, DESCA, 1, A, IA, J, DESCA, 1 )
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
logical function lsamen(n, ca, cb)
LSAMEN
integer function iceil(inum, idenom)
subroutine pzgeqpf(m, n, a, ia, ja, desca, ipiv, tau, work, lwork, info)
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
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 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 pzgelqf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pzgelqrv(m, n, a, ia, ja, desca, tau, work)
subroutine pzgeqlf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pzgeqlrv(m, n, a, ia, ja, desca, tau, work)
subroutine pzgeqrf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pzgeqrrv(m, n, a, ia, ja, desca, tau, work)
subroutine pzgerqf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pzgerqrv(m, n, a, ia, ja, desca, tau, work)
subroutine pzqppiv(m, n, a, ia, ja, desca, ipiv)
subroutine pzqrinfo(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 pztzrzf(m, n, a, ia, ja, desca, tau, work, lwork, info)
subroutine pztzrzrv(m, n, a, ia, ja, desca, tau, work)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)