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_,
133 $ dtype_, imb_, inb_, lld_, mb_, m_, nb_, n_,
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, , 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.
160 $ descx( n_ ).LT.( jx+n-1 ) )
THEN
162 ELSE IF( incx.EQ.1 .AND. incx.NE.descx( m_ ) .AND.
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,
185 WRITE( nout, fmt = * )
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
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 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, , GAPMUL, ICTXT, , IMBX, IMIDX,
397 $ INBX, INCX, INFO, IPOSTX, IPREX, MBX, MPX, MX,
398 $ NBX, NOUT, NQX, NX, RSRCX
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, IGSUM2D, 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
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, GAPMUL, ICTXT
932 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
933 $ DTYPE_, 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 = 9997 ) matrix,
'N', matrix, na
982 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
983 $
WRITE( nout, fmt = 9996 ) matrix,
'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, fmt = 9990 )
'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
1041 CALL pb_descinit2( desca, ma, na, imba, inba, mba, nba, rsrca,
1042 $ csrca, ictxt, llda, info )
1046 CALL igsum2d( ictxt,
'All',
' ', 1, 1, info, 1, -1, 0 )
1048 IF( info.NE.0 )
THEN
1049 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
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.
' )
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 , ek, em, en, mults
1381 IF( m.LE.0 .OR. .NOT.(
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
1528 pdopbl3 = six * mults + two * adds
subroutine pmdescchk(ictxt, nout, matrix, desca, dta, ma, na, imba, inba, mba, nba, rsrca, csrca, mpa, nqa, iprea, imida, iposta, igap, gapmul, 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)