8634
 8635
 8636
 8637
 8638
 8639
 8640
 8641      INTEGER            IA, ICPRNT, IRPRNT, JA, M, N, NOUT
 8642
 8643
 8644      CHARACTER*(*)      CMATNM
 8645      INTEGER            DESCA( * )
 8646      DOUBLE PRECISION   A( * ), WORK( * )
 8647
 8648
 8649
 8650
 8651
 8652
 8653
 8654
 8655
 8656
 8657
 8658
 8659
 8660
 8661
 8662
 8663
 8664
 8665
 8666
 8667
 8668
 8669
 8670
 8671
 8672
 8673
 8674
 8675
 8676
 8677
 8678
 8679
 8680
 8681
 8682
 8683
 8684
 8685
 8686
 8687
 8688
 8689
 8690
 8691
 8692
 8693
 8694
 8695
 8696
 8697
 8698
 8699
 8700
 8701
 8702
 8703
 8704
 8705
 8706
 8707
 8708
 8709
 8710
 8711
 8712
 8713
 8714
 8715
 8716
 8717
 8718
 8719
 8720
 8721
 8722
 8723
 8724
 8725
 8726
 8727
 8728
 8729
 8730
 8731
 8732
 8733
 8734
 8735
 8736
 8737
 8738
 8739
 8740
 8741
 8742
 8743
 8744
 8745
 8746
 8747
 8748
 8749
 8750
 8751
 8752
 8753
 8754
 8755
 8756
 8757
 8758
 8759
 8760
 8761
 8762
 8763
 8764
 8765
 8766
 8767
 8768
 8769
 8770
 8771
 8772      INTEGER            BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
 8773     $                   DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
 8774     $                   RSRC_
 8775      parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
 8776     $                   dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
 8777     $                   imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
 8778     $                   rsrc_ = 9, csrc_ = 10, lld_ = 11 )
 8779
 8780
 8781      INTEGER            MYCOL, MYROW, NPCOL, NPROW, PCOL, PROW
 8782
 8783
 8784      INTEGER            DESCA2( DLEN_ )
 8785
 8786
 8788
 8789
 8790
 8791
 8792
 8793      IF( ( m.LE.0 ).OR.( n.LE.0 ) )
 8794     $   RETURN
 8795
 8796
 8797
 8799
 8800      CALL blacs_gridinfo( desca2( ctxt_ ), nprow, npcol, myrow, mycol )
 8801
 8802      IF( desca2( rsrc_ ).GE.0 ) THEN
 8803         IF( desca2( csrc_ ).GE.0 ) THEN
 8804            CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt, icprnt,
 
 8805     $                        cmatnm, nout, desca2( rsrc_ ),
 8806     $                        desca2( csrc_ ), work )
 8807         ELSE
 8808            DO 10 pcol = 0, npcol - 1
 8809               IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
 8810     $            WRITE( nout, * ) 'Colum-replicated array -- ' ,
 8811     $                             'copy in process column: ', pcol
 8812               CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt,
 
 8813     $                           icprnt, cmatnm, nout, desca2( rsrc_ ),
 8814     $                           pcol, work )
 8815   10       CONTINUE
 8816         END IF
 8817      ELSE
 8818         IF( desca2( csrc_ ).GE.0 ) THEN
 8819            DO 20 prow = 0, nprow - 1
 8820               IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
 8821     $            WRITE( nout, * ) 'Row-replicated array -- ' ,
 8822     $                             'copy in process row: ', prow
 8823               CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt,
 
 8824     $                           icprnt, cmatnm, nout, prow,
 8825     $                           desca2( csrc_ ), work )
 8826   20       CONTINUE
 8827         ELSE
 8828            DO 40 prow = 0, nprow - 1
 8829               DO 30 pcol = 0, npcol - 1
 8830                  IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
 8831     $               WRITE( nout, * ) 'Replicated array -- ' ,
 8832     $                      'copy in process (', prow, ',', pcol, ')'
 8833                  CALL pb_pdlaprn2( m, n, a, ia, ja, desca2, irprnt,
 
 8834     $                              icprnt, cmatnm, nout, prow, pcol,
 8835     $                              work )
 8836   30          CONTINUE
 8837   40       CONTINUE
 8838         END IF
 8839      END IF
 8840
 8841      RETURN
 8842
 8843
 8844
subroutine pb_desctrans(descin, descout)
 
subroutine pb_pdlaprn2(m, n, a, ia, ja, desca, irprnt, icprnt, cmatnm, nout, prow, pcol, work)