1 SUBROUTINE pzoptee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
9 INTEGER ICTXT, NOUT, SCODE
156 IF( scode.EQ.21 )
THEN
161 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
163 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
169 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
171 ELSE IF( scode.EQ.23 )
THEN
176 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
181 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
186 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
190 ELSE IF( scode.EQ.31 )
THEN
195 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
200 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'B', apos )
202 ELSE IF( scode.EQ.32 )
THEN
207 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
212 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
214 ELSE IF( scode.EQ.33 .OR. scode.EQ.34 .OR. scode.EQ.35 .OR.
215 $ scode.EQ.36 .OR. scode.EQ.40 )
THEN
220 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
225 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
227 ELSE IF( scode.EQ.38 )
THEN
232 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'S', apos )
237 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'U', apos )
242 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
247 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'D', apos )
250 ELSE IF( scode.EQ.39 )
THEN
255 CALL pzchkopt( ictxt, nout, subptr, scode, sname,
'A', apos )
454 SUBROUTINE pzdimee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
462 INTEGER ICTXT, NOUT, SCODE
609 IF( scode.EQ.11 .OR. scode.EQ.12 .OR. scode.EQ.13 .OR.
610 $ scode.EQ.14 .OR. scode.EQ.15 )
THEN
615 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
619 ELSE IF( scode.EQ.21 )
THEN
624 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
629 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
631 ELSE IF( scode.EQ.22 .OR. scode.EQ.25 .OR. scode.EQ.26 .OR.
637 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
639 ELSE IF( scode.EQ.23 )
THEN
644 CALL pzchkdim( ictxt, nout, subptr,
'N'
646 ELSE IF( scode.EQ.24 )
THEN
651 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
656 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
660 ELSE IF( scode.EQ.31 )
THEN
665 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
670 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
675 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'K', apos )
677 ELSE IF( scode.EQ.32 )
THEN
682 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
687 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
689 ELSE IF( scode.EQ.33 .OR. scode.EQ.34 .OR. scode.EQ.35 .OR.
695 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
700 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'K', apos )
702 ELSE IF( scode.EQ.37 )
THEN
707 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M'
712 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
714 ELSE IF( scode.EQ.38 )
THEN
719 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
724 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
726 ELSE IF( scode.EQ.39 )
THEN
731 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
736 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
738 ELSE IF( scode.EQ.40 )
THEN
743 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'M', apos )
748 CALL pzchkdim( ictxt, nout, subptr, scode, sname,
'N', apos )
935 SUBROUTINE pzvecee( ICTXT, NOUT, SUBPTR, SCODE, SNAME )
943 INTEGER ICTXT, NOUT, SCODE
1092 IF( scode.EQ.11 )
THEN
1097 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1102 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1104 ELSE IF( scode.EQ.12 .OR. scode.EQ.15 )
THEN
1109 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1111 ELSE IF( scode.EQ.13 )
THEN
1116 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1121 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1123 ELSE IF( scode.EQ.14 )
THEN
1128 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1132 ELSE IF( scode.EQ.21 )
THEN
1137 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1142 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1144 ELSE IF( scode.EQ.22 )
THEN
1149 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1154 CALL pzchkmat( ictxt, nout, subptr, scode, sname
'Y'
1156 ELSE IF( scode.EQ.23 )
THEN
1161 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1163 ELSE IF( scode.EQ.24 .OR. scode.EQ.27 )
THEN
1168 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
1173 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'Y', apos )
1175 ELSE IF( scode.EQ.26 .OR. scode.EQ.27 )
THEN
1180 CALL pzchkmat( ictxt, nout, subptr, scode, sname,
'X', apos )
6583 SUBROUTINE PZMMCH3( UPLO, TRANS, M, N, ALPHA, A, IA, JA, DESCA,
6584 $ BETA, C, PC, IC, JC, DESCC, ERR, INFO )
6592 CHARACTER*1 TRANS, UPLO
6593 INTEGER IA, IC, INFO, JA, JC, M, N
6594 DOUBLE PRECISION ERR
6595 COMPLEX*16 ALPHA, BETA
6598 INTEGER DESCA( * ), DESCC( * )
6599 COMPLEX*16 A( * ), C( * ), PC( * )
6742 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
6743 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
6745 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
6746 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
6747 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
6748 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
6749 DOUBLE PRECISION ZERO
6750 PARAMETER ( ZERO = 0.0D+0 )
6753 LOGICAL COLREP, CTRAN, LOWER, NOTRAN, ROWREP, UPPER
6754 INTEGER I, ICCOL, ICROW, ICTXT, IIC, IOFFA, IOFFC, J,
6755 $ JJC, LDA, LDC, LDPC, MYCOL, MYROW, NPCOL,
6757 DOUBLE PRECISION ERR0, ERRI, PREC
6760 EXTERNAL BLACS_GRIDINFO, DGAMX2D, IGSUM2D, PB_INFOG2L,
6765 DOUBLE PRECISION PDLAMCH
6766 EXTERNAL LSAME, PDLAMCH
6769 INTRINSIC ABS, DCONJG, MAX
6773 ICTXT = DESCC( CTXT_ )
6774 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
6776 PREC = PDLAMCH( ICTXT, 'eps
' )
6778 UPPER = LSAME( UPLO, 'u' )
6779 lower =
lsame( uplo,
'L' )
6780 notran =
lsame( trans,
'N' )
6781 ctran =
lsame( trans,
'C' )
6790 ldc =
max( 1, descc( m_ ) )
6791 ldpc =
max( 1, descc( lld_ ) )
6792 rowrep = ( descc( rsrc_ ).EQ.-1 )
6793 colrep = ( descc( csrc_ ).EQ.-1 )
6797 DO 20 j = jc, jc + n - 1
6799 ioffc = ic + ( j - 1 ) * ldc
6800 ioffa = ia + ( ja - 1 + j - jc ) * lda
6802 DO 10 i = ic, ic + m - 1
6805 IF( ( j - jc ).GE.( i - ic ) )
THEN
6807 $ c( ioffc ), prec )
6811 ELSE IF( lower )
THEN
6812 IF( ( j - jc ).LE.( i - ic ) )
THEN
6814 $ c( ioffc ), prec )
6820 $ c( ioffc ), prec )
6823 CALL pb_infog2l( i, j, descc, nprow, npcol, myrow, mycol,
6824 $ iic, jjc, icrow, iccol )
6825 IF( ( myrow.EQ.icrow .OR. rowrep ) .AND.
6826 $ ( mycol.EQ.iccol .OR. colrep ) )
THEN
6827 err0 = abs( pc( iic+(jjc-1)*ldpc )-c( ioffc ) )
6830 err =
max( err, err0 )
6844 ioffc = ic + ( j - 1 ) * ldc
6845 ioffa = ia + ( j - jc ) + ( ja - 1 ) * lda
6847 DO 30 i = ic, ic + m - 1
6850 IF( ( j - jc ).GE.( i - ic ) )
THEN
6852 $ beta, c( ioffc ), prec )
6856 ELSE IF( lower )
THEN
6857 IF( ( j - jc ).LE.( i - ic ) )
THEN
6859 $ beta, c( ioffc ), prec )
6865 $ beta, c( ioffc ), prec )
6868 CALL pb_infog2l( i, j, descc, nprow, npcol, myrow, mycol,
6869 $ iic, jjc, icrow, iccol )
6870 IF( ( myrow.EQ.icrow .OR. rowrep ) .AND.
6871 $ ( mycol.EQ.iccol .OR. colrep ) )
THEN
6872 err0 = abs( pc( iic+(jjc-1)*ldpc )-c( ioffc ) )
6875 err =
max( err, err0 )
6887 DO 60 j = jc, jc + n - 1
6889 ioffc = ic + ( j - 1 ) * ldc
6890 ioffa = ia + ( j - jc ) + ( ja - 1 ) * lda
6892 DO 50 i = ic, ic + m - 1
6895 IF( ( j - jc ).GE.( i - ic ) )
THEN
6897 $ c( ioffc ), prec )
6901 ELSE IF( lower )
THEN
6902 IF( ( j - jc ).LE.( i - ic ) )
THEN
6904 $ c( ioffc ), prec )
6913 CALL pb_infog2l( i, j, descc, nprow, npcol, myrow, mycol,
6914 $ iic, jjc, icrow, iccol )
6915 IF( ( myrow.EQ.icrow .OR. rowrep ) .AND.
6916 $ ( mycol.EQ.iccol .OR. colrep ) )
THEN
6917 err0 = abs( pc( iic+(jjc-1)*ldpc )-c( ioffc ) )
6920 err =
max( err, err0 )
6934 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, mycol )
6935 CALL dgamx2d( ictxt,
'All',
' ', 1, 1, err, 1, i, j, -1, -1,
7172 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
7173 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
7175 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
7176 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
7177 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
7178 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
7179 DOUBLE PRECISION ZERO
7180 PARAMETER ( ZERO = 0.0d+0 )
7183 LOGICAL COLREP, GODOWN, GOLEFT, ROWREP
7184 INTEGER I, IACOL, IAROW, ICTXT, IIA, IJOFFA, ILOW,
7185 $ imb1, imbloc, inb1, inbloc, ioffa, ioffd, iupp,
7186 $ jja, joffa, joffd, lcmt, lcmt00, lda, ldap1,
7187 $ lmbloc, lnbloc, low, mb, mblkd, mblks, mbloc,
7188 $ mrcol, mrrow, mycol, myrow, nb, nblkd, nblks,
7189 $ nbloc, np, npcol, nprow, nq, pmb, qnb, upp
7190 DOUBLE PRECISION ALPHA, ATMP
7193 INTEGER DESCA2( DLEN_ )
7201 DOUBLE PRECISION PDLAMCH
7202 EXTERNAL lsame, pdlamch
7205 INTRINSIC dble, dcmplx,
max,
min
7215 ictxt = desca2( ctxt_ )
7221 IF(
lsame( toggle,
'Z' ) )
THEN
7223 ELSE IF(
lsame( toggle,
'B' ) )
THEN
7224 alpha = pdlamch( ictxt,
'Epsilon' )
7225 alpha = alpha / pdlamch( ictxt,
'Safe minimum' )
7228 CALL pb_ainfog2l( n, n, ia, ja, desca2, nprow, npcol, myrow,
7229 $ mycol, imb1, inb1, np, nq, iia, jja, iarow,
7230 $ iacol, mrrow, mrcol )
7232 IF( np.LE.0 .OR. nq.LE.0 )
7240 CALL pb_binfo( 0, np, nq, imb1, inb1, mb, nb, mrrow, mrcol,
7241 $ lcmt00, mblks, nblks, imbloc, inbloc, lmbloc,
7242 $ lnbloc, ilow, low, iupp, upp )
7246 rowrep = ( desca2( rsrc_ ).EQ.-1 )
7247 colrep = ( desca2( csrc_ ).EQ.-1 )
7248 lda = desca2( lld_ )
7265 godown = ( lcmt00.GT.iupp )
7266 goleft = ( lcmt00.LT.ilow )
7268 IF( .NOT.godown .AND. .NOT.goleft )
THEN
7272 IF( lcmt00.GE.0 )
THEN
7273 ijoffa = ioffa + lcmt00 + ( joffa - 1 ) * lda
7274 DO 10 i = 1,
min( inbloc,
max( 0, imbloc - lcmt00 ) )
7275 atmp = dble( a( ijoffa + i*ldap1 ) )
7276 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7279 ijoffa = ioffa + ( joffa - lcmt00 - 1 ) * lda
7280 DO 20 i = 1,
min( imbloc,
max( 0, inbloc + lcmt00 ) )
7281 atmp = dble( a( ijoffa + i*ldap1 ) )
7282 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7285 goleft = ( ( lcmt00 - ( iupp - upp + pmb ) ).LT.ilow )
7286 godown = .NOT.goleft
7292 lcmt00 = lcmt00 - ( iupp - upp + pmb )
7294 ioffa = ioffa + imbloc
7297 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
7298 lcmt00 = lcmt00 - pmb
7313 IF( mblkd.GT.0 .AND. lcmt.GE.ilow )
THEN
7316 IF( lcmt.GE.0 )
THEN
7317 ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
7318 DO 50 i = 1,
min( inbloc,
max( 0, mbloc - lcmt ) )
7319 atmp = dble( a( ijoffa + i*ldap1 ) )
7320 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7323 ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
7324 DO 60 i = 1,
min( mbloc,
max( 0, inbloc + lcmt ) )
7325 atmp = dble( a( ijoffa + i*ldap1 ) )
7326 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7334 ioffd = ioffd + mbloc
7338 lcmt00 = lcmt00 + low - ilow + qnb
7340 joffa = joffa + inbloc
7342 ELSE IF( goleft )
THEN
7344 lcmt00 = lcmt00 + low - ilow + qnb
7346 joffa = joffa + inbloc
7349 IF( nblks.GT.0 .AND. lcmt00.LT.low )
THEN
7350 lcmt00 = lcmt00 + qnb
7365 IF( nblkd.GT.0 .AND. lcmt.LE.iupp )
THEN
7368 IF( lcmt.GE.0 )
THEN
7369 ijoffa = ioffa + lcmt + ( joffd - 1 ) * lda
7370 DO 90 i = 1,
min( nbloc,
max( 0, imbloc - lcmt ) )
7371 atmp = dble( a( ijoffa + i*ldap1 ) )
7372 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7375 ijoffa = ioffa + ( joffd - lcmt - 1 ) * lda
7376 DO 100 i = 1,
min( imbloc,
max( 0, nbloc + lcmt ) )
7377 atmp = dble( a( ijoffa + i*ldap1 ) )
7378 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7386 joffd = joffd + nbloc
7390 lcmt00 = lcmt00 - ( iupp - upp + pmb )
7392 ioffa = ioffa + imbloc
7398 IF( nblks.GT.0 )
THEN
7402 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
7403 lcmt00 = lcmt00 - pmb
7418 IF( mblkd.GT.0 .AND. lcmt.GE.low )
THEN
7421 IF( lcmt.GE.0 )
THEN
7422 ijoffa = ioffd + lcmt + ( joffa - 1 ) * lda
7423 DO 140 i = 1,
min( nbloc,
max( 0, mbloc - lcmt ) )
7424 atmp = dble( a( ijoffa + i*ldap1 ) )
7425 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7428 ijoffa = ioffd + ( joffa - lcmt - 1 ) * lda
7429 DO 150 i = 1,
min( mbloc,
max( 0, nbloc + lcmt ) )
7430 atmp = dble( a( ijoffa + i*ldap1 ) )
7431 a( ijoffa + i*ldap1 ) = dcmplx( atmp, alpha )
7439 ioffd = ioffd + mbloc
7443 lcmt00 = lcmt00 + qnb
7445 joffa = joffa + nbloc
7508 SUBROUTINE pzlaset( UPLO, M, N, ALPHA, BETA, A, IA, JA, DESCA )
7517 INTEGER IA, JA, M, N
7518 COMPLEX*16 ALPHA, BETA
7654 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
7656 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
7657 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
7658 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
7659 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
7662 LOGICAL GODOWN, GOLEFT, ISCOLREP, ISROWREP, LOWER,
7664 INTEGER IACOL, IAROW, ICTXT, IIA, IIMAX, ILOW, IMB1,
7665 $ IMBLOC, INB1, INBLOC, IOFFA, IOFFD, , JJA,
7666 $ jjmax, joffa, joffd, lcmt, lcmt00, lda, lmbloc,
7667 $ lnbloc, low, m1, mb, mblkd, mblks, mbloc, mp,
7668 $ mrcol, mrrow, mycol, myrow, n1, nb, nblkd,
7669 $ nblks, nbloc, npcol, nprow, nq, pmb, qnb, tmp1,
7673 INTEGER DESCA2( DLEN_ )
7688 IF( m.EQ.0 .OR. n.EQ.0 )
7697 ictxt = desca2( ctxt_ )
7700 CALL pb_ainfog2l( m, n, ia, ja, desca2, nprow, npcol, myrow,
7701 $ mycol, imb1, inb1, mp, nq, iia, jja,
7702 $ iacol, mrrow, mrcol )
7704 IF( mp.LE.0 .OR. nq.LE.0 )
7707 isrowrep = ( desca2( rsrc_ ).LT.0 )
7708 iscolrep = ( desca2( csrc_ ).LT.0 )
7709 lda = desca2( lld_ )
7711 upper = .NOT.( lsame( uplo, 'l
' ) )
7712.NOT.
LOWER = ( LSAME( UPLO, 'u
' ) )
7714.AND..AND..EQ..OR.
IF( ( ( LOWERUPPER )( ALPHABETA ) )
7715.AND.
$ ( ISROWREP ISCOLREP ) ) THEN
7716.GT..AND..GT.
IF( ( MP0 )( NQ0 ) )
7717 $ CALL PB_ZLASET( UPLO, MP, NQ, 0, ALPHA, BETA,
7718 $ A( IIA + ( JJA - 1 ) * LDA ), LDA )
7727 CALL PB_BINFO( 0, MP, NQ, IMB1, INB1, MB, NB, MRROW, MRCOL,
7728 $ LCMT00, MBLKS, NBLKS, IMBLOC, INBLOC, LMBLOC,
7729 $ LNBLOC, ILOW, LOW, IUPP, UPP )
7753.GT.
GODOWN = ( LCMT00IUPP )
7754.LT.
GOLEFT = ( LCMT00ILOW )
7756.NOT..AND..NOT.
IF( GODOWN GOLEFT ) THEN
7760.LT.
GOLEFT = ( ( LCMT00 - ( IUPP - UPP + PMB ) )ILOW )
7761.NOT.
GODOWN = GOLEFT
7763 CALL PB_ZLASET( UPLO, IMBLOC, INBLOC, LCMT00, ALPHA, BETA,
7764 $ A( IIA+JOFFA*LDA ), LDA )
7766.AND..GT.
IF( UPPER NQINBLOC )
7767 $ CALL PB_ZLASET( 'all
', IMBLOC, NQ-INBLOC, 0, ALPHA,
7768 $ ALPHA, A( IIA+(JOFFA+INBLOC)*LDA ), LDA )
7772.AND..GT.
IF( LOWER MPIMBLOC )
7773 $ CALL PB_ZLASET( 'all
', MP-IMBLOC, INBLOC, 0, ALPHA,
7774 $ ALPHA, A( IIA+IMBLOC+JOFFA*LDA ), LDA )
7783 LCMT00 = LCMT00 - ( IUPP - UPP + PMB )
7785 IOFFA = IOFFA + IMBLOC
7788.GT..AND..GT.
IF( MBLKS0 LCMT00UPP ) THEN
7789 LCMT00 = LCMT00 - PMB
7795 TMP1 = MIN( IOFFA, IIMAX ) - IIA + 1
7796.AND..GT.
IF( UPPER TMP10 ) THEN
7797 CALL PB_ZLASET( 'all
', TMP1, N1, 0, ALPHA, ALPHA,
7798 $ A( IIA+JOFFA*LDA ), LDA )
7812.GT..AND..GE.
IF( MBLKD0 LCMTILOW ) THEN
7815 CALL PB_ZLASET( UPLO, MBLOC, INBLOC, LCMT, ALPHA, BETA,
7816 $ A( IOFFD+1+JOFFA*LDA ), LDA )
7822 IOFFD = IOFFD + MBLOC
7826 TMP1 = M1 - IOFFD + IIA - 1
7827.AND..GT.
IF( LOWER TMP10 )
7828 $ CALL PB_ZLASET( 'all
', TMP1, INBLOC, 0, ALPHA, ALPHA,
7829 $ A( IOFFD+1+JOFFA*LDA ), LDA )
7831 TMP1 = IOFFA - IIA + 1
7834 LCMT00 = LCMT00 + LOW - ILOW + QNB
7836 JOFFA = JOFFA + INBLOC
7838.AND..GT..AND..GT.
IF( UPPER TMP10 N10 )
7839 $ CALL PB_ZLASET( 'all
', TMP1, N1, 0, ALPHA, ALPHA,
7840 $ A( IIA+JOFFA*LDA ), LDA )
7845 ELSE IF( GOLEFT ) THEN
7847 LCMT00 = LCMT00 + LOW - ILOW + QNB
7849 JOFFA = JOFFA + INBLOC
7852.GT..AND..LT.
IF( NBLKS0 LCMT00LOW ) THEN
7853 LCMT00 = LCMT00 + QNB
7859 TMP1 = MIN( JOFFA, JJMAX ) - JJA + 1
7860.AND..GT.
IF( LOWER TMP10 ) THEN
7861 CALL PB_ZLASET( 'all
', M1, TMP1, 0, ALPHA, ALPHA,
7862 $ A( IIA+(JJA-1)*LDA ), LDA )
7876.GT..AND..LE.
IF( NBLKD0 LCMTIUPP ) THEN
7879 CALL PB_ZLASET( UPLO, IMBLOC, NBLOC, LCMT, ALPHA, BETA,
7880 $ A( IIA+JOFFD*LDA ), LDA )
7886 JOFFD = JOFFD + NBLOC
7890 TMP1 = N1 - JOFFD + JJA - 1
7891.AND..GT.
IF( UPPER TMP10 )
7892 $ CALL PB_ZLASET( 'all
', IMBLOC, TMP1, 0, ALPHA, ALPHA,
7893 $ A( IIA+JOFFD*LDA ), LDA )
7895 TMP1 = JOFFA - JJA + 1
7898 LCMT00 = LCMT00 - ( IUPP - UPP + PMB )
7900 IOFFA = IOFFA + IMBLOC
7902.AND..GT..AND..GT.
IF( LOWER M10 TMP10 )
7903 $ CALL PB_ZLASET( 'all
', M1, TMP1, 0, ALPHA, ALPHA,
7904 $ A( IOFFA+1+(JJA-1)*LDA ), LDA )
7913.GT.
IF( NBLKS0 ) THEN
7917.GT..AND..GT.
IF( MBLKS0 LCMT00UPP ) THEN
7918 LCMT00 = LCMT00 - PMB
7924 TMP1 = MIN( IOFFA, IIMAX ) - IIA + 1
7925.AND..GT.
IF( UPPER TMP10 ) THEN
7926 CALL PB_ZLASET( 'all
', TMP1, N1, 0, ALPHA, ALPHA,
7927 $ A( IIA+JOFFA*LDA ), LDA )
7941.GT..AND..GE.
IF( MBLKD0 LCMTLOW ) THEN
7944 CALL PB_ZLASET( UPLO, MBLOC, NBLOC, LCMT, ALPHA, BETA,
7945 $ A( IOFFD+1+JOFFA*LDA ), LDA )
7951 IOFFD = IOFFD + MBLOC
7955 TMP1 = M1 - IOFFD + IIA - 1
7956.AND..GT.
IF( LOWER TMP10 )
7957 $ CALL PB_ZLASET( 'all
', TMP1, NBLOC, 0, ALPHA, ALPHA,
7958 $ A( IOFFD+1+JOFFA*LDA ), LDA )
7960 TMP1 = MIN( IOFFA, IIMAX ) - IIA + 1
7963 LCMT00 = LCMT00 + QNB
7965 JOFFA = JOFFA + NBLOC
7967.AND..GT..AND..GT.
IF( UPPER TMP10 N10 )
7968 $ CALL PB_ZLASET( 'all
', TMP1, N1, 0, ALPHA, ALPHA,
7969 $ A( IIA+JOFFA*LDA ), LDA )
8490 SUBROUTINE pzlagen( INPLACE, AFORM, DIAG, OFFA, M, N, IA, JA,
8491 $ DESCA, IASEED, A, LDA )
8501 INTEGER IA, IASEED, JA, LDA, M, N, OFFA
8505 COMPLEX*16 A( LDA, * )
8683 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
8684 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
8686 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
8687 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
8688 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
8689 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
8690 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
8691 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
8692 $ , JMP_NQNB, JMP_ROW
8693 parameter( jmp_1 = 1, jmp_row = 2, jmp_col = 3,
8694 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
8695 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
8696 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
8698 DOUBLE PRECISION ZERO
8699 PARAMETER ( ZERO = 0.0d+0 )
8702 LOGICAL DIAGDO, SYMM, HERM, NOTRAN
8703 INTEGER CSRC, I, IACOL, IAROW, ICTXT, IIA, ILOCBLK,
8704 $ ILOCOFF, ILOW, IMB, IMB1, IMBLOC, IMBVIR, INB,
8705 $ inb1, inbloc, inbvir, info, ioffda, itmp, iupp,
8706 $ ivir, jja, jlocblk, jlocoff, jvir, lcmt00,
8707 $ lmbloc, lnbloc, low, maxmn, mb, mblks, mp,
8708 $ mrcol, mrrow, mycdist, mycol, myrdist, myrow,
8709 $ nb, nblks, npcol, nprow, nq, nvir, rsrc, upp
8713 INTEGER DESCA2( DLEN_ ), IMULADD( 4, JMP_LEN ),
8714 $ IRAN( 2 ), JMP( JMP_LEN ), MULADD0( 4 )
8728 INTRINSIC dble, dcmplx,
max,
min
8731 DATA ( muladd0( i ), i = 1, 4 ) / 20077, 16838,
8742 ictxt = desca2( ctxt_ )
8748 IF( nprow.EQ.-1 )
THEN
8749 info = -( 1000 + ctxt_ )
8751 symm = lsame( aform,
'S' )
8752 herm = lsame( aform,
'H' )
8753 notran = lsame( aform,
'N' )
8754 diagdo = lsame( diag,
'D' )
8755 IF( .NOT.( symm.OR.herm.OR.notran ) .AND.
8756 $ .NOT.( lsame( aform,
'T' ) ) .AND.
8757 $ .NOT.( lsame( aform,
'C' ) ) )
THEN
8759 ELSE IF( ( .NOT.diagdo ) .AND.
8760 $ ( .NOT.lsame( diag,
'N' ) ) )
THEN
8763 CALL pb_chkmat( ictxt, m, 5, n, 6, ia, ja, desca2, 10, info )
8766 IF( info.NE.0 )
THEN
8767 CALL pxerbla( ictxt,
'PZLAGEN', -info )
8773 IF( ( m.LE.0 ).OR.( n.LE.0 ) )
8780 imb = desca2( imb_ )
8781 inb = desca2( inb_ )
8782 rsrc = desca2( rsrc_ )
8783 csrc = desca2( csrc_ )
8787 CALL pb_ainfog2l( m, n, ia, ja, desca2, nprow, npcol, myrow,
8788 $ mycol, imb1, inb1, mp, nq, iia, jja, iarow,
8789 $ iacol, mrrow, mrcol )
8801 ioffda = ja + offa - ia
8802 CALL pb_binfo( ioffda, mp, nq, imb1, inb1, mb, nb, mrrow,
8803 $ mrcol, lcmt00, mblks, nblks, imbloc, inbloc,
8804 $ lmbloc, lnbloc, ilow, low, iupp, upp )
8812 itmp =
max( 0, -offa )
8815 nvir = desca2( m_ ) + itmp
8817 CALL pb_locinfo( ivir, imbvir, mb, myrow, rsrc, nprow, ilocblk,
8818 $ ilocoff, myrdist )
8820 itmp =
max( 0, offa )
8823 nvir =
max(
max( nvir, desca2( n_ ) + itmp ),
8824 $ desca2( m_ ) + desca2( n_ ) - 1 )
8826 CALL pb_locinfo( jvir, inbvir, nb, mycol, csrc, npcol, jlocblk,
8827 $ jlocoff, mycdist )
8829 IF( symm .OR. herm .OR. notran )
THEN
8831 CALL pb_initjmp( .true., nvir, imbvir, inbvir, imbloc, inbloc,
8832 $ mb, nb, rsrc, csrc, nprow, npcol, 2, jmp )
8840 CALL pb_setlocran( iaseed, ilocblk, jlocblk, ilocoff, jlocoff,
8841 $ myrdist, mycdist, nprow, npcol, jmp,
8844 CALL pb_zlagen(
'Lower', aform, a( iia, jja ), lda, lcmt00,
8845 $ iran, mblks, imbloc, mb, lmbloc, nblks, inbloc,
8846 $ nb, lnbloc, jmp, imuladd )
8850 IF( symm .OR. herm .OR. ( .NOT. notran ) )
THEN
8852 CALL pb_initjmp( .false., nvir, imbvir, inbvir, imbloc, inbloc,
8853 $ mb, nb, rsrc, csrc, nprow, npcol, 2, jmp )
8861 CALL pb_setlocran( iaseed, ilocblk, jlocblk, ilocoff, jlocoff,
8862 $ myrdist, mycdist, nprow, npcol, jmp,
8865 CALL pb_zlagen(
'Upper', aform, a( iia, jja ), lda, lcmt00,
8866 $ iran, mblks, imbloc, mb, lmbloc, nblks, inbloc,
8867 $ nb, lnbloc, jmp, imuladd )
8873 maxmn =
max( desca2( m_ ), desca2( n_ ) )
8875 alpha = dcmplx( dble( 2 * maxmn ), zero )
8877 alpha = dcmplx( dble( nvir ), dble( maxmn ) )
8880 IF( ioffda.GE.0 )
THEN
8882 $ a,
min( ia+ioffda, ia+m-1 ), ja, desca )
8885 $ a, ia,
min( ja-ioffda, ja+n-1 ), desca )
8895 SUBROUTINE pzladom( INPLACE, N, ALPHA, A, IA, JA, DESCA )
9023 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
9024 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
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 )
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
9042 INTEGER DESCA2( DLEN_ )
9049 INTRINSIC abs, dble, dcmplx, dimag,
max,
min
9059 ictxt = desca2( ctxt_ )
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 )
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 )
9088 lda = desca2( lld_ )
9091 IF( desca2( rsrc_ ).LT.0 )
THEN
9096 IF( desca2( csrc_ ).LT.0 )
THEN
9105 godown = ( lcmt00.GT.iupp )
9106 goleft = ( lcmt00.LT.ilow )
9108 IF( .NOT.godown .AND. .NOT.goleft )
THEN
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 ) ) )
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 ) ) )
9129 goleft = ( ( lcmt00 - ( iupp - upp + pmb ) ).LT.ilow )
9130 godown = .NOT.goleft
9136 lcmt00 = lcmt00 - ( iupp - upp + pmb )
9138 ioffa = ioffa + imbloc
9141 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
9142 lcmt00 = lcmt00 - pmb
9154 IF( mblkd.GT.0 .AND. lcmt.GE.ilow )
THEN
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 ) ) )
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 ) ) )
9179 ioffd = ioffd + mbloc
9183 lcmt00 = lcmt00 + low - ilow + qnb
9185 joffa = joffa + inbloc
9187 ELSE IF( goleft )
THEN
9189 lcmt00 = lcmt00 + low - ilow + qnb
9191 joffa = joffa + inbloc
9194 IF( nblks.GT.0 .AND. lcmt00.LT.low )
THEN
9195 lcmt00 = lcmt00 + qnb
9207 IF( nblkd.GT.0 .AND. lcmt.LE.iupp )
THEN
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 ) ),
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 ) ) )
9232 joffd = joffd + nbloc
9236 lcmt00 = lcmt00 - ( iupp - upp + pmb )
9238 ioffa = ioffa + imbloc
9244 IF( nblks.GT.0 )
THEN
9248 IF( mblks.GT.0 .AND. lcmt00.GT.upp )
THEN
9249 lcmt00 = lcmt00 - pmb
9261 IF( mblkd.GT.0 .AND. lcmt.GE.low )
THEN
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 ) ) )
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 ) ) )
9286 ioffd = ioffd + mbloc
9290 lcmt00 = lcmt00 + qnb
9292 joffa = joffa + nbloc
9303 $ CMATNM, NOUT, WORK )
9311 INTEGER IA, ICPRNT, IRPRNT, JA, M, N, NOUT
9314 CHARACTER*(*) CMATNM
9316 COMPLEX*16 A( * ), WORK( * )
9442 INTEGER , CSRC_, CTXT_, DLEN_,
9443 $ , IMB_, INB_, LLD_, MB_, M_, , N_,
9445 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
9446 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
9447 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
9448 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
9451 INTEGER MYCOL, MYROW, NPCOL, NPROW, PCOL, PROW
9454 INTEGER DESCA2( DLEN_ )
9463 IF( ( m.LE.0 ).OR.( n.LE.0 ) )
9470 CALL blacs_gridinfo( desca2( ctxt_ ), nprow, npcol, myrow, mycol )
9472 IF( desca2( rsrc_ ).GE.0 )
THEN
9473 IF( desca2( csrc_ ).GE.0 )
THEN
9474 CALL pb_pzlaprn2( m, n, a, ia, ja, desca2, irprnt, icprnt,
9475 $ cmatnm, nout, desca2( rsrc_ ),
9476 $ desca2( csrc_ ), work )
9478 DO 10 pcol = 0, npcol - 1
9479 IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
9480 $
WRITE( nout, * )
'Colum-replicated array -- ' ,
9481 $
'copy in process column: ', pcol
9482 CALL pb_pzlaprn2( m, n, a, ia, ja, desca2, irprnt,
9483 $ icprnt, cmatnm, nout, desca2( rsrc_ ),
9488 IF( desca2( csrc_ ).GE.0 )
THEN
9489 DO 20 prow = 0, nprow - 1
9490 IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
9491 $
WRITE( nout, * )
'Row-replicated array -- ' ,
9492 $
'copy in process row: ', prow
9493 CALL pb_pzlaprn2( m, n, a, ia, ja, desca2, irprnt,
9494 $ icprnt, cmatnm, nout, prow,
9495 $ desca2( csrc_ ), work )
9498 DO 40 prow = 0, nprow - 1
9499 DO 30 pcol = 0, npcol - 1
9500 IF( ( myrow.EQ.irprnt ).AND.( mycol.EQ.icprnt ) )
9501 $
WRITE( nout, * )
'Replicated array -- ' ,
9502 $
'copy in process (', prow,
',', pcol,
')'
9503 CALL pb_pzlaprn2( m, n, a, ia, ja, desca2, irprnt,
9504 $ icprnt, cmatnm, nout, prow, pcol,
9517 $ CMATNM, NOUT, PROW, PCOL, WORK )
9525 INTEGER IA, ICPRNT, IRPRNT, JA, M, N, NOUT, PCOL, PROW
9528 CHARACTER*(*) CMATNM
9530 COMPLEX*16 A( * ), WORK( * )
9534 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
9535 $ dtype_, imb_, inb_, lld_, mb_, m_, nb_, n_,
9537 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
9538 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
9539 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
9540 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
9543 LOGICAL AISCOLREP, AISROWREP
9544 INTEGER H, I, IACOL, IAROW, IB, ICTXT, ICURCOL,
9545 $ ICURROW, II, IIA, IN, J, JB, JJ, JJA, JN, K,
9546 $ LDA, LDW, MYCOL, MYROW, NPCOL, NPROW
9553 INTRINSIC dble, dimag,
min
9559 ictxt = desca( ctxt_ )
9561 CALL pb_infog2l( ia, ja, desca, nprow, npcol, myrow, mycol,
9562 $ iia, jja, iarow, iacol )
9565 IF( desca( rsrc_ ).LT.0 )
THEN
9573 IF( desca( csrc_ ).LT.0 )
THEN
9582 ldw =
max( desca( imb_ ), desca( mb_ ) )
9586 jb = desca( inb_ ) - ja + 1
9588 $ jb = ( (-jb) / desca( nb_ ) + 1 ) * desca( nb_ ) + jb
9592 ib = desca( imb_ ) - ia + 1
9594 $ ib = ( (-ib) / desca( mb_ ) + 1 ) * desca( mb_ ) + ib
9597 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
9598 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9600 WRITE( nout, fmt = 9999 )
9601 $ cmatnm, ia+k, ja+h,
9602 $ dble( a( ii+k+(jj+h-1)*lda ) ),
9603 $ dimag( a( ii+k+(jj+h-1)*lda ) )
9607 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
9608 CALL zgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ), lda,
9610 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9611 CALL zgerv2d( ictxt, ib, 1, work, ldw, icurrow, icurcol )
9613 WRITE( nout, fmt = 9999 )
9614 $ cmatnm, ia+k-1, ja+h, dble( work( k ) ),
9615 $ dimag( work( k ) )
9619 IF( myrow.EQ.icurrow )
9621 IF( .NOT.aisrowrep )
9622 $ icurrow = mod( icurrow+1, nprow )
9623 CALL blacs_barrier( ictxt,
'All' )
9627 DO 50 i = in+1, ia+m-1, desca( mb_ )
9628 ib =
min( desca( mb_ ), ia+m-i )
9629 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
9630 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9632 WRITE( nout, fmt = 9999 )
9633 $ cmatnm, i+k, ja+h,
9634 $ dble( a( ii+k+(jj+h-1)*lda ) ),
9635 $ dimag( a( ii+k+(jj+h-1)*lda ) )
9639 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
9640 CALL zgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
9641 $ lda, irprnt, icprnt )
9642 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9643 CALL zgerv2d( ictxt, ib, 1, work, ldw, icurrow,
9646 WRITE( nout, fmt = 9999 )
9647 $ cmatnm, i+k-1, ja+h, dble( work( k ) ),
9648 $ dimag( work( k ) )
9652 IF( myrow.EQ.icurrow )
9654 IF( .NOT.aisrowrep )
9655 $ icurrow = mod( icurrow+1, nprow )
9656 CALL blacs_barrier( ictxt,
'All' )
9663 IF( mycol.EQ.icurcol )
9665 IF( .NOT.aiscolrep )
9666 $ icurcol = mod( icurcol+1, npcol )
9667 CALL blacs_barrier( ictxt,
'All' )
9671 DO 130 j = jn+1, ja+n-1, desca( nb_ )
9672 jb =
min( desca( nb_ ), ja+n-j )
9674 ib = desca( imb_ )-ia+1
9676 $ ib = ( (-ib) / desca( mb_ ) + 1 ) * desca( mb_ ) + ib
9679 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
9680 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9682 WRITE( nout, fmt = 9999 )
9683 $ cmatnm, ia+k, j+h,
9684 $ dble( a( ii+k+(jj+h-1)*lda ) ),
9685 $ dimag( a( ii+k+(jj+h-1)*lda ) )
9689 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
9690 CALL zgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
9691 $ lda, irprnt, icprnt )
9692 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9693 CALL zgerv2d( ictxt, ib, 1, work, ldw, icurrow,
9696 WRITE( nout, fmt = 9999 )
9697 $ cmatnm, ia+k-1, j+h, dble( work( k ) ),
9698 $ dimag( work( k ) )
9702 IF( myrow.EQ.icurrow )
9704 icurrow = mod( icurrow+1, nprow )
9705 CALL blacs_barrier( ictxt,
'All' )
9709 DO 110 i = in+1, ia+m-1, desca( mb_ )
9710 ib =
min( desca( mb_ ), ia+m-i )
9711 IF( icurrow.EQ.irprnt .AND. icurcol.EQ.icprnt )
THEN
9712 IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9714 WRITE( nout, fmt = 9999 )
9716 $ dble( a( ii+k+(jj+h-1)*lda ) ),
9717 $ dimag( a( ii+k+(jj+h-1)*lda ) )
9721 IF( myrow.EQ.icurrow .AND. mycol.EQ.icurcol )
THEN
9722 CALL zgesd2d( ictxt, ib, 1, a( ii+(jj+h-1)*lda ),
9723 $ lda, irprnt, icprnt )
9724 ELSE IF( myrow.EQ.irprnt .AND. mycol.EQ.icprnt )
THEN
9725 CALL zgerv2d( ictxt, ib, 1, work, ldw, icurrow,
9728 WRITE( nout, fmt = 9999 )
9729 $ cmatnm, i+k-1, j+h, dble( work( k ) ),
9730 $ dimag( work( k ) )
9734 IF( myrow.EQ.icurrow )
9736 IF( .NOT.aisrowrep )
9737 $ icurrow = mod( icurrow+1, nprow )
9738 CALL blacs_barrier( ictxt,
'All' )
9745 IF( mycol.EQ.icurcol )
9747 IF( .NOT.aiscolrep )
9748 $ icurcol = mod( icurcol+1, npcol )
9749 CALL blacs_barrier( ictxt,
'All' )
9753 9999
FORMAT( 1x, a,
'(', i6,
',', i6,
')=', d30.18,
'+i*(',
9882 INTEGER ICTXT, IPOST, IPRE, , M, N
9963 INTEGER I, IAM, IDUMM, INFO, J, K, MYCOL, MYROW, NPCOL,
9967 EXTERNAL BLACS_GRIDINFO, IGAMX2D, PB_TOPGET
9970 INTRINSIC dble, dimag
9976 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
9977 iam = myrow*npcol + mycol
9982 IF( ipre.GT.0 )
THEN
9984 IF( a( i ).NE.chkval )
THEN
9985 WRITE( *, fmt = 9998 ) myrow, mycol, mess,
' pre', i,
9986 $ dble( a( i ) ), dimag( a( i ) )
9991 WRITE( *, fmt = * )
'WARNING no pre-guardzone in PB_ZCHEKPAD'
9996 IF( ipost.GT.0 )
THEN
9998 DO 20 i = j, j+ipost-1
9999 IF( a( i ).NE.chkval )
THEN
10000 WRITE( *, fmt = 9998 ) myrow, mycol, mess,
'post',
10001 $ i-j+1, dble( a( i ) ),
10007 WRITE( *, fmt = * )
10008 $
'WARNING no post-guardzone buffer in PB_ZCHEKPAD'
10013 IF( lda.GT.m )
THEN
10016 DO 30 i = k, k + (lda-m) - 1
10017 IF( a( i ).NE.chkval )
THEN
10018 WRITE( *, fmt = 9997 ) myrow, mycol, mess,
10019 $ i-ipre-lda*(j-1), j, dble( a( i ) ),
10028 CALL pb_topget( ictxt,
'Combine',
'All', top
10029 CALL igamx2d( ictxt,
'All', top, 1, 1, info, 1, idumm, idumm, -1,
10031 IF( iam.EQ.0 .AND. info.GE.0 )
THEN
10032 WRITE( *, fmt = 9999 ) info / npcol, mod( info, npcol ), mess
10035 9999
FORMAT(
'{', i5,
',', i5,
'}: Memory overwrite in ', a )
10036 9998
FORMAT(
'{', i5,
',', i5,
'}: ', a, ' memory overwrite in
',
10037 $ A4, '-guardzone: loc(
', I3, ') = ', g20.7,
'+ i*',
10039 9997
FORMAT(
'{', i5,
',', i5,
'}: ', a,
' memory overwrite in ',
10040 $
'lda-m gap: loc(', i3,
',', i3,
') = ', g20.7,
10425 $ IMBLOC, MB, LMBLOC, NBLKS, INBLOC, NB,
10426 $ LNBLOC, JMP, IMULADD )
10434 CHARACTER*1 UPLO, AFORM
10435 INTEGER IMBLOC, INBLOC, LCMT00, LDA, LMBLOC, LNBLOC,
10436 $ MB, MBLKS, NB, NBLKS
10439 INTEGER IMULADD( 4, * ), IRAN( * ), JMP( * )
10440 COMPLEX*16 A( , * )
10543 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
10544 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
10545 $ JMP_NQINBLOC, JMP_NQNB, JMP_ROW
10546 PARAMETER ( JMP_1 = 1, jmp_row = 2, jmp_col = 3,
10547 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
10548 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
10549 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
10551 DOUBLE PRECISION ZERO
10552 PARAMETER ( ZERO = 0.0d+0 )
10555 INTEGER I, IB, IBLK, II, IK, ITMP, JB, JBLK, JJ, JK,
10556 $ JTMP, LCMTC, LCMTR, LOW, MNB, UPP
10560 INTEGER IB0( 2 ), IB1( 2 ), IB2( 2 ), IB3( 2 )
10567 DOUBLE PRECISION PB_DRAND
10568 EXTERNAL lsame, pb_drand
10571 INTRINSIC dble, dcmplx,
max,
min
10576 ib1( i ) = iran( i )
10577 ib2( i ) = iran( i )
10578 ib3( i ) = iran( i )
10581 IF( lsame( aform,
'N' ) )
THEN
10587 DO 50 jblk = 1, nblks
10589 IF( jblk.EQ.1 )
THEN
10591 ELSE IF( jblk.EQ.nblks )
THEN
10597 DO 40 jk = jj, jj + jb - 1
10601 DO 30 iblk = 1, mblks
10603 IF( iblk.EQ.1 )
THEN
10613 DO 20 ik = ii, ii + ib - 1
10614 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10620 IF( iblk.EQ.1 )
THEN
10624 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib1,
10631 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib1, ib0 )
10635 ib1( 1 ) = ib0( 1 )
10636 ib1( 2 ) = ib0( 2 )
10642 CALL pb_jumpit( imuladd( 1, jmp_col ), ib2, ib0 )
10644 ib1( 1 ) = ib0( 1 )
10645 ib1( 2 ) = ib0( 2 )
10646 ib2( 1 ) = ib0( 1 )
10647 ib2( 2 ) = ib0( 2 )
10653 IF( jblk.EQ.1 )
THEN
10657 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib3, ib0 )
10663 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib3, ib0 )
10667 ib1( 1 ) = ib0( 1 )
10668 ib1( 2 ) = ib0( 2 )
10669 ib2( 1 ) = ib0( 1 )
10670 ib2( 2 ) = ib0( 2 )
10671 ib3( 1 ) = ib0( 1 )
10672 ib3( 2 ) = ib0( 2 )
10676 ELSE IF( lsame( aform,
'T' ) )
THEN
10683 DO 90 iblk = 1, mblks
10685 IF( iblk.EQ.1 )
THEN
10687 ELSE IF( iblk.EQ.mblks )
THEN
10693 DO 80 ik = ii, ii + ib - 1
10697 DO 70 jblk = 1, nblks
10699 IF( jblk.EQ.1 )
THEN
10701 ELSE IF( jblk.EQ.nblks )
THEN
10709 DO 60 jk = jj, jj + jb - 1
10710 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10716 IF( jblk.EQ.1 )
THEN
10720 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
10727 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1, ib0 )
10731 ib1( 1 ) = ib0( 1 )
10732 ib1( 2 ) = ib0( 2 )
10738 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2, ib0 )
10740 ib1( 1 ) = ib0( 1 )
10741 ib1( 2 ) = ib0( 2 )
10742 ib2( 1 ) = ib0( 1 )
10743 ib2( 2 ) = ib0( 2 )
10749 IF( iblk.EQ.1 )
THEN
10753 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
10759 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
10763 ib1( 1 ) = ib0( 1 )
10764 ib1( 2 ) = ib0( 2 )
10765 ib2( 1 ) = ib0( 1 )
10766 ib2( 2 ) = ib0( 2 )
10767 ib3( 1 ) = ib0( 1 )
10768 ib3( 2 ) = ib0( 2 )
10772 ELSE IF( lsame( aform,
'S' ) )
THEN
10776 IF( lsame( uplo,
'L' ) )
THEN
10783 DO 170 jblk = 1, nblks
10785 IF( jblk.EQ.1 )
THEN
10788 ELSE IF( jblk.EQ.nblks )
THEN
10796 DO 160 jk = jj, jj + jb - 1
10801 DO 150 iblk = 1, mblks
10803 IF( iblk.EQ.1 )
THEN
10806 ELSE IF( iblk.EQ.mblks )
THEN
10816 IF( lcmtr.GT.upp )
THEN
10818 DO 100 ik = ii, ii + ib - 1
10819 dummy = dcmplx( pb_drand( 0 ),
10823 ELSE IF( lcmtr.GE.low )
THEN
10826 mnb =
max( 0, -lcmtr )
10828 IF( jtmp.LE.
min( mnb, jb ) )
THEN
10830 DO 110 ik = ii, ii + ib - 1
10831 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10835 ELSE IF( ( jtmp.GE.( mnb + 1 ) ) .AND.
10836 $ ( jtmp.LE.
min( ib-lcmtr, jb ) ) )
THEN
10838 itmp = ii + jtmp + lcmtr - 1
10840 DO 120 ik = ii, itmp - 1
10841 dummy = dcmplx( pb_drand( 0 ),
10845 DO 130 ik = itmp, ii + ib - 1
10846 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10854 DO 140 ik = ii, ii + ib - 1
10855 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10863 IF( iblk.EQ.1 )
THEN
10867 lcmtr = lcmtr - jmp( jmp_npimbloc )
10868 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib1,
10875 lcmtr = lcmtr - jmp( jmp_npmb )
10876 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib1,
10881 ib1( 1 ) = ib0( 1 )
10882 ib1( 2 ) = ib0( 2 )
10888 CALL pb_jumpit( imuladd( 1, jmp_col ), ib2, ib0 )
10890 ib1( 1 ) = ib0( 1 )
10891 ib1( 2 ) = ib0( 2 )
10892 ib2( 1 ) = ib0( 1 )
10893 ib2( 2 ) = ib0( 2 )
10899 IF( jblk.EQ.1 )
THEN
10903 lcmtc = lcmtc + jmp( jmp_nqinbloc )
10904 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib3, ib0 )
10910 lcmtc = lcmtc + jmp( jmp_nqnb
10911 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib3, ib0 )
10915 ib1( 1 ) = ib0( 1 )
10916 ib1( 2 ) = ib0( 2 )
10917 ib2( 1 ) = ib0( 1 )
10918 ib2( 2 ) = ib0( 2 )
10919 ib3( 1 ) = ib0( 1 )
10920 ib3( 2 ) = ib0( 2 )
10931 DO 250 iblk = 1, mblks
10933 IF( iblk.EQ.1 )
THEN
10936 ELSE IF( iblk.EQ.mblks )
THEN
10944 DO 240 ik = ii, ii + ib - 1
10949 DO 230 jblk = 1, nblks
10951 IF( jblk.EQ.1 )
THEN
10954 ELSE IF( jblk.EQ.nblks )
THEN
10964 IF( lcmtc.LT.low )
THEN
10966 DO 180 jk = jj, jj + jb - 1
10967 dummy = dcmplx( pb_drand( 0 ),
10971 ELSE IF( lcmtc.LE.upp )
THEN
10974 mnb =
max( 0, lcmtc )
10976 IF( itmp.LE.
min( mnb, ib ) )
THEN
10978 DO 190 jk = jj, jj + jb - 1
10979 a( ik, jk ) = dcmplx( pb_drand( 0 ),
10983 ELSE IF( ( itmp.GE.( mnb + 1 ) ) .AND.
10984 $ ( itmp.LE.
min( jb+lcmtc, ib ) ) )
THEN
10986 jtmp = jj + itmp - lcmtc - 1
10988 DO 200 jk = jj, jtmp - 1
10989 dummy = dcmplx( pb_drand( 0 ),
10993 DO 210 jk = jtmp, jj + jb - 1
10994 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11002 DO 220 jk = jj, jj + jb - 1
11003 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11011 IF( jblk.EQ.1 )
THEN
11015 lcmtc = lcmtc + jmp( jmp_nqinbloc )
11016 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
11023 lcmtc = lcmtc + jmp( jmp_nqnb )
11024 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1,
11029 ib1( 1 ) = ib0( 1 )
11030 ib1( 2 ) = ib0( 2 )
11036 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2, ib0 )
11038 ib1( 1 ) = ib0( 1 )
11039 ib1( 2 ) = ib0( 2 )
11040 ib2( 1 ) = ib0( 1 )
11041 ib2( 2 ) = ib0( 2 )
11047 IF( iblk.EQ.1 )
THEN
11051 lcmtr = lcmtr - jmp( jmp_npimbloc )
11052 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
11058 lcmtr = lcmtr - jmp( jmp_npmb )
11059 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
11063 ib1( 1 ) = ib0( 1 )
11064 ib1( 2 ) = ib0( 2 )
11065 ib2( 1 ) = ib0( 1 )
11066 ib2( 2 ) = ib0( 2 )
11067 ib3( 1 ) = ib0( 1 )
11068 ib3( 2 ) = ib0( 2 )
11074 ELSE IF( lsame( aform,
'C' ) )
THEN
11081 DO 290 iblk = 1, mblks
11083 IF( iblk.EQ.1 )
THEN
11085 ELSE IF( iblk.EQ.mblks )
THEN
11091 DO 280 ik = ii, ii + ib - 1
11095 DO 270 jblk = 1, nblks
11097 IF( jblk.EQ.1 )
THEN
11099 ELSE IF( jblk.EQ.nblks )
THEN
11107 DO 260 jk = jj, jj + jb - 1
11108 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11114 IF( jblk.EQ.1 )
THEN
11118 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
11125 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1,
11130 ib1( 1 ) = ib0( 1 )
11131 ib1( 2 ) = ib0( 2 )
11137 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2
11139 ib1( 1 ) = ib0( 1 )
11140 ib1( 2 ) = ib0( 2 )
11141 ib2( 1 ) = ib0( 1 )
11142 ib2( 2 ) = ib0( 2 )
11148 IF( iblk.EQ.1 )
THEN
11152 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
11158 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
11162 ib1( 1 ) = ib0( 1 )
11163 ib1( 2 ) = ib0( 2 )
11164 ib2( 1 ) = ib0( 1 )
11165 ib2( 2 ) = ib0( 2 )
11166 ib3( 1 ) = ib0( 1 )
11167 ib3( 2 ) = ib0( 2 )
11171 ELSE IF( lsame( aform,
'H' ) )
THEN
11175 IF( lsame( uplo,
'L' ) )
THEN
11182 DO 370 jblk = 1, nblks
11184 IF( jblk.EQ.1 )
THEN
11187 ELSE IF( jblk.EQ.nblks )
THEN
11195 DO 360 jk = jj, jj + jb - 1
11200 DO 350 iblk = 1, mblks
11202 IF( iblk.EQ.1 )
THEN
11205 ELSE IF( iblk.EQ.mblks )
THEN
11215 IF( lcmtr.GT.upp )
THEN
11217 DO 300 ik = ii, ii + ib - 1
11218 dummy = dcmplx( pb_drand( 0 ),
11222 ELSE IF( lcmtr.GE.low )
THEN
11225 mnb =
max( 0, -lcmtr )
11227 IF( jtmp.LE.
min( mnb, jb ) )
THEN
11229 DO 310 ik = ii, ii + ib - 1
11230 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11234 ELSE IF( ( jtmp.GE.( mnb + 1 ) ) .AND.
11235 $ ( jtmp.LE.
min( ib-lcmtr, jb ) ) )
THEN
11239 DO 320 ik = ii, itmp - 1
11240 dummy = dcmplx( pb_drand( 0 ),
11244 IF( itmp.LE.( ii + ib - 1 ) )
THEN
11245 dummy = dcmplx( pb_drand( 0 ),
11247 a( itmp, jk ) = dcmplx( dble( dummy ),
11251 DO 330 ik = itmp + 1, ii + ib - 1
11252 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11260 DO 340 ik = ii, ii + ib - 1
11261 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11269 IF( iblk.EQ.1 )
THEN
11273 lcmtr = lcmtr - jmp( jmp_npimbloc )
11274 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib1,
11281 lcmtr = lcmtr - jmp( jmp_npmb )
11282 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib1,
11287 ib1( 1 ) = ib0( 1 )
11288 ib1( 2 ) = ib0( 2 )
11294 CALL pb_jumpit( imuladd( 1, jmp_col ), ib2, ib0 )
11296 ib1( 1 ) = ib0( 1 )
11297 ib1( 2 ) = ib0( 2 )
11298 ib2( 1 ) = ib0( 1 )
11299 ib2( 2 ) = ib0( 2 )
11305 IF( jblk.EQ.1 )
THEN
11309 lcmtc = lcmtc + jmp( jmp_nqinbloc )
11310 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib3, ib0 )
11316 lcmtc = lcmtc + jmp( jmp_nqnb )
11317 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib3, ib0 )
11321 ib1( 1 ) = ib0( 1 )
11322 ib1( 2 ) = ib0( 2 )
11323 ib2( 1 ) = ib0( 1 )
11324 ib2( 2 ) = ib0( 2 )
11325 ib3( 1 ) = ib0( 1 )
11326 ib3( 2 ) = ib0( 2 )
11337 DO 450 iblk = 1, mblks
11339 IF( iblk.EQ.1 )
THEN
11342 ELSE IF( iblk.EQ.mblks )
THEN
11350 DO 440 ik = ii, ii + ib - 1
11355 DO 430 jblk = 1, nblks
11357 IF( jblk.EQ.1 )
THEN
11360 ELSE IF( jblk.EQ.nblks )
THEN
11370 IF( lcmtc.LT.low )
THEN
11372 DO 380 jk = jj, jj + jb - 1
11373 dummy = dcmplx( pb_drand( 0 ),
11377 ELSE IF( lcmtc.LE.upp )
THEN
11380 mnb =
max( 0, lcmtc )
11382 IF( itmp.LE.
min( mnb, ib ) )
THEN
11384 DO 390 jk = jj, jj + jb - 1
11385 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11389 ELSE IF( ( itmp.GE.( mnb + 1 ) ) .AND.
11390 $ ( itmp.LE.
min( jb+lcmtc, ib ) ) )
THEN
11392 jtmp = jj + itmp - lcmtc - 1
11394 DO 400 jk = jj, jtmp - 1
11395 dummy = dcmplx( pb_drand( 0 ),
11399 IF( jtmp.LE.( jj + jb - 1 ) )
THEN
11400 dummy = dcmplx( pb_drand( 0 ),
11402 a( ik, jtmp ) = dcmplx( dble( dummy ),
11406 DO 410 jk = jtmp + 1, jj + jb - 1
11415 DO 420 jk = jj, jj + jb - 1
11416 a( ik, jk ) = dcmplx( pb_drand( 0 ),
11424 IF( jblk.EQ.1 )
THEN
11428 lcmtc = lcmtc + jmp( jmp_nqinbloc )
11429 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
11436 lcmtc = lcmtc + jmp( jmp_nqnb )
11437 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1,
11442 ib1( 1 ) = ib0( 1 )
11443 ib1( 2 ) = ib0( 2 )
11449 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2, ib0 )
11451 ib1( 1 ) = ib0( 1 )
11452 ib1( 2 ) = ib0( 2 )
11453 ib2( 1 ) = ib0( 1 )
11454 ib2( 2 ) = ib0( 2 )
11460 IF( iblk.EQ.1 )
THEN
11464 lcmtr = lcmtr - jmp( jmp_npimbloc )
11465 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
11471 lcmtr = lcmtr - jmp( jmp_npmb )
11472 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
11476 ib1( 1 ) = ib0( 1 )
11477 ib1( 2 ) = ib0( 2 )
11478 ib2( 1 ) = ib0( 1 )
11479 ib2( 2 ) = ib0( 2 )
11480 ib3( 1 ) = ib0( 1 )
11481 ib3( 2 ) = ib0( 2 )