8896
 8897
 8898
 8899
 8900
 8901
 8902
 8903      LOGICAL            INPLACE
 8904      INTEGER            IA, JA, N
 8905      COMPLEX*16         ALPHA
 8906
 8907
 8908      INTEGER            DESCA( * )
 8909      COMPLEX*16         A( * )
 8910
 8911
 8912
 8913
 8914
 8915
 8916
 8917
 8918
 8919
 8920
 8921
 8922
 8923
 8924
 8925
 8926
 8927
 8928
 8929
 8930
 8931
 8932
 8933
 8934
 8935
 8936
 8937
 8938
 8939
 8940
 8941
 8942
 8943
 8944
 8945
 8946
 8947
 8948
 8949
 8950
 8951
 8952
 8953
 8954
 8955
 8956
 8957
 8958
 8959
 8960
 8961
 8962
 8963
 8964
 8965
 8966
 8967
 8968
 8969
 8970
 8971
 8972
 8973
 8974
 8975
 8976
 8977
 8978
 8979
 8980
 8981
 8982
 8983
 8984
 8985
 8986
 8987
 8988
 8989
 8990
 8991
 8992
 8993
 8994
 8995
 8996
 8997
 8998
 8999
 9000
 9001
 9002
 9003
 9004
 9005
 9006
 9007
 9008
 9009
 9010
 9011
 9012
 9013
 9014
 9015
 9016
 9017
 9018
 9019
 9020
 9021
 9022
 9023      INTEGER            BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
 9024     $                   DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
 9025     $                   RSRC_
 9026      parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
 9027     $                   dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
 9028     $                   imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
 9029     $                   rsrc_ = 9, csrc_ = 10, lld_ = 11 )
 9030
 9031
 9032      LOGICAL            GODOWN, GOLEFT
 9033      INTEGER            I, IACOL, IAROW, ICTXT, IIA, IJOFFA, ILOW,
 9034     $                   IMB1, IMBLOC, INB1, INBLOC, IOFFA, IOFFD, IUPP,
 9035     $                   JJA, JOFFA, JOFFD, LCMT, LCMT00, LDA, LDAP1,
 9036     $                   LMBLOC, LNBLOC, LOW, MB, MBLKD, MBLKS, MBLOC,
 9037     $                   MRCOL, MRROW, MYCOL, MYROW, NB, NBLKD, NBLKS,
 9038     $                   NBLOC, NP, NPCOL, NPROW, NQ, PMB, QNB, UPP
 9039      COMPLEX*16         ATMP
 9040
 9041
 9042      INTEGER            DESCA2( DLEN_ )
 9043
 9044
 9047
 9048
 9049      INTRINSIC          abs, dble, dcmplx, dimag, 
max, 
min 
 9050
 9051
 9052
 9053
 9054
 9056
 9057
 9058
 9059      ictxt = desca2( ctxt_ )
 9060      CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
 9061
 9062      IF( n.EQ.0 )
 9063     $   RETURN
 9064
 9065      CALL pb_ainfog2l( n, n, ia, ja, desca2, nprow, npcol, myrow,
 
 9066     $                  mycol, imb1, inb1, np, nq, iia, jja, iarow,
 9067     $                  iacol, mrrow, mrcol )
 9068
 9069
 9070
 9071      IF( inplace ) THEN
 9072         iia = 1
 9073         jja = 1
 9074      END IF
 9075
 9076
 9077
 9078
 9079      mb = desca2( mb_ )
 9080      nb = desca2( nb_ )
 9081
 9082      CALL pb_binfo( 0, np, nq, imb1, inb1, mb, nb, mrrow, mrcol,
 
 9083     $               lcmt00, mblks, nblks, imbloc, inbloc, lmbloc,
 9084     $               lnbloc, ilow, low, iupp, upp )
 9085
 9086      ioffa  = iia - 1
 9087      joffa  = jja - 1
 9088      lda    = desca2( lld_ )
 9089      ldap1  = lda + 1
 9090
 9091      IF( desca2( rsrc_ ).LT.0 ) THEN
 9092         pmb = mb
 9093      ELSE
 9094         pmb = nprow * mb
 9095      END IF
 9096      IF( desca2( csrc_ ).LT.0 ) THEN
 9097         qnb = nb
 9098      ELSE
 9099         qnb = npcol * nb
 9100      END IF
 9101
 9102
 9103
 9104
 9105      godown = ( lcmt00.GT.iupp )
 9106      goleft = ( lcmt00.LT.ilow )
 9107
 9108      IF( .NOT.godown .AND. .NOT.goleft ) THEN
 9109
 9110
 9111
 9112         IF( lcmt00.GE.0 ) THEN
 9113            ijoffa = ioffa+lcmt00 + ( joffa - 1 ) * lda
 9114            DO 10 i = 1, 
min( inbloc, 
max( 0, imbloc - lcmt00 ) )
 
 9115               atmp = a( ijoffa + i*ldap1 )
 9116               a( ijoffa + i*ldap1 ) = alpha +
 9117     $                                 dcmplx( abs( dble(  atmp ) ),
 9118     $                                         abs( dimag( atmp ) ) )
 9119   10       CONTINUE
 9120         ELSE
 9121            ijoffa = ioffa + ( joffa - lcmt00 - 1 ) * lda
 9122            DO 20 i = 1, 
min( imbloc, 
max( 0, inbloc + lcmt00 ) )
 
 9123               atmp = a( ijoffa + i*ldap1 )
 9124               a( ijoffa + i*ldap1 ) = alpha +
 9125     $                                 dcmplx( abs( dble(  atmp ) ),
 9126     $                                         abs( dimag( atmp ) ) )
 9127   20       CONTINUE
 9128         END IF
 9129         goleft = ( ( lcmt00 - ( iupp - upp + pmb ) ).LT.ilow )
 9130         godown = .NOT.goleft
 9131
 9132      END IF
 9133
 9134      IF( godown ) THEN
 9135
 9136         lcmt00 = lcmt00 - ( iupp - upp + pmb )
 9137         mblks  = mblks - 1
 9138         ioffa  = ioffa + imbloc
 9139
 9140   30    CONTINUE
 9141         IF( mblks.GT.0 .AND. lcmt00.GT.upp ) THEN
 9142            lcmt00 = lcmt00 - pmb
 9143            mblks  = mblks - 1
 9144            ioffa  = ioffa + mb
 9145            GO TO 30
 9146         END IF
 9147
 9148         lcmt  = lcmt00
 9149         mblkd = mblks
 9150         ioffd = ioffa
 9151
 9152         mbloc = mb
 9153   40    CONTINUE
 9154         IF( mblkd.GT.0 .AND. lcmt.GE.ilow ) THEN
 9155            IF( mblkd.EQ.1 )
 9156     $         mbloc = lmbloc
 9157            IF( lcmt.GE.0 ) THEN
 9158               ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
 9159               DO 50 i = 1, 
min( inbloc, 
max( 0, mbloc - lcmt ) )
 
 9160                  atmp = a( ijoffa + i*ldap1 )
 9161                  a( ijoffa + i*ldap1 ) = alpha +
 9162     $                                    dcmplx( abs( dble(  atmp ) ),
 9163     $                                            abs( dimag( atmp ) ) )
 9164   50          CONTINUE
 9165            ELSE
 9166               ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
 9167               DO 60 i = 1, 
min( mbloc, 
max( 0, inbloc + lcmt ) )
 
 9168                  atmp = a( ijoffa + i*ldap1 )
 9169                  a( ijoffa + i*ldap1 ) = alpha +
 9170     $                                    dcmplx( abs( dble(  atmp ) ),
 9171     $                                            abs( dimag( atmp ) ) )
 9172   60          CONTINUE
 9173            END IF
 9174            lcmt00 = lcmt
 9175            lcmt   = lcmt - pmb
 9176            mblks  = mblkd
 9177            mblkd  = mblkd - 1
 9178            ioffa  = ioffd
 9179            ioffd  = ioffd + mbloc
 9180            GO TO 40
 9181         END IF
 9182
 9183         lcmt00 = lcmt00 + low - ilow + qnb
 9184         nblks  = nblks - 1
 9185         joffa  = joffa + inbloc
 9186
 9187      ELSE IF( goleft ) THEN
 9188
 9189         lcmt00 = lcmt00 + low - ilow + qnb
 9190         nblks  = nblks - 1
 9191         joffa  = joffa + inbloc
 9192
 9193   70    CONTINUE
 9194         IF( nblks.GT.0 .AND. lcmt00.LT.low ) THEN
 9195            lcmt00 = lcmt00 + qnb
 9196            nblks  = nblks - 1
 9197            joffa  = joffa + nb
 9198            GO TO 70
 9199         END IF
 9200
 9201         lcmt  = lcmt00
 9202         nblkd = nblks
 9203         joffd = joffa
 9204
 9205         nbloc = nb
 9206   80    CONTINUE
 9207         IF( nblkd.GT.0 .AND. lcmt.LE.iupp ) THEN
 9208            IF( nblkd.EQ.1 )
 9209     $         nbloc = lnbloc
 9210            IF( lcmt.GE.0 ) THEN
 9211               ijoffa = ioffa + lcmt + ( joffd - 1 ) * lda
 9212               DO 90 i = 1, 
min( nbloc, 
max( 0, imbloc - lcmt ) )
 
 9213                  atmp = a( ijoffa + i*ldap1 )
 9214                  a( ijoffa + i*ldap1 ) = alpha +
 9215     $                                    dcmplx( abs( dble(  atmp ) ),
 9216     $                                            abs( dimag( atmp ) ) )
 9217   90          CONTINUE
 9218            ELSE
 9219               ijoffa = ioffa + ( joffd - lcmt - 1 ) * lda
 9220               DO 100 i = 1, 
min( imbloc, 
max( 0, nbloc + lcmt ) )
 
 9221                  atmp = a( ijoffa + i*ldap1 )
 9222                  a( ijoffa + i*ldap1 ) = alpha +
 9223     $                                    dcmplx( abs( dble(  atmp ) ),
 9224     $                                            abs( dimag( atmp ) ) )
 9225  100          CONTINUE
 9226            END IF
 9227            lcmt00 = lcmt
 9228            lcmt   = lcmt + qnb
 9229            nblks  = nblkd
 9230            nblkd  = nblkd - 1
 9231            joffa  = joffd
 9232            joffd  = joffd + nbloc
 9233            GO TO 80
 9234         END IF
 9235
 9236         lcmt00 = lcmt00 - ( iupp - upp + pmb )
 9237         mblks  = mblks - 1
 9238         ioffa  = ioffa + imbloc
 9239
 9240      END IF
 9241
 9242      nbloc = nb
 9243  110 CONTINUE
 9244      IF( nblks.GT.0 ) THEN
 9245         IF( nblks.EQ.1 )
 9246     $      nbloc = lnbloc
 9247  120    CONTINUE
 9248         IF( mblks.GT.0 .AND. lcmt00.GT.upp ) THEN
 9249            lcmt00 = lcmt00 - pmb
 9250            mblks  = mblks - 1
 9251            ioffa  = ioffa + mb
 9252            GO TO 120
 9253         END IF
 9254
 9255         lcmt  = lcmt00
 9256         mblkd = mblks
 9257         ioffd = ioffa
 9258
 9259         mbloc = mb
 9260  130    CONTINUE
 9261         IF( mblkd.GT.0 .AND. lcmt.GE.low ) THEN
 9262            IF( mblkd.EQ.1 )
 9263     $         mbloc = lmbloc
 9264            IF( lcmt.GE.0 ) THEN
 9265               ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
 9266               DO 140 i = 1, 
min( nbloc, 
max( 0, mbloc - lcmt ) )
 
 9267                  atmp = a( ijoffa + i*ldap1 )
 9268                  a( ijoffa + i*ldap1 ) = alpha +
 9269     $                                    dcmplx( abs( dble(  atmp ) ),
 9270     $                                            abs( dimag( atmp ) ) )
 9271  140          CONTINUE
 9272            ELSE
 9273               ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
 9274               DO 150 i = 1, 
min( mbloc, 
max( 0, nbloc + lcmt ) )
 
 9275                  atmp = a( ijoffa + i*ldap1 )
 9276                  a( ijoffa + i*ldap1 ) = alpha +
 9277     $                                    dcmplx( abs( dble(  atmp ) ),
 9278     $                                            abs( dimag( atmp ) ) )
 9279  150          CONTINUE
 9280            END IF
 9281            lcmt00 = lcmt
 9282            lcmt   = lcmt - pmb
 9283            mblks  = mblkd
 9284            mblkd  = mblkd - 1
 9285            ioffa  = ioffd
 9286            ioffd  = ioffd + mbloc
 9287            GO TO 130
 9288         END IF
 9289
 9290         lcmt00 = lcmt00 + qnb
 9291         nblks  = nblks - 1
 9292         joffa  = joffa + nbloc
 9293         GO TO 110
 9294
 9295      END IF
 9296
 9297      RETURN
 9298
 9299
 9300
subroutine pb_ainfog2l(m, n, i, j, desc, nprow, npcol, myrow, mycol, imb1, inb1, mp, nq, ii, jj, prow, pcol, rprow, rpcol)
 
subroutine pb_binfo(offd, m, n, imb1, inb1, mb, nb, mrrow, mrcol, lcmt00, mblks, nblks, imbloc, inbloc, lmbloc, lnbloc, ilow, low, iupp, upp)
 
subroutine pb_desctrans(descin, descout)