3
4
5
6
7
8
9
10 CHARACTER DIREC, ROWCOL
11 INTEGER IA, JA, K1, K2, N
12
13
14 INTEGER DESCA( * ), IPIV( * )
15 REAL A( * )
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
137 $ LLD_, MB_, M_, NB_, N_, RSRC_
138 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
139 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
140 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
141
142
143 INTEGER I, ICURCOL, ICURROW, IIA, IP, J, JJA, JP,
144 $ MYCOL, MYROW, NPCOL, NPROW
145
146
147 EXTERNAL blacs_gridinfo,
infog2l, psswap
148
149
150 LOGICAL LSAME
152
153
154
155
156
157 IF( n.EQ.0 )
158 $ RETURN
159
160 CALL blacs_gridinfo( desca( ctxt_ ), nprow, npcol, myrow, mycol )
161
162 IF(
lsame( rowcol,
'R' ) )
THEN
163 IF(
lsame( direc,
'F' ) )
THEN
164 CALL infog2l( k1, ja, desca, nprow, npcol, myrow, mycol,
165 $ iia, jja, icurrow, icurcol )
166 DO 10 i = k1, k2
167 ip = ipiv( iia+i-k1 )
168 IF( ip.NE.i )
169 $ CALL psswap( n, a, i, ja, desca, desca( m_ ), a, ip,
170 $ ja, desca, desca( m_ ) )
171 10 CONTINUE
172 ELSE
173 CALL infog2l( k2, ja, desca, nprow, npcol, myrow, mycol,
174 $ iia, jja, icurrow, icurcol )
175 DO 20 i = k2, k1, -1
176 ip = ipiv( iia+i-k1 )
177 IF( ip.NE.i )
178 $ CALL psswap( n, a, i, ja, desca, desca( m_ ), a, ip,
179 $ ja, desca, desca( m_ ) )
180 20 CONTINUE
181 END IF
182 ELSE
183 IF(
lsame( direc,
'F' ) )
THEN
184 CALL infog2l( ia, k1, desca, nprow, npcol, myrow, mycol,
185 $ iia, jja, icurrow, icurcol )
186 DO 30 j = k1, k2
187 jp = ipiv( jja+j-k1 )
188 IF( jp.NE.j )
189 $ CALL psswap( n, a, ia, j, desca, 1, a, ia, jp,
190 $ desca, 1 )
191 30 CONTINUE
192 ELSE
193 CALL infog2l( ia, k2, desca, nprow, npcol, myrow, mycol,
194 $ iia, jja, icurrow, icurcol )
195 DO 40 j = k2, k1, -1
196 jp = ipiv( jja+j-k1 )
197 IF( jp.NE.j )
198 $ CALL psswap( n, a, ia, j, desca, 1, a, ia, jp,
199 $ desca, 1 )
200 40 CONTINUE
201 END IF
202 END IF
203
204 RETURN
205
206
207
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)