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, 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.
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, 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,
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.LT.
ELSE IF( NX0 ) THEN
620.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
621 $ WRITE( NOUT, FMT = 9997 ) MATRIX, 'n
', MATRIX, NX
628.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
629 $ WRITE( NOUT, FMT = 9996 ) MATRIX, 'imb
', MATRIX, IMBX
631.LT.
ELSE IF( INBX1 ) THEN
632.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
633 $ WRITE( NOUT, FMT = 9995 ) MATRIX, 'inb
', MATRIX, INBX
640.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
641 $ WRITE( NOUT, FMT = 9994 ) MATRIX, 'mb
', MATRIX, MBX
643.LT.
ELSE IF( NBX1 ) THEN
644.EQ..AND..EQ.
IF( MYROW0 MYCOL0 )
645 $ WRITE( NOUT, FMT = 9993 ) MATRIX, 'nb
', MATRIX, NBX
651.LT..OR..GE.
IF( RSRCX-1 RSRCXNPROW ) THEN
652.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
653 WRITE( NOUT, FMT = 9992 ) MATRIX
654 WRITE( NOUT, FMT = 9990 ) 'rsrc
', MATRIX, RSRCX, NPROW
657.LT..OR..GE.
ELSE IF( CSRCX-1 CSRCXNPCOL ) THEN
658.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) THEN
659 WRITE( NOUT, FMT = 9991 ) MATRIX
660 WRITE( NOUT, FMT = 9990 ) 'csrc
', MATRIX, CSRCX, NPCOL
667.NE..AND..NE.
IF( INCX1 INCXMX ) THEN
668.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) 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.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) 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.EQ..AND..EQ.
IF( MYROW0 MYCOL0 ) 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.
' )
subroutine pvdescchk(ictxt, nout, matrix, descx, dtx, mx, nx, imbx, inbx, mbx, nbx, rsrcx, csrcx, incx, mpx, nqx, iprex, imidx, ipostx, igap, gapmul, info)