1 SUBROUTINE pdlaread( FILNAM, A, DESCA, IRREAD, ICREAD, WORK )
11 INTEGER ICREAD, IRREAD
16 DOUBLE PRECISION A( * ), WORK( * )
34 INTEGER BLOCK_CYCLIC_2D, , CTXT_, DLEN_, DT_,
35 $ LLD_, MB_, M_, NB_, N_, RSRC_
36 parameter( block_cyclic_2d = 1, dlen_ = 9, dt_ = 1,
37 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
38 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
41 INTEGER H, I, IB, ICTXT, ICURCOL, ICURROW, II, J, JB,
42 $ JJ, K, LDA, M, MYCOL, MYROW, N, NPCOL, NPROW
62 ictxt = desca( ctxt_ )
65 IF( myrow.EQ.irread .AND. mycol.EQ.icread )
THEN
66 OPEN( nin, file=filnam, status=
'OLD' )
67 READ( nin, fmt = * ) ( iwork( i ), i = 1, 2 )
68 CALL igebs2d( ictxt,
'All',
' ', 2, 1, iwork, 2 )
70 CALL igebr2d( ictxt,
'All',
' ', 2, 1, iwork, 2, irread,
76 IF( m.LE.0 .OR. n.LE.0 )
79 IF( m.GT.desca( m_ ).OR. n.GT.desca( n_ ) )
THEN
80 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
THEN
81 WRITE( *, fmt = * ) '
pdlaread: matrix too big to fit in
'
82 WRITE( *, FMT = * ) 'abort ...
'
84 CALL BLACS_ABORT( ICTXT, 0 )
89 ICURROW = DESCA( RSRC_ )
90 ICURCOL = DESCA( CSRC_ )
95 DO 50 J = 1, N, DESCA( NB_ )
96 JB = MIN( DESCA( NB_ ), N-J+1 )
101 DO 30 I = 1, M, DESCA( MB_ )
102 IB = MIN( DESCA( MB_ ), M-I+1 )
103.EQ..AND..EQ.
IF( ICURROWIRREAD ICURCOLICREAD ) THEN
104.EQ..AND..EQ.
IF( MYROWIRREAD MYCOLICREAD ) THEN
106 READ( NIN, FMT = * ) A( II+K+(JJ+H-1)*LDA )
110.EQ..AND..EQ.
IF( MYROWICURROW MYCOLICURCOL ) THEN
111 CALL DGERV2D( ICTXT, IB, 1, A( II+(JJ+H-1)*LDA ),
112 $ LDA, IRREAD, ICREAD )
113.EQ..AND..EQ.
ELSE IF( MYROWIRREAD MYCOLICREAD ) THEN
115 READ( NIN, FMT = * ) WORK( K )
117 CALL DGESD2D( ICTXT, IB, 1, WORK, DESCA( MB_ ),
121.EQ.
IF( MYROWICURROW )
123 ICURROW = MOD( ICURROW+1, NPROW )
127 ICURROW = DESCA( RSRC_ )
130.EQ.
IF( MYCOLICURCOL )
132 ICURCOL = MOD( ICURCOL+1, NPCOL )
136.EQ..AND..EQ.
IF( MYROWIRREAD MYCOLICREAD ) THEN
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)