OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pdlaread.f
Go to the documentation of this file.
1 SUBROUTINE pdlaread( FILNAM, A, DESCA, IRREAD, ICREAD, WORK )
2*
3* -- ScaLAPACK tools routine (version 1.8) --
4* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
5* and University of California, Berkeley.
6*
7* written by Antoine Petitet, August 1995 (petitet@cs.utk.edu)
8* adapted by Julie Langou, April 2007 (julie@cs.utk.edu)
9*
10* .. Scalar Arguments ..
11 INTEGER ICREAD, IRREAD
12* ..
13* .. Array Arguments ..
14 CHARACTER*(*) FILNAM
15 INTEGER DESCA( * )
16 DOUBLE PRECISION A( * ), WORK( * )
17* ..
18*
19* Purpose
20* =======
21*
22* PDLAREAD reads from a file named FILNAM a matrix and distribute
23* it to the process grid.
24*
25* Only the process of coordinates {IRREAD, ICREAD} read the file.
26*
27* WORK must be of size >= MB_ = DESCA( MB_ ).
28*
29* =====================================================================
30*
31* .. Parameters ..
32 INTEGER NIN
33 parameter( nin = 11 )
34 INTEGER BLOCK_CYCLIC_2D, CSRC_, 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 )
39* ..
40* .. Local Scalars ..
41 INTEGER H, I, IB, ICTXT, ICURCOL, ICURROW, II, J, JB,
42 $ JJ, K, LDA, M, MYCOL, MYROW, N, NPCOL, NPROW
43* ..
44* .. Local Arrays ..
45 INTEGER IWORK( 2 )
46* ..
47* .. External Subroutines ..
48 EXTERNAL blacs_gridinfo, infog2l, dgerv2d, dgesd2d,
49 $ igebs2d, igebr2d
50* ..
51* .. External Functions ..
52 INTEGER ICEIL
53 EXTERNAL iceil
54* ..
55* .. Intrinsic Functions ..
56 INTRINSIC min, mod
57* ..
58* .. Executable Statements ..
59*
60* Get grid parameters
61*
62 ictxt = desca( ctxt_ )
63 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
64*
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 )
69 ELSE
70 CALL igebr2d( ictxt, 'All', ' ', 2, 1, iwork, 2, irread,
71 $ icread )
72 END IF
73 m = iwork( 1 )
74 n = iwork( 2 )
75*
76 IF( m.LE.0 .OR. n.LE.0 )
77 $ RETURN
78*
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 ...'
83 END IF
84 CALL BLACS_ABORT( ICTXT, 0 )
85 END IF
86*
87 II = 1
88 JJ = 1
89 ICURROW = DESCA( RSRC_ )
90 ICURCOL = DESCA( CSRC_ )
91 LDA = DESCA( LLD_ )
92*
93* Loop over column blocks
94*
95 DO 50 J = 1, N, DESCA( NB_ )
96 JB = MIN( DESCA( NB_ ), N-J+1 )
97 DO 40 H = 0, JB-1
98*
99* Loop over block of rows
100*
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
105 DO 10 K = 0, IB-1
106 READ( NIN, FMT = * ) A( II+K+(JJ+H-1)*LDA )
107 10 CONTINUE
108 END IF
109 ELSE
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
114 DO 20 K = 1, IB
115 READ( NIN, FMT = * ) WORK( K )
116 20 CONTINUE
117 CALL DGESD2D( ICTXT, IB, 1, WORK, DESCA( MB_ ),
118 $ ICURROW, ICURCOL )
119 END IF
120 END IF
121.EQ. IF( MYROWICURROW )
122 $ II = II + IB
123 ICURROW = MOD( ICURROW+1, NPROW )
124 30 CONTINUE
125*
126 II = 1
127 ICURROW = DESCA( RSRC_ )
128 40 CONTINUE
129*
130.EQ. IF( MYCOLICURCOL )
131 $ JJ = JJ + JB
132 ICURCOL = MOD( ICURCOL+1, NPCOL )
133*
134 50 CONTINUE
135*
136.EQ..AND..EQ. IF( MYROWIRREAD MYCOLICREAD ) THEN
137 CLOSE( NIN )
138 END IF
139*
140 RETURN
141*
142* End of PDLAREAD
143*
144 END
#define min(a, b)
Definition macros.h:20
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
Definition mpi.f:937
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
Definition mpi.f:754
subroutine pdlaread(filnam, a, desca, irread, icread, work)
Definition pdlaread.f:2