1 SUBROUTINE pvdimchk( ICTXT, NOUT, N, MATRIX, IX, JX, DESCX, INCX,
11 INTEGER ICTXT, INCX, INFO, IX, JX, N, NOUT
132 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
135 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
136 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
137 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
138 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
141 INTEGER MYCOL, MYROW, NPCOL, NPROW
153 ELSE IF( n.EQ.0 )
THEN
154 IF( descx( m_ ).LT.0 )
156 IF( descx( n_ ).LT.0 )
159 IF( incx.EQ.descx( m_ ) .AND.
162 ELSE IF( incx.EQ.1 .AND. incx.NE.descx
163 $ descx( m_ ).LT.( ix+n-1 ) )
THEN
166 IF( ix.GT.descx( m_ ) )
THEN
168 ELSE IF( jx.GT.descx( n_ ) )
THEN
176 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
179 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
180 WRITE( nout, fmt = 9999 ) matrix
181 WRITE( nout, fmt = 9998 ) n, matrix, ix, matrix, jx, matrix,
183 WRITE( nout, fmt = 9997 ) matrix, descx( m_ ), matrix,
189 9999
FORMAT(
'Incompatible arguments for matrix ', a1,
':' )
190 9998
FORMAT(
'N = ', i6,
', I', a1,
' = ', i6,
', J', a1,
' = ',
191 $ i6,
',INC', a1,
' = ', i6 )
192 9997
FORMAT(
'DESC', a1,
'( M_ ) = ', i6,
', DESC', a1,
'( N_ ) = ',
200 SUBROUTINE pmdimchk( ICTXT, NOUT, M, N, MATRIX, IA, JA, DESCA,
210 INTEGER ICTXT, INFO, IA, JA, M, N, NOUT
326 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
327 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
329 parameter( block_cyclic_2d_inb = 2, dlen_ = 11,
330 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
331 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
332 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
335 INTEGER MYCOL, MYROW, NPCOL, NPROW
345 IF( ( m.LT.0 ).OR.( n.LT.0 ) )
THEN
347 ELSE IF( ( m.EQ.0 ).OR.( n.EQ.0 ) )
THEN
348 IF( desca( m_ ).LT.0 )
350 IF( desca( n_ ).LT.0 )
353 IF( desca( m_ ).LT.( ia+m-1 ) )
355 IF( desca( n_ ).LT.( ja+n-1 ) )
361 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
364 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
365 WRITE( nout, fmt = 9999 ) matrix
366 WRITE( nout, fmt = 9998 ) m, n, matrix, ia, matrix, ja
367 WRITE( nout, fmt = 9997 ) matrix, desca( m_ ), matrix,
369 WRITE( nout, fmt = * )
373 9999
FORMAT(
'Incompatible arguments for matrix ', a1,
':' )
374 9998
FORMAT(
'M = ', i6,
', N = ', i6,
', I', a1,
' = ', i6,
375 $
', J', a1,
' = ', i6 )
376 9997
FORMAT(
'DESC', a1,
'( M_ ) = ', i6,
', DESC', a1,
'( N_ ) = ',
384 SUBROUTINE pvdescchk( ICTXT, NOUT, MATRIX, DESCX, DTX, MX, NX,
385 $ IMBX, INBX, MBX, NBX, RSRCX, CSRCX, INCX,
386 $ MPX, NQX, IPREX, IMIDX, IPOSTX, IGAP,
396 INTEGER CSRCX, DTX, GAPMUL, ICTXT, IGAP, IMBX, IMIDX,
397 $ INBX, INCX, INFO, IPOSTX, IPREX, MBX, MPX, MX,
578 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
579 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
581 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
582 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
583 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
584 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
587 INTEGER LLDX, MYCOL, MYROW, NPCOL, NPROW
590 EXTERNAL BLACS_GRIDINFO, , PB_DESCINIT2
602 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
606 IF( dtx.NE.block_cyclic_2d_inb )
THEN
607 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
608 $
WRITE( nout, fmt = 9999 ) matrix,
'DTYPE', matrix, dtx,
609 $ block_cyclic_2d_inb
616 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
617 $
WRITE( nout, fmt = 9998 ) matrix,
'M', matrix, mx
619 ELSE IF( nx.LT.0 )
THEN
620 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
621 $
WRITE( nout, fmt = 9997 ) matrix,
'N', matrix, nx
628 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
629 $
WRITE( nout, fmt = 9996 ) matrix,
'IMB', matrix, imbx
631 ELSE IF( inbx.LT.1 )
THEN
632 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
633 $
WRITE( nout, fmt = 9995 ) matrix,
'INB', matrix, inbx
640 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
641 $
WRITE( nout, fmt = 9994 ) matrix,
'MB', matrix, mbx
643 ELSE IF( nbx.LT.1 )
THEN
644 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
645 $
WRITE( nout, fmt = 9993 ) matrix,
'NB', matrix, nbx
651 IF( rsrcx.LT.-1 .OR. rsrcx.GE.nprow )
THEN
652 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
653 WRITE( nout, fmt = 9992 ) matrix
654 WRITE( nout, fmt = 9990 )
'RSRC', matrix, rsrcx, nprow
657 ELSE IF( csrcx.LT.-1 .OR. csrcx.GE.npcol )
THEN
658 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
659 WRITE( nout, fmt = 9991 ) matrix
660 WRITE( nout, fmt = 9990 )
'CSRC', matrix, csrcx, npcol
667 IF( incx.NE.1 .AND. incx.NE.mx )
THEN
668 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
669 WRITE( nout, fmt = 9989 ) matrix
670 WRITE( nout, fmt = 9988 )
'INC', matrix, incx, matrix, mx
677 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
681 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
682 WRITE( nout, fmt = 9987 ) matrix
683 WRITE( nout, fmt = * )
690 mpx = pb_numroc( mx, 1, imbx, mbx, myrow, rsrcx, nprow )
691 nqx = pb_numroc( nx, 1, inbx, nbx, mycol, csrcx, npcol )
692 iprex =
max( gapmul*nbx, mpx )
694 ipostx =
max( gapmul*nbx, nqx )
695 lldx =
max( 1, mpx ) + imidx
697 CALL pb_descinit2( descx, mx, nx, imbx, inbx, mbx, nbx, rsrcx,
698 $ csrcx, ictxt, lldx, info )
702 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0
705 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
706 WRITE( nout, fmt = 9987 ) matrix
707 WRITE( nout, fmt = * )
713 9999
FORMAT( 2x,
'>> Invalid matrix ', a1,
' descriptor type ', a5, a1,
714 $
': ', i6,
' should be ', i3,
'.' )
715 9998
FORMAT( 2x,
'>> Invalid matrix ', a1,
' row dimension ', a1, a1,
716 $
': ', i6,
' should be at least 1.' )
717 9997
FORMAT( 2x,
'>> Invalid matrix ', a1,
' column dimension ', a1,
718 $ a1,
': ', i6,
' should be at least 1.' )
719 9996
FORMAT( 2x,
'>> Invalid matrix ', a1,
' first row block size ',
720 $ a3, a1,
': ', i6,
' should be at least 1.' )
721 9995
FORMAT( 2x,
'>> Invalid matrix ', a1,
' first column block size ',
722 $ a3, a1,
': ', i6,
' should be at least 1.' )
723 9994
FORMAT( 2x,
'>> Invalid matrix ', a1,
' row block size ', a2, a1,
724 $
': ', i6,
' should be at least 1.' )
725 9993
FORMAT( 2x, '>> invalid matrix
', A1, ' column block
size ', A2,
726 $ A1,':
', I6, ' should be at least 1.
' )
727 9992 FORMAT( 2X, '>> invalid matrix
', A1, ' row process source:
' )
728 9991 FORMAT( 2X, '>> invalid matrix
', A1, ' column process source:' )
729 9990
FORMAT( 2x,
'>> ', a4, a1,
'= ', i6,
' should be >= -1 and < ',
731 9989
FORMAT( 2x,
'>> Invalid vector ', a1,
' increment:' )
732 9988
FORMAT( 2x,
'>> ', a3, a1,
'= ', i6,
' should be 1 or M', a1,
734 9987
FORMAT( 2x,
'>> Invalid matrix ', a1,
' descriptor: going on to ',
735 $
'next test case.' )
742 SUBROUTINE pmdescchk( ICTXT, NOUT, MATRIX, DESCA, DTA, MA, NA,
743 $ IMBA, INBA, MBA, NBA, RSRCA, CSRCA, MPA,
744 $ NQA, IPREA, IMIDA, IPOSTA, IGAP, GAPMUL,
754 INTEGER CSRCA, DTA, , ICTXT, IGAP, IMBA, IMIDA,
755 $ INBA, INFO, IPOSTA, IPREA, MA, MBA, MPA, NA,
932 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
933 $ , IMB_, INB_, LLD_, MB_, M_, NB_, N_,
935 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
936 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
937 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
938 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
941 INTEGER LLDA, MYCOL, MYROW, NPCOL, NPROW
960 IF( dta.NE.block_cyclic_2d_inb )
THEN
961 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
962 $
WRITE( nout, fmt = 9999 ) matrix,
'DTYPE', matrix, dta,
963 $ block_cyclic_2d_inb
970 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
971 $
WRITE( nout, fmt = 9998 ) matrix,
'M', matrix, ma
973 ELSE IF( na.LT.0 )
THEN
974 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
975 $
WRITE( nout, fmt
'N', matrix, na
982 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
983 $
WRITE( nout, fmt
'IMB', matrix, imba
985 ELSE IF( inba.LT.1 )
THEN
986 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
987 $
WRITE( nout, fmt = 9995 ) matrix,
'INB', matrix, inba
994 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
995 $
WRITE( nout, fmt = 9994 ) matrix,
'MB', matrix, mba
997 ELSE IF( nba.LT.1 )
THEN
998 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
999 $
WRITE( nout, fmt = 9993 ) matrix,
'NB', matrix, nba
1005 IF( rsrca.LT.-1 .OR. rsrca.GE.nprow )
THEN
1006 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
1007 WRITE( nout, fmt = 9992 ) matrix
1008 WRITE( nout, fmt = 9990 )
'RSRC', matrix, rsrca, nprow
1011 ELSE IF( csrca.LT.-1 .OR. csrca.GE.npcol )
THEN
1012 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
1013 WRITE( nout, fmt = 9991 ) matrix
1014 WRITE( nout
'CSRC', matrix, csrca, npcol
1021 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
1023 IF( info.NE.0 )
THEN
1025 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
1026 WRITE( nout, fmt = 9989 ) matrix
1027 WRITE( nout, fmt = * )
1034 mpa = pb_numroc( ma, 1, imba, mba, myrow, rsrca, nprow )
1035 nqa = pb_numroc( na, 1, inba, nba, mycol, csrca, npcol
1036 iprea =
max( gapmul*nba, mpa )
1038 iposta =
max( gapmul*nba, nqa )
1039 llda =
max( 1, mpa ) + imida
1042 $ csrca, ictxt, llda, info )
1046 CALL igsum2d( ictxt,
'All', '
', 1, 1, INFO, 1, -1, 0 )
1048.NE.
IF( INFO0 ) THEN
1049.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
1050 WRITE( NOUT, FMT = 9989 ) MATRIX
1051 WRITE( NOUT, FMT = * )
1057 9999 FORMAT( 2X, '>> invalid matrix
', A1, ' descriptor
type ', A5, A1,
1058 $ ':
', I6, ' should be
', I3, '.
' )
1059 9998 FORMAT( 2X, '>> invalid matrix
', A1, ' row dimension
', A1, A1,
1060 $ ':
', I6, ' should be at least 1.
' )
1061 9997 FORMAT( 2X, '>> invalid matrix
', A1, ' column dimension
', A1,
1062 $ A1, ':
', I6, ' should be at least 1.
' )
1063 9996 FORMAT( 2X, '>> invalid matrix
', A1, ' first row block
size ',
1064 $ A3, A1, ':
', I6, ' should be at least 1.
' )
1065 9995 FORMAT( 2X, '>> invalid matrix
', A1, ' first column block
size ',
1066 $ A3, A1,':
', I6, ' should be at least 1.
' )
1067 9994 FORMAT( 2X, '>> invalid matrix
', A1, ' row block
size ', A2, A1,
1068 $ ':
', I6, ' should be at least 1.
' )
1069 9993 FORMAT( 2X, '>> invalid matrix
', A1, ' column block
size ', A2,
1070 $ A1,':
', I6, ' should be at least 1.
' )
1071 9992 FORMAT( 2X, '>> invalid matrix
', A1, ' row process source:
' )
1072 9991 FORMAT( 2X, '>> invalid matrix
', A1, ' column process source:
' )
1073 9990 FORMAT( 2X, '>>
', A4, A1, '=
', I6, ' should be >= -1 and <
',
1075 9989
FORMAT( 2x,
'>> Invalid matrix ', a1,
' descriptor: going on to ',
1076 $
'next test case.' )
1083 DOUBLE PRECISION FUNCTION pdopbl2( SUBNAM, M, N, KKL, KKU )
1092 INTEGER kkl, kku, , n
1134 DOUBLE PRECISION one, six, two,
1135 PARAMETER ( one = 1.0d+0, six = 6.0d+0, two = 2.0d+0,
1142 DOUBLE PRECISION adds, ek, em, en, kl, ku, mults
1155 IF( m.LE.0 .OR. .NOT.(
lsamen( 2, subnam,
'PS' ) .OR.
1156 $
lsamen( 2, subnam,
'PD' ) .OR.
1157 $
lsamen( 2, subnam,
'PC' ) .OR.
lsamen( 2, subnam,
'PZ' ) ) )
1168 kl =
max( 0,
min( m-1, kkl ) )
1169 ku =
max( 0,
min( n-1, kku ) )
1178 IF(
lsamen( 3, c3,
'MV ' ) )
THEN
1180 IF(
lsamen( 2, c2,
'GE' ) )
THEN
1182 mults = em * ( en + one )
1189 ELSE IF(
lsamen( 2, c2,
'GB' ) )
THEN
1191 mults = em * ( en + one ) -
1192 $ ( em - one - kl ) * ( em - kl
1193 $ ( en - one - ku ) * ( en - ku ) / two
1194 adds = em * ( en + one ) -
1195 $ ( em - one - kl ) * ( em - kl ) / two -
1196 $ ( en - one - ku ) * ( en - ku ) / two
1198 ELSE IF(
lsamen( 2, c2,
'SY' ) .OR.
lsamen( 2, c2,
'SP' ) .OR.
1199 $
lsamen( 2, c2, 'he.OR.
' ) LSAMEN( 2, C2, 'hp
' ) )
1202 MULTS = EM * ( EM + ONE )
1205 ELSE IF( LSAMEN( 2, C2, 'sb.OR.
' )
1206 $ LSAMEN( 2, C2, 'hb
' ) ) THEN
1208 MULTS = EM * ( EM + ONE ) - ( EM - ONE - EK ) * ( EM - EK )
1209 ADDS = EM * EM - ( EM - ONE - EK ) * ( EM - EK )
1211 ELSE IF( LSAMEN( 2, C2, 'tr.OR.
' ) LSAMEN( 2, C2, 'tp
' ) )
1214 MULTS = EM * ( EM + ONE ) / TWO
1215 ADDS = ( EM - ONE ) * EM / TWO
1217 ELSE IF( LSAMEN( 2, C2, 'tb
' ) ) THEN
1219 MULTS = EM * ( EM + ONE ) / TWO -
1220 $ ( EM - EK - ONE ) * ( EM - EK ) / TWO
1221 ADDS = ( EM - ONE ) * EM / TWO -
1222 $ ( EM - EK - ONE ) * ( EM - EK ) / TWO
1230 ELSE IF( LSAMEN( 3, C3, 'sv
' ) ) THEN
1232 IF( LSAMEN( 2, C2, 'tr.OR.
' ) LSAMEN( 2, C2, 'tp
' ) ) THEN
1234 MULTS = EM * ( EM + ONE ) / TWO
1235 ADDS = ( EM - ONE ) * EM / TWO
1237 ELSE IF( LSAMEN( 2, C2, 'tb
' ) ) THEN
1239 MULTS = EM * ( EM + ONE ) / TWO -
1240 $ ( EM - EK - ONE ) * ( EM - EK ) / TWO
1241 ADDS = ( EM - ONE ) * EM / TWO -
1242 $ ( EM - EK - ONE ) * ( EM - EK ) / TWO
1250 ELSE IF( LSAMEN( 3, C3, 'r
' ) ) THEN
1252 IF( LSAMEN( 2, C2, 'ge
' ) ) THEN
1254 MULTS = EM * EN + MIN( EM, EN )
1257 ELSE IF( LSAMEN( 2, C2, 'sy.OR.
' ) LSAMEN( 2, C2, 'sp.OR.
' )
1258 $ LSAMEN( 2, C2, 'he.OR.
' ) LSAMEN( 2, C2, 'hp
' ) )
1261 MULTS = EM * ( EM + ONE ) / TWO + EM
1262 ADDS = EM * ( EM + ONE ) / TWO
1266 ELSE IF( LSAMEN( 3, C3, 'rc .OR.
' ) LSAMEN( 3, C3, 'ru
' ) ) THEN
1268 IF( LSAMEN( 2, C2, 'ge
' ) ) THEN
1270 MULTS = EM * EN + MIN( EM, EN )
1279 ELSE IF( LSAMEN( 3, C3, 'r2
' ) ) THEN
1280 IF( LSAMEN( 2, C2, 'sy.OR.
' ) LSAMEN( 2, C2, 'sp.OR.
' )
1281 $ LSAMEN( 2, C2, 'he.OR.
' ) LSAMEN( 2, C2, 'hp
' ) ) THEN
1283 MULTS = EM * ( EM + ONE ) + TWO * EM
1284 ADDS = EM * ( EM + ONE )
1297 IF( LSAME( C1, 's.OR.
' ) LSAME( C1, 'd
' ) ) THEN
1299 PDOPBL2 = MULTS + ADDS
1303 PDOPBL2 = SIX * MULTS + TWO * ADDS
1312 DOUBLE PRECISION FUNCTION PDOPBL3( SUBNAM, M, N, K )
1360 DOUBLE PRECISION ONE, SIX, TWO, ZERO
1361 PARAMETER ( ONE = 1.0D+0, SIX = 6.0D+0, TWO = 2.0D+0,
1368 DOUBLE PRECISION ADDS, EK, EM, EN, MULTS
1371 LOGICAL LSAME, LSAMEN
1372 EXTERNAL LSAME, LSAMEN
1381.LE..OR..NOT.
IF( M0 ( LSAMEN( 2, SUBNAM, 'ps.OR.
' )
1382 $ LSAMEN( 2, SUBNAM, 'pd.OR.
' ) LSAMEN( 2, SUBNAM, 'pc
' )
1383.OR.
$ LSAMEN( 2, SUBNAM, 'pz
' ) ) )
1403 IF( LSAMEN( 3, C3, 'mm
' ) ) THEN
1405 IF( LSAMEN( 2, C2, 'ge
' ) ) THEN
1407 MULTS = EM * EK * EN
1410 ELSE IF( LSAMEN( 2, C2, 'sy.OR.
' )
1411 $ LSAMEN( 2, C2, 'he' ) )
THEN
1416 mults = em * em * en
1419 mults = em * en * en
1423 ELSE IF(
lsamen( 2, c2,
'TR' ) )
THEN
1428 mults = en * em * ( em + one ) / two
1429 adds = en * em * ( em - one ) / two
1431 mults = em * en * ( en + one ) / two
1432 adds = em * en * ( en - one ) / two
1441 ELSE IF(
lsamen( 3, c3,
'RK ' ) )
THEN
1443 IF(
lsamen( 2, c2,
'SY' ) .OR.
1444 $
lsamen( 2, c2,
'HE' ) )
THEN
1446 mults = ek * em *( em + one ) / two
1447 adds = ek * em *( em + one ) / two
1454 ELSE IF(
lsamen( 3, c3,
'R2K' ) )
THEN
1456 IF(
lsamen( 2, c2, 'sy.OR.
' )
1457 $ LSAMEN( 3, C2, 'he
' ) ) THEN
1459 MULTS = EK * EM * EM
1460 ADDS = EK * EM * EM + EM
1467 ELSE IF( LSAMEN( 4, SUBNAM( 3:6 ), 'trsm
' ) ) THEN
1470 MULTS = EN * EM * ( EM + ONE ) / TWO
1471 ADDS = EN * EM * ( EM - ONE ) / TWO
1473 MULTS = EM * EN * ( EN + ONE ) / TWO
1474 ADDS = EM * EN * ( EN - ONE ) / TWO
1481 ELSE IF( LSAMEN( 3, C3, 'add
' ) ) THEN
1483 IF( LSAMEN( 2, C2, 'ge
' ) ) THEN
1488 ELSE IF( LSAMEN( 2, C2, 'tr
' ) ) THEN
1494 MULTS = EM * ( TWO * EN - EM + ONE )
1495 ADDS = EM * ( EM + ONE ) / TWO + EM * ( EN - EM )
1497 MULTS = EN * ( EN + ONE )
1498 ADDS = EN * ( EN + ONE ) / TWO
1502 MULTS = EN * ( TWO * EM - EN + ONE )
1503 ADDS = EN * ( EN + ONE ) / TWO + EN * ( EM - EN )
1505 MULTS = EM * ( EM + ONE )
1506 ADDS = EM * ( EM + ONE ) / TWO
1522 IF( LSAME( C1, 's.OR.
' ) LSAME( C1, 'd
' ) ) THEN
1524 PDOPBL3 = MULTS + ADDS
1528 PDOPBL3 = SIX * MULTS + TWO * ADDS
1537 SUBROUTINE PXERBLA( ICTXT, SRNAME, INFO )
1548 CHARACTER*(*) SRNAME
1581 INTEGER MYCOL, MYROW, NPCOL, NPROW
1584 EXTERNAL BLACS_GRIDINFO
1588 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
1590 WRITE( *, FMT = 9999 ) MYROW, MYCOL, SRNAME, INFO
1592 9999 FORMAT( '{
', I5, ',
', I5, '}: on entry to
', A,
1593 $ ' parameter', I4, ' had an illegal
value' )
1600 LOGICAL FUNCTION LSAME( CA, CB )
1630 INTEGER INTA, INTB, ZCODE
1642 ZCODE = ICHAR( 'z
' )
1652.EQ..OR..EQ.
IF( ZCODE90 ZCODE122 ) THEN
1657.GE..AND..LE.
IF( INTA97 INTA122 ) INTA = INTA - 32
1658.GE..AND..LE.
IF( INTB97 INTB122 ) INTB = INTB - 32
1660.EQ..OR..EQ.
ELSE IF( ZCODE233 ZCODE169 ) THEN
1665.GE..AND..LE..OR.
IF( INTA129 INTA137
1666.GE..AND..LE..OR.
$ INTA145 INTA153
1667.GE..AND..LE.
$ INTA162 INTA169 ) INTA = INTA + 64
1668.GE..AND..LE..OR.
IF( INTB129 INTB137
1669.GE..AND..LE..OR.
$ INTB145 INTB153
1670.GE..AND..LE.
$ INTB162 INTB169 ) INTB = INTB + 64
1672.EQ..OR..EQ.
ELSE IF( ZCODE218 ZCODE250 ) THEN
1677.GE..AND..LE.
IF( INTA225 INTA250 ) INTA = INTA - 32
1678.GE..AND..LE.
IF( INTB225 INTB250 ) INTB = INTB - 32
1680.EQ.
LSAME = INTAINTB
1687 LOGICAL FUNCTION LSAMEN( N, CA, CB )
1695 CHARACTER*( * ) CA, CB
1734.LT..OR..LT.
IF( LEN( CA )N LEN( CB )N )
1743.NOT.
IF( LSAME( CA( I: I ), CB( I: I ) ) )
1755 SUBROUTINE ICOPY( N, SX, INCX, SY, INCY )
1763 INTEGER INCX, INCY, N
1766 INTEGER SX( * ), SY( * )
1796 INTEGER I, IX, IY, M, MP1
1805.EQ..AND..EQ.
IF( INCX1 INCY1 )
1813 $ IX = ( -N+1 )*INCX + 1
1815 $ IY = ( -N+1 )*INCY + 1
1840 SY( I+1 ) = SX( I+1 )
1841 SY( I+2 ) = SX( I+2 )
1842 SY( I+3 ) = SX( I+3 )
1843 SY( I+4 ) = SX( I+4 )
1844 SY( I+5 ) = SX( I+5 )
1845 SY( I+6 ) = SX( I+6 )
1852 INTEGER FUNCTION PB_NOABORT( CINFO )
1883 INTEGER INFO, NBLOG, NOUT
1885 COMMON /INFOC/INFO, NBLOG
1886 COMMON /PBERRORC/NOUT, ABRTFLG
1902 SUBROUTINE PB_INFOG2L( I, J, DESC, NPROW, NPCOL, MYROW, MYCOL, II,
1911 INTEGER I, II, J, JJ, MYCOL, MYROW, NPCOL, NPROW, PCOL,
2050 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2051 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2053 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
2054 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
2055 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
2056 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
2059 INTEGER CSRC, I1, ILOCBLK, IMB, INB, J1, MB, MYDIST,
2063 INTEGER DESC2( DLEN_ )
2066 EXTERNAL PB_DESCTRANS
2072 CALL PB_DESCTRANS( DESC, DESC2 )
2075 PROW = DESC2( RSRC_ )
2079.EQ..OR..EQ.
IF( ( PROW-1 )( NPROW1 ) ) THEN
2083.LE.
ELSE IF( IIMB ) THEN
2087.EQ.
IF( MYROWPROW ) THEN
2100.EQ.
IF( MYROWRSRC ) THEN
2102 NBLOCKS = ( I - IMB - 1 ) / MB + 1
2103 PROW = PROW + NBLOCKS
2104 PROW = PROW - ( PROW / NPROW ) * NPROW
2106 ILOCBLK = NBLOCKS / NPROW
2108.GT.
IF( ILOCBLK0 ) THEN
2109.GE.
IF( ( ILOCBLK*NPROW )NBLOCKS ) THEN
2110.EQ.
IF( MYROWPROW ) THEN
2111 II = I + ( ILOCBLK - NBLOCKS ) * MB
2113 II = IMB + ( ILOCBLK - 1 ) * MB + 1
2116 II = IMB + ILOCBLK * MB + 1
2125 NBLOCKS = ( I1 - 1 ) / MB + 1
2126 PROW = PROW + NBLOCKS
2127 PROW = PROW - ( PROW / NPROW ) * NPROW
2129 MYDIST = MYROW - RSRC
2131 $ MYDIST = MYDIST + NPROW
2133 ILOCBLK = NBLOCKS / NPROW
2135.GT.
IF( ILOCBLK0 ) THEN
2136 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPROW
2137.LT.
IF( MYDIST0 ) THEN
2138 II = MB + ILOCBLK * MB + 1
2140.EQ.
IF( MYROWPROW ) THEN
2141 II = I1 + ( ILOCBLK - NBLOCKS + 1 ) * MB
2143 II = ILOCBLK * MB + 1
2147 MYDIST = MYDIST - NBLOCKS
2148.LT.
IF( MYDIST0 ) THEN
2150.EQ.
ELSE IF( MYROWPROW ) THEN
2151 II = I1 + ( 1 - NBLOCKS ) * MB
2161 PCOL = DESC2( CSRC_ )
2165.EQ..OR..EQ.
IF( ( PCOL-1 )( NPCOL1 ) ) THEN
2169.LE.
ELSE IF( JINB ) THEN
2173.EQ.
IF( MYCOLPCOL ) THEN
2186.EQ.
IF( MYCOLCSRC ) THEN
2188 NBLOCKS = ( J - INB - 1 ) / NB + 1
2189 PCOL = PCOL + NBLOCKS
2190 PCOL = PCOL - ( PCOL / NPCOL ) * NPCOL
2192 ILOCBLK = NBLOCKS / NPCOL
2194.GT.
IF( ILOCBLK0 ) THEN
2195.GE.
IF( ( ILOCBLK*NPCOL )NBLOCKS ) THEN
2196.EQ.
IF( MYCOLPCOL ) THEN
2197 JJ = J + ( ILOCBLK - NBLOCKS ) * NB
2199 JJ = INB + ( ILOCBLK - 1 ) * NB + 1
2202 JJ = INB + ILOCBLK * NB + 1
2211 NBLOCKS = ( J1 - 1 ) / NB + 1
2212 PCOL = PCOL + NBLOCKS
2213 PCOL = PCOL - ( PCOL / NPCOL ) * NPCOL
2215 MYDIST = MYCOL - CSRC
2217 $ MYDIST = MYDIST + NPCOL
2219 ILOCBLK = NBLOCKS / NPCOL
2221.GT.
IF( ILOCBLK0 ) THEN
2222 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPCOL
2223.LT.
IF( MYDIST0 ) THEN
2224 JJ = NB + ILOCBLK * NB + 1
2226.EQ.
IF( MYCOLPCOL ) THEN
2227 JJ = J1 + ( ILOCBLK - NBLOCKS + 1 ) * NB
2229 JJ = ILOCBLK * NB + 1
2233 MYDIST = MYDIST - NBLOCKS
2234.LT.
IF( MYDIST0 ) THEN
2236.EQ.
ELSE IF( MYCOLPCOL ) THEN
2237 JJ = J1 + ( 1 - NBLOCKS ) * NB
2251 SUBROUTINE PB_AINFOG2L( M, N, I, J, DESC, NPROW, NPCOL, MYROW,
2252 $ MYCOL, IMB1, INB1, MP, NQ, II, JJ, PROW,
2253 $ PCOL, RPROW, RPCOL )
2261 INTEGER I, II, IMB1, INB1, J, JJ, M, MP, MYCOL, MYROW,
2262 $ N, NPCOL, NPROW, NQ, PCOL, PROW, RPCOL, RPROW
2446 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
2447 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
2449 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
2450 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
2451 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
2452 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
2455 INTEGER CSRC, I1, ILOCBLK, J1, M1, MB, MYDIST, N1, NB,
2459 INTEGER DESC2( DLEN_ )
2462 EXTERNAL PB_DESCTRANS
2471 CALL PB_DESCTRANS( DESC, DESC2 )
2474 IMB1 = DESC2( IMB_ )
2475 RSRC = DESC2( RSRC_ )
2477.EQ..OR..EQ.
IF( ( RSRC-1 )( NPROW1 ) ) THEN
2482 $ IMB1 = ( ( -IMB1 ) / MB + 1 ) * MB + IMB1
2483 IMB1 = MIN( IMB1, M )
2492.LE.
IF( IIMB1 ) THEN
2496.EQ.
IF( MYROWPROW ) THEN
2507 NBLOCKS = I1 / MB + 1
2508 PROW = RSRC + NBLOCKS
2509 PROW = PROW - ( PROW / NPROW ) * NPROW
2511.EQ.
IF( MYROWRSRC ) THEN
2513 ILOCBLK = NBLOCKS / NPROW
2515.GT.
IF( ILOCBLK0 ) THEN
2516.GE.
IF( ( ILOCBLK*NPROW )NBLOCKS ) THEN
2517.EQ.
IF( MYROWPROW ) THEN
2518 II = I + ( ILOCBLK - NBLOCKS ) * MB
2520 II = IMB1 + ( ILOCBLK - 1 ) * MB + 1
2523 II = IMB1 + ILOCBLK * MB + 1
2531 MYDIST = MYROW - RSRC
2533 $ MYDIST = MYDIST + NPROW
2535 ILOCBLK = NBLOCKS / NPROW
2537.GT.
IF( ILOCBLK0 ) THEN
2538 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPROW
2539.LT.
IF( MYDIST0 ) THEN
2540 II = ( ILOCBLK + 1 ) * MB + 1
2541.EQ.
ELSE IF( MYROWPROW ) THEN
2542 II = I1 + ( ILOCBLK - NBLOCKS + 1 ) * MB + 1
2544 II = ILOCBLK * MB + 1
2547 MYDIST = MYDIST - NBLOCKS
2548.LT.
IF( MYDIST0 ) THEN
2550.EQ.
ELSE IF( MYROWPROW ) THEN
2551 II = I1 + ( 1 - NBLOCKS ) * MB + 1
2558 IMB1 = NBLOCKS * MB - I1
2564.LE.
IF( MIMB1 ) THEN
2566.EQ.
IF( MYROWPROW ) THEN
2575 NBLOCKS = M1 / MB + 1
2577.EQ.
IF( MYROWPROW ) THEN
2578 ILOCBLK = NBLOCKS / NPROW
2579.GT.
IF( ILOCBLK0 ) THEN
2580.GT.
IF( ( NBLOCKS - ILOCBLK * NPROW )0 ) THEN
2581 MP = IMB1 + ILOCBLK * MB
2583 MP = M + MB * ( ILOCBLK - NBLOCKS )
2589 MYDIST = MYROW - PROW
2591 $ MYDIST = MYDIST + NPROW
2592 ILOCBLK = NBLOCKS / NPROW
2593.GT.
IF( ILOCBLK0 ) THEN
2594 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPROW
2595.LT.
IF( MYDIST0 ) THEN
2596 MP = ( ILOCBLK + 1 ) * MB
2597.GT.
ELSE IF( MYDIST0 ) THEN
2600 MP = M1 + MB * ( ILOCBLK - NBLOCKS + 1 )
2603 MYDIST = MYDIST - NBLOCKS
2604.LT.
IF( MYDIST0 ) THEN
2606.GT.
ELSE IF( MYDIST0 ) THEN
2609 MP = M1 + MB * ( 1 - NBLOCKS )
2616 IMB1 = MIN( IMB1, M )
2617 RPROW = MYROW - PROW
2619 $ RPROW = RPROW + NPROW
2624 INB1 = DESC2( INB_ )
2625 CSRC = DESC2( CSRC_ )
2627.EQ..OR..EQ.
IF( ( CSRC-1 )( NPCOL1 ) ) THEN
2632 $ INB1 = ( ( -INB1 ) / NB + 1 ) * NB + INB1
2633 INB1 = MIN( INB1, N )
2642.LE.
IF( JINB1 ) THEN
2646.EQ.
IF( MYCOLPCOL ) THEN
2657 NBLOCKS = J1 / NB + 1
2658 PCOL = CSRC + NBLOCKS
2659 PCOL = PCOL - ( PCOL / NPCOL ) * NPCOL
2661.EQ.
IF( MYCOLCSRC ) THEN
2663 ILOCBLK = NBLOCKS / NPCOL
2665.GT.
IF( ILOCBLK0 ) THEN
2666.GE.
IF( ( ILOCBLK*NPCOL )NBLOCKS ) THEN
2667.EQ.
IF( MYCOLPCOL ) THEN
2668 JJ = J + ( ILOCBLK - NBLOCKS ) * NB
2670 JJ = INB1 + ( ILOCBLK - 1 ) * NB + 1
2673 JJ = INB1 + ILOCBLK * NB + 1
2681 MYDIST = MYCOL - CSRC
2683 $ MYDIST = MYDIST + NPCOL
2685 ILOCBLK = NBLOCKS / NPCOL
2687.GT.
IF( ILOCBLK0 ) THEN
2688 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPCOL
2689.LT.
IF( MYDIST0 ) THEN
2690 JJ = ( ILOCBLK + 1 ) * NB + 1
2691.EQ.
ELSE IF( MYCOLPCOL ) THEN
2692 JJ = J1 + ( ILOCBLK - NBLOCKS + 1 ) * NB + 1
2694 JJ = ILOCBLK * NB + 1
2697 MYDIST = MYDIST - NBLOCKS
2698.LT.
IF( MYDIST0 ) THEN
2700.EQ.
ELSE IF( MYCOLPCOL ) THEN
2701 JJ = J1 + ( 1 - NBLOCKS ) * NB + 1
2708 INB1 = NBLOCKS * NB - J1
2714.LE.
IF( NINB1 ) THEN
2716.EQ.
IF( MYCOLPCOL ) THEN
2725 NBLOCKS = N1 / NB + 1
2727.EQ.
IF( MYCOLPCOL ) THEN
2728 ILOCBLK = NBLOCKS / NPCOL
2729.GT.
IF( ILOCBLK0 ) THEN
2730.GT.
IF( ( NBLOCKS - ILOCBLK * NPCOL )0 ) THEN
2731 NQ = INB1 + ILOCBLK * NB
2733 NQ = N + NB * ( ILOCBLK - NBLOCKS )
2739 MYDIST = MYCOL - PCOL
2741 $ MYDIST = MYDIST + NPCOL
2742 ILOCBLK = NBLOCKS / NPCOL
2743.GT.
IF( ILOCBLK0 ) THEN
2744 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPCOL
2745.LT.
IF( MYDIST0 ) THEN
2746 NQ = ( ILOCBLK + 1 ) * NB
2747.GT.
ELSE IF( MYDIST0 ) THEN
2750 NQ = N1 + NB * ( ILOCBLK - NBLOCKS + 1 )
2753 MYDIST = MYDIST - NBLOCKS
2754.LT.
IF( MYDIST0 ) THEN
2756.GT.
ELSE IF( MYDIST0 ) THEN
2759 NQ = N1 + NB * ( 1 - NBLOCKS )
2766 INB1 = MIN( INB1, N )
2767 RPCOL = MYCOL - PCOL
2769 $ RPCOL = RPCOL + NPCOL
2778 INTEGER FUNCTION PB_NUMROC( N, I, INB, NB, PROC, SRCPROC, NPROCS )
2786 INTEGER I, INB, N, NB, NPROCS, PROC, SRCPROC
2838 INTEGER I1, ILOCBLK, INB1, MYDIST, N1, NBLOCKS,
2843.EQ..OR..EQ.
IF( ( SRCPROC-1 )( NPROCS1 ) ) THEN
2862 NBLOCKS = I1 / NB + 1
2863 SRCPROC1 = SRCPROC + NBLOCKS
2864 SRCPROC1 = SRCPROC1 - ( SRCPROC1 / NPROCS ) * NPROCS
2865 INB1 = NBLOCKS*NB - I1
2872.LE.
IF( NINB1 ) THEN
2873.EQ.
IF( PROCSRCPROC1 ) THEN
2882 NBLOCKS = N1 / NB + 1
2884.EQ.
IF( PROCSRCPROC1 ) THEN
2885 ILOCBLK = NBLOCKS / NPROCS
2886.GT.
IF( ILOCBLK0 ) THEN
2887.GT.
IF( ( NBLOCKS - ILOCBLK * NPROCS )0 ) THEN
2888 PB_NUMROC = INB1 + ILOCBLK * NB
2890 PB_NUMROC = N + NB * ( ILOCBLK - NBLOCKS )
2896 MYDIST = PROC - SRCPROC1
2898 $ MYDIST = MYDIST + NPROCS
2899 ILOCBLK = NBLOCKS / NPROCS
2900.GT.
IF( ILOCBLK0 ) THEN
2901 MYDIST = MYDIST - NBLOCKS + ILOCBLK * NPROCS
2902.LT.
IF( MYDIST0 ) THEN
2903 PB_NUMROC = ( ILOCBLK + 1 ) * NB
2904.GT.
ELSE IF( MYDIST0 ) THEN
2905 PB_NUMROC = ILOCBLK * NB
2907 PB_NUMROC = N1 + NB * ( ILOCBLK - NBLOCKS + 1 )
2910 MYDIST = MYDIST - NBLOCKS
2911.LT.
IF( MYDIST0 ) THEN
2913.GT.
ELSE IF( MYDIST0 ) THEN
2916 PB_NUMROC = N1 + NB * ( 1 - NBLOCKS )
2926 SUBROUTINE PB_BOOT()
2946 PARAMETER ( NTIMER = 64 )
2947 DOUBLE PRECISION STARTFLAG, ZERO
2948 PARAMETER ( STARTFLAG = -5.0D+0, ZERO = 0.0D+0 )
2955 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
2956 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
2957 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
2965 CPUSTART( I ) = STARTFLAG
2966 WALLSTART( I ) = STARTFLAG
2975 SUBROUTINE PB_TIMER( I )
3009 PARAMETER ( NTIMER = 64 )
3010 DOUBLE PRECISION STARTFLAG
3011 PARAMETER ( STARTFLAG = -5.0D+0 )
3014 DOUBLE PRECISION DCPUTIME00, DWALLTIME00
3015 EXTERNAL DCPUTIME00, DWALLTIME00
3019 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
3020 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
3021 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
3030.EQ.
IF( WALLSTART( I )STARTFLAG ) THEN
3034 WALLSTART( I ) = DWALLTIME00()
3035 CPUSTART( I ) = DCPUTIME00()
3041 CPUSEC( I ) = CPUSEC( I ) + DCPUTIME00() - CPUSTART( I )
3042 WALLSEC( I ) = WALLSEC( I ) + DWALLTIME00() - WALLSTART( I )
3043 WALLSTART( I ) = STARTFLAG
3053 SUBROUTINE PB_ENABLE()
3073 PARAMETER ( NTIMER = 64 )
3077 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
3078 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
3079 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
3091 SUBROUTINE PB_DISABLE()
3110 PARAMETER ( NTIMER = 64 )
3114 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
3115 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
3116 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
3128 DOUBLE PRECISION FUNCTION PB_INQUIRE( TMTYPE, I )
3164 PARAMETER ( NTIMER = 64 )
3165 DOUBLE PRECISION ERRFLAG
3166 PARAMETER ( ERRFLAG = -1.0D+0 )
3169 DOUBLE PRECISION TIME
3173 DOUBLE PRECISION DCPUTIME00, DWALLTIME00
3174 EXTERNAL DCPUTIME00, DWALLTIME00, LSAME
3178 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
3179 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
3180 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
3184 IF( LSAME( TMTYPE, 'w
' ) ) THEN
3188.EQ.
IF( DWALLTIME00()ERRFLAG ) THEN
3194.EQ.
IF( DCPUTIME00()ERRFLAG ) THEN
3209 SUBROUTINE PB_COMBINE( ICTXT, SCOPE, OP, TMTYPE, N, IBEG,
3218 CHARACTER*1 OP, SCOPE, TMTYPE
3219 INTEGER IBEG, ICTXT, N
3222 DOUBLE PRECISION TIMES( N )
3249 PARAMETER ( NTIMER = 64 )
3250 DOUBLE PRECISION ERRFLAG
3251 PARAMETER ( ERRFLAG = -1.0D+0 )
3259 EXTERNAL DGAMX2D, DGAMN2D, DGSUM2D, PB_TOPGET
3263 DOUBLE PRECISION DCPUTIME00, DWALLTIME00
3264 EXTERNAL DCPUTIME00, DWALLTIME00, LSAME
3268 DOUBLE PRECISION CPUSEC( NTIMER ), CPUSTART( NTIMER ),
3269 $ WALLSEC( NTIMER ), WALLSTART( NTIMER )
3270 COMMON /SLTIMER00/ CPUSEC, WALLSEC, CPUSTART, WALLSTART, DISABLED
3281 IF( LSAME( TMTYPE, 'w
' ) ) THEN
3286.EQ.
IF( DWALLTIME00()ERRFLAG ) THEN
3288 TIMES( I ) = ERRFLAG
3293 TIMES( I ) = WALLSEC( IBEG + I - 1 )
3297.EQ.
IF( DCPUTIME00()ERRFLAG ) THEN
3299 TIMES( I ) = ERRFLAG
3304 TIMES( I ) = CPUSEC( IBEG + I - 1 )
3311.EQ.
IF( OP'>
' ) THEN
3312 CALL PB_TOPGET( ICTXT, 'combine
', SCOPE, TOP )
3313 CALL DGAMX2D( ICTXT, SCOPE, TOP, N, 1, TIMES, N, -1, -1,
3315.EQ.
ELSE IF( OP'<
' ) THEN
3316 CALL PB_TOPGET( ICTXT, 'combine
', SCOPE, TOP )
3317 CALL DGAMN2D( ICTXT, SCOPE, TOP, N, 1, TIMES, N, -1, -1,
3319.EQ.
ELSE IF( OP'+' )
THEN
3320 CALL pb_topget( ictxt,
'Combine', scope, top )
3321 CALL dgsum2d( ictxt, scope, top, n, 1, times, n, -1, 0 )
3323 CALL pb_topget( ictxt,
'Combine', scope, top )
3324 CALL dgamx2d( ictxt, scope, top, n, 1, times, n, -1, -1,
3335 SUBROUTINE pb_chkmat( ICTXT, M, MPOS0, N, NPOS0, IA, JA, DESCA,
3344 INTEGER DPOS0, IA, ICTXT, INFO, JA, M, MPOS0, N, NPOS0
3413 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3414 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3416 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
3417 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3418 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3419 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3420 INTEGER DESCMULT, BIGNUM
3421 PARAMETER ( DESCMULT = 100, bignum = descmult*descmult )
3424 INTEGER DPOS, IAPOS, JAPOS, MP, MPOS, MYCOL, ,
3425 $ npcol, npos, nprow, nq
3428 INTEGER DESCA2( DLEN_ )
3450 IF( info.GE.0 )
THEN
3452 ELSE IF( info.LT.-descmult )
THEN
3455 info = -info * descmult
3461 mpos = mpos0 * descmult
3462 npos = npos0 * descmult
3463 iapos = ( dpos0 - 2 ) * descmult
3464 japos = ( dpos0 - 1 ) * descmult
3465 dpos = dpos0 * descmult
3474 $ info =
min( info, mpos )
3476 $ info =
min( info, npos )
3478 $ info =
min( info, iapos )
3480 $ info =
min( info, japos )
3481 IF( desca2( dtype_ ).NE.block_cyclic_2d_inb )
3482 $ info =
min( info, dpos + dtype_ )
3483 IF( desca2( imb_ ).LT.1 )
3484 $ info =
min( info, dpos + imb_ )
3485 IF( desca2( inb_ ).LT.1 )
3486 $ info =
min( info, dpos + inb_ )
3487 IF( desca2( mb_ ).LT.1 )
3488 $ info =
min( info, dpos + mb_ )
3489 IF( desca2( nb_ ).LT.1 )
3490 $ info =
min( info, dpos + nb_ )
3491 IF( desca2( rsrc_ ).LT.-1 .OR. desca2( rsrc_ ).GE.nprow )
3492 $ info =
min( info, dpos + rsrc_ )
3493 IF( desca2( csrc_ ).LT.-1 .OR. desca2( csrc_ ).GE.npcol )
3494 $ info =
min( info, dpos + csrc_ )
3495 IF( desca2( ctxt_ ).NE.ictxt )
3496 $ info =
min( info, dpos + ctxt_ )
3498 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
3502 IF( desca2( m_ ).LT.0 )
3503 $ info =
min( info, dpos + m_ )
3504 IF( desca2( n_ ).LT.0 )
3505 $ info =
min( info, dpos + n_ )
3506 IF( desca2( lld_ ).LT.1 )
3507 $ info =
min( info, dpos + lld_ )
3513 mp = pb_numroc( desca2( m_ ), 1, desca2( imb_ ), desca2( mb_ ),
3514 $ myrow, desca2( rsrc_ ), nprow )
3516 IF( desca2( m_ ).LT.1 )
3517 $ info =
min( info, dpos + m_ )
3518 IF( desca2( n_ ).LT.1 )
3519 $ info =
min( info, dpos + n_ )
3520 IF( ia.GT.desca2( m_ ) )
3521 $ info =
min( info, iapos )
3522 IF( ja.GT.desca2( n_ ) )
3523 $ info =
min( info, japos )
3524 IF( ia+m-1.GT.desca2( m_ ) )
3525 $ info =
min( info, mpos )
3526 IF( ja+n-1.GT.desca2( n_ ) )
3527 $ info =
min( info, npos )
3529 IF( desca2( lld_ ).LT.
max( 1, mp ) )
THEN
3530 nq = pb_numroc( desca2( n_ ), 1, desca2( inb_ ),
3533 IF( desca2( lld_ ).LT.1 )
THEN
3534 info =
min( info, dpos + lld_ )
3535 ELSE IF( nq.GT.0 )
THEN
3536 info =
min( info, dpos + lld_ )
3545 IF( info.EQ.bignum )
THEN
3547 ELSE IF( mod( info, descmult ).EQ.0 )
THEN
3548 info = -( info / descmult )
3566 INTEGER ( * ), DESCOUT( * )
3712 INTEGER BLOCK_CYCLIC_2D, CSRC1_
3713, MB1_, N1_, NB1_, RSRC1_
3714 PARAMETER ( BLOCK_CYCLIC_2D = 1, dlen1_ = 9, dtype1_ = 1,
3716 $ nb1_ = 6, rsrc1_ = 7, csrc1_ = 8, lld1_ = 9 )
3717 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3718 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3720PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
3721 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3722 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3723 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3730 IF( descin( dtype_ ).EQ.block_cyclic_2d )
THEN
3731 descout( dtype_ ) = block_cyclic_2d_inb
3732 descout( ctxt_ ) = descin
3733 descout( m_ ) = descin( m1_ )
3734 descout( n_ ) = descin( n1_
3736 descout( inb_ ) = descin( nb1_ )
3737 descout( mb_ ) = descin( mb1_ )
3738 descout( nb_ ) = descin( nb1_ )
3739 descout( rsrc_ ) = descin( rsrc1_ )
3740 descout( csrc_ ) = descin( csrc1_ )
3741 descout( lld_ ) = descin( lld1_ )
3742 ELSE IF( descin( dtype_ ).EQ.block_cyclic_2d_inb )
THEN
3744 descout( i ) = descin( i )
3747 descout( dtype_ ) = descin( 1 )
3748 descout( ctxt_ ) = descin( 2 )
3755 descout( rsrc_ ) = 0
3756 descout( csrc_ ) = 0
3774 INTEGER CSRC, CTXT, IMB, INB, LLD, M, MB, N, , RSRC
3903 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
3904 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
3906 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
3907 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
3908 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
3909 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
3913 desc( dtype_ ) = block_cyclic_2d_inb
3914 desc( ctxt_ ) = ctxt
3921 desc( rsrc_ ) = rsrc
3922 desc( csrc_ ) = csrc
3939 INTEGER CSRC, , IMB, INB, INFO, LLD, M, MB, N, NB,
4088 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
4089 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
4091 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, dlen_ = 11,
4092 $ dtype_ = 1, ctxt_ = 2, m_ = 3, n_ = 4,
4093 $ imb_ = 5, inb_ = 6, mb_ = 7, nb_ = 8,
4094 $ rsrc_ = 9, csrc_ = 10, lld_ = 11 )
4097 INTEGER LLDMIN, MP, MYCOL, MYROW, NPCOL, NPROW
4118 ELSE IF( n.LT.0 )
THEN
4120 ELSE IF( imb.LT.1 )
THEN
4122 ELSE IF( inb.LT.1 )
THEN
4124 ELSE IF( mb.LT.1 )
THEN
4126 ELSE IF( nb.LT.1 )
THEN
4128 ELSE IF( rsrc.LT.-1 .OR. rsrc.GE.nprow )
THEN
4130 ELSE IF( csrc.LT.-1 .OR. csrc.GE.npcol )
THEN
4132 ELSE IF( nprow.EQ.-1 )
THEN
4138 IF( info.EQ.0 )
THEN
4140 IF( pb_numroc( n, 1, inb, nb, mycol, csrc, npcol ).GT.0 )
THEN
4141 lldmin = max( 1, mp )
4150 $
CALL pxerbla( ctxt,
'PB_DESCINIT2', -info )
4152 desc( dtype_ ) = block_cyclic_2d_inb
4153 desc( ctxt_ ) = ctxt
4154 desc( m_ ) = max( 0, m )
4155 desc( n_ ) = max( 0, n )
4156 desc( imb_ ) = max( 1, imb )
4157 desc( inb_ ) = max( 1, inb )
4158 desc( mb_ ) = max( 1, mb )
4159 desc( nb_ ) = max( 1, nb )
4160 desc( rsrc_ ) = max( -1, min( rsrc, nprow-1 ) )
4161 desc( csrc_ ) = max( -1, min( csrc, npcol-1 ) )
4162 desc( lld_ ) = max( lld, lldmin )
4169 SUBROUTINE pb_binfo( OFFD, M, N, IMB1, INB1, MB, NB, MRROW, MRCOL,
4170 $ LCMT00, MBLKS, NBLKS, IMBLOC, INBLOC, LMBLOC,
4171 $ LNBLOC, ILOW, LOW, IUPP, UPP )
4179 INTEGER ILOW, IMB1, , INB1, INBLOC, IUPP, LCMT00,
4180 $ LMBLOC, LNBLOC, LOW, M, , MBLKS, MRCOL,
4181 $ mrrow, n, nb, nblks, offd, upp
4321 IF( m.LE.0 .OR. n.LE.0 )
THEN
4323 IF( mrrow.GT.0 )
THEN
4326 iupp = max( 0, imb1 - 1 )
4332 IF( mrcol.GT.0 )
THEN
4335 ilow = min( 0, 1 - inb1 )
4341 lcmt00 = lcmt00 + ( low - ilow + mrcol * nb ) -
4342 $ ( iupp - upp + mrrow * mb )
4348 IF( mrrow.GT.0 )
THEN
4350 imbloc = min( m, mb )
4352 lcmt00 = lcmt00 - ( imb1 - mb + mrrow * mb )
4353 mblks = ( m - 1 ) / mb + 1
4354 lmbloc = m - ( m / mb ) * mb
4358 IF( mrcol.GT.0 )
THEN
4360 inbloc = min( n, nb )
4362 lcmt00 = lcmt00 + inb1 - nb + mrcol * nb
4363 nblks = ( n - 1 ) / nb + 1
4364 lnbloc = n - ( n / nb ) * nb
4373 IF( tmp1.GT.0 )
THEN
4377 nblks = ( tmp1 - 1 ) / nb + 2
4378 lnbloc = tmp1 - ( tmp1 / nb ) * nb
4396 IF( tmp1.GT.0 )
THEN
4400 mblks = ( tmp1 - 1 ) / mb + 2
4401 lmbloc = tmp1 - ( tmp1 / mb ) * mb
4412 IF( mrcol.GT.0 )
THEN
4414 inbloc = min( n, nb )
4416 lcmt00 = lcmt00 + inb1 - nb + mrcol * nb
4417 nblks = ( n - 1 ) / nb + 1
4418 lnbloc = n - ( n / nb ) * nb
4427 IF( tmp1.GT.0 )
THEN
4431 nblks = ( tmp1 - 1 ) / nb + 2
4432 lnbloc = tmp1 - ( tmp1 / nb ) * nb
4492 common /infoc/info, nblog
4504 $ ILOCBLK, ILOCOFF, MYDIST )
4512 INTEGER I, ILOCBLK, ILOCOFF, INB, MYDIST, MYROC, NB,
4577 INTEGER ITMP, NBLOCKS, PROC
4583 if( srcproc.LT.0 )
THEN
4595 nblocks = ( itmp - 1 ) / nb + 1
4597 ilocoff = itmp - 1 - ( nblocks - 1 ) * nb
4604 mydist = myroc - proc
4606 $ mydist = mydist + nprocs
4617 nblocks = ( itmp - 1 ) / nb + 1
4618 proc = proc + nblocks
4619 proc = proc - ( proc / nprocs ) * nprocs
4620 ilocblk = nblocks / nprocs
4622 IF( ( ilocblk*nprocs ).LT.( mydist-nblocks ) )
4623 $ ilocblk = ilocblk + 1
4626 $ ilocoff = itmp - 1 - ( nblocks - 1 ) * nb
4638 $ INBLOC, MB, NB, RSRC, CSRC, NPROW, NPCOL,
4648 INTEGER CSRC, IMBLOC, IMBVIR, INBLOC, INBVIR, MB, NB,
4649 $ NPCOL, , NVIR, RSRC, STRIDE
4740 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
4741 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
4742 $ JMP_NQINBLOC, JMP_NQNB, JMP_ROW
4743 PARAMETER ( JMP_1 = 1, jmp_row = 2, jmp_col = 3,
4744 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
4745 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
4746 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
4754 IF( RSRC.LT.0 ) THEN
4759 IF( csrc.LT.0 )
THEN
4768 jmp( jmp_imbv ) = imbvir
4769 jmp( jmp_npmb ) = npmb
4770 jmp( jmp_npimbloc ) = imbloc + npmb - mb
4773 jmp( jmp_inbv ) = inbvir
4774 jmp( jmp_nqnb ) = nqnb
4775 jmp( jmp_nqinbloc ) = inbloc + nqnb - nb
4778 jmp( jmp_row ) = stride
4779 jmp( jmp_col ) = stride * nvir
4781 jmp( jmp_row ) = stride * nvir
4782 jmp( jmp_col ) = stride
4798 INTEGER IMULADD( 4, * ), JMP( * ), MULADD0( * )
4837 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
4838 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
4839 $ JMP_NQINBLOC, JMP_NQNB, JMP_ROW
4840 PARAMETER ( JMP_1 = 1, jmp_row = 2, jmp_col = 3,
4841 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
4842 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
4843 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
4848 INTEGER ITMP1( 2 ), ITMP2( 2 )
4860 CALL pb_jump( jmp( jmp_1 ), muladd0, itmp2, itmp1,
4861 $ imuladd( 1, jmp_1 ) )
4863 CALL pb_jump( jmp( jmp_row ), muladd0, itmp1, itmp2,
4864 $ imuladd( 1, jmp_row ) )
4865 CALL pb_jump( jmp( jmp_col ), muladd0, itmp1, itmp2,
4866 $ imuladd( 1, jmp_col ) )
4871 CALL pb_jump( jmp( jmp_imbv ), imuladd( 1, jmp_row ), itmp1,
4872 $ itmp2, imuladd( 1, jmp_imbv ) )
4873 CALL pb_jump( jmp( jmp_mb ), imuladd( 1, jmp_row ), itmp1,
4874 $ itmp2, imuladd( 1, jmp_mb ) )
4875 CALL pb_jump( jmp( jmp_npmb ), imuladd( 1, jmp_row ), itmp1,
4876 $ itmp2, imuladd( 1, jmp_npmb ) )
4877 CALL pb_jump( jmp( jmp_npimbloc ), imuladd( 1, jmp_row ), itmp1,
4878 $ itmp2, imuladd( 1, jmp_npimbloc ) )
4880 CALL pb_jump( jmp( jmp_inbv ), imuladd( 1, jmp_col ), itmp1,
4881 $ itmp2, imuladd( 1, jmp_inbv ) )
4882 CALL pb_jump( jmp( jmp_nb ), imuladd( 1, jmp_col ), itmp1,
4883 $ itmp2, imuladd( 1, jmp_nb ) )
4884 CALL pb_jump( jmp( jmp_nqnb ), imuladd( 1, jmp_col ), itmp1,
4885 $ itmp2, imuladd( 1, jmp_nqnb ) )
4886 CALL pb_jump( jmp( jmp_nqinbloc ), imuladd( 1, jmp_col ), itmp1,
4887 $ itmp2, imuladd( 1, jmp_nqinbloc ) )
4895 $ MYRDIST, MYCDIST, NPROW, NPCOL, JMP,
4904 INTEGER ILOCBLK, ILOCOFF, JLOCBLK, JLOCOFF, MYCDIST,
4905 $ MYRDIST, NPCOL, NPROW, SEED
4908 INTEGER IMULADD( 4, * ), IRAN( * ), JMP( * )
4992 INTEGER JMP_1, JMP_COL, , , JMP_LEN,
4993 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
4994 $ JMP_NQINBLOC, JMP_NQNB, JMP_ROW
4995 PARAMETER ( JMP_1 = 1, jmp_row = 2, jmp_col = 3,
4996 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
4997 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
4998 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
5002 INTEGER IMULADDTMP( 4 ), ITMP( 2 )
5005 EXTERNAL PB_JUMP, PB_SETRAN
5014 CALL pb_jump( jmp( jmp_1 ), imuladd( 1, jmp_1 ), itmp, iran,
5019 CALL pb_jump( ilocoff, imuladd( 1, jmp_row ), iran, itmp,
5021 IF( myrdist.GT.0 )
THEN
5022 CALL pb_jump( jmp( jmp_imbv ), imuladd( 1, jmp_row ), itmp,
5023 $ iran, imuladdtmp )
5024 CALL pb_jump( myrdist - 1, imuladd
5025 $ itmp, imuladdtmp )
5026 CALL pb_jump( ilocblk, imuladd( 1, jmp_npmb ), itmp,
5027 $ iran, imuladdtmp )
5029 IF( ilocblk.GT.0 )
THEN
5030 CALL pb_jump( jmp( jmp_imbv ), imuladd( 1, jmp_row ), itmp,
5031 $ iran, imuladdtmp )
5032 CALL pb_jump( nprow - 1, imuladd( 1, jmp_mb ), iran,
5033 $ itmp, imuladdtmp )
5034 CALL pb_jump( ilocblk - 1, imuladd( 1, jmp_npmb ), itmp,
5035 $ iran, imuladdtmp )
5037 CALL pb_jump( 0, imuladd( 1, jmp_1 ), itmp,
5038 $ iran, imuladdtmp )
5044 CALL pb_jump( jlocoff, imuladd( 1, jmp_col ), iran, itmp,
5046 IF( mycdist.GT.0 )
THEN
5047 CALL pb_jump( jmp( jmp_inbv ), imuladd( 1, jmp_col ), itmp,
5048 $ iran, imuladdtmp )
5049 CALL pb_jump( mycdist - 1, imuladd( 1, jmp_nb ), iran,
5051 CALL pb_jump( jlocblk,
5054 IF( jlocblk.GT.0 )
THEN
5055 CALL pb_jump( jmp( jmp_inbv ), imuladd( 1, jmp_col ), itmp,
5057 CALL pb_jump( npcol - 1, imuladd( 1, jmp_nb ), iran,
5058 $ itmp, imuladdtmp )
5059 CALL pb_jump( jlocblk - 1, imuladd( 1, jmp_nqnb ), itmp,
5060 $ iran, imuladdtmp )
5063 $ iran, imuladdtmp )
5067 CALL pb_setran( iran, imuladd( 1, jmp_1 ) )
5082 INTEGER I( 2 ), J( 2 ), K( 2 )
5127 INTEGER IPOW15, IPOW16
5128 PARAMETER ( IPOW15 = 2**15, ipow16 = 2**16 )
5131 INTEGER ITMP1, ITMP2
5137 ITMP1 = k( 1 ) + j( 1 )
5138 itmp2 = itmp1 / ipow16
5139 i( 1 ) = itmp1 - itmp2 * ipow16
5144 itmp1 = itmp2 + k( 2 ) + j( 2 )
5145 itmp2 = itmp1 / ipow15
5146 i( 2 ) = itmp1 - itmp2 * ipow15
5161 INTEGER I( 2 ), J( 2 ), K( 2 )
5207 INTEGER IPOW15, IPOW16, IPOW30
5208 PARAMETER ( IPOW15 = 2**15, ipow16 = 2**16,
5212 INTEGER ITMP1, ITMP2
5216 ITMP1 = k( 1 ) * j( 1 )
5218 $ itmp1 = ( itmp1 + ipow30 ) + ipow30
5222 itmp2 = itmp1 / ipow16
5223 i( 1 ) = itmp1 - itmp2 * ipow16
5225 itmp1 = k( 1 ) * j( 2 ) + k( 2 ) * j( 1 )
5227 $ itmp1 = ( itmp1 + ipow30 ) + ipow30
5229 itmp1 = itmp2 + itmp1
5231 $ itmp1 = ( itmp1 + ipow30 ) + ipow30
5235 i( 2 ) = itmp1 - ( itmp1 / ipow15 ) * ipow15
5242 SUBROUTINE pb_jump( K, MULADD, IRANN, IRANM, IMA )
5253 INTEGER IMA( 4 ), IRANM( 2 ), IRANN( 2 ), MULADD( 4 )
5321 IMA( 1 ) = muladd( 1 )
5322 ima( 2 ) = muladd( 2 )
5323 ima( 3 ) = muladd( 3 )
5324 ima( 4 ) = muladd( 4 )
5328 CALL pb_lmul( ima, muladd, j )
5333 CALL pb_lmul( ima( 3 ), muladd, j )
5334 CALL pb_ladd( muladd( 3 ), j, ima( 3 ) )
5339 CALL pb_ladd( j, ima( 3 ), iranm )
5343 iranm( 1 ) = irann( 1 )
5344 iranm( 2 ) = irann( 2 )
5361 INTEGER IAC( 4 ), IRAN( 2 )
5396 INTEGER IACS( 4 ), IRAND( 2 )
5397 COMMON /RANCOM/ IRAND, IACS
5404 IRAND( 1 ) = iran( 1 )
5405 irand( 2 ) = iran( 2 )
5406 iacs( 1 ) = iac( 1 )
5407 iacs( 2 ) = iac( 2 )
5408 iacs( 3 ) = iac( 3 )
5409 iacs( 4 ) = iac( 4 )
5424 INTEGER IRANM( 2 ), IRANN( 2 ), MULADD( 4 )
5467 EXTERNAL PB_LADD, PB_LMUL
5470 INTEGER IACS( 4 ), IRAND( 2 )
5471 COMMON /RANCOM/ IRAND, IACS
5478 CALL PB_LMUL( IRANN, MULADD, J )
5479 CALL PB_LADD( J, MULADD( 3 ), IRANM )
5481 IRAND( 1 ) = iranm( 1 )
5482 irand( 2 ) = iranm( 2 )
if(complex_arithmetic) id
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
subroutine pmdimchk(ictxt, nout, m, n, matrix, ia, ja, desca, info)
subroutine pvdimchk(ictxt, nout, n, matrix, ix, jx, descx, incx, info)
subroutine pb_descset2(desc, m, n, imb, inb, mb, nb, rsrc, csrc, ctxt, lld)
subroutine pmdescchk(ictxt, nout, matrix, desca, dta, ma, na, imba, inba, mba, nba, rsrca, csrca, mpa, nqa, iprea, imida, iposta, igap, gapmul, info)
subroutine pb_ladd(j, k, i)
logical function lsame(ca, cb)
subroutine pb_binfo(offd, m, n, imb1, inb1, mb, nb, mrrow, mrcol, lcmt00, mblks, nblks, imbloc, inbloc, lmbloc, lnbloc, ilow, low, iupp, upp)
integer function pilaenv(ictxt, prec)
subroutine pb_setran(iran, iac)
subroutine pxerbla(ictxt, srname, info)
subroutine pb_locinfo(i, inb, nb, myroc, srcproc, nprocs, ilocblk, ilocoff, mydist)
subroutine pb_descinit2(desc, m, n, imb, inb, mb, nb, rsrc, csrc, ctxt, lld, info)
subroutine pvdescchk(ictxt, nout, matrix, descx, dtx, mx, nx, imbx, inbx, mbx, nbx, rsrcx, csrcx, incx, mpx, nqx, iprex, imidx, ipostx, igap, gapmul, info)
subroutine pb_chkmat(ictxt, m, mpos0, n, npos0, ia, ja, desca, dpos0, info)
subroutine pb_lmul(k, j, i)
double precision function pdopbl2(subnam, m, n, kkl, kku)
subroutine pb_jump(k, muladd, irann, iranm, ima)
subroutine pb_setlocran(seed, ilocblk, jlocblk, ilocoff, jlocoff, myrdist, mycdist, nprow, npcol, jmp, imuladd, iran)
subroutine pb_initmuladd(muladd0, jmp, imuladd)
logical function lsamen(n, ca, cb)
subroutine pb_desctrans(descin, descout)
subroutine pb_initjmp(colmaj, nvir, imbvir, inbvir, imbloc, inbloc, mb, nb, rsrc, csrc, nprow, npcol, stride, jmp)
subroutine pb_jumpit(muladd, irann, iranm)