2
3
4
5
6
7
8
9 INTEGER IA, JA, LWORK, N
10
11
12 INTEGER DESC( * )
13 REAL BYALL( * ), BYCOL( * ), WORK( LWORK )
14
15
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 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
120 $ MB_, NB_, RSRC_, CSRC_, LLD_
121 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
122 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_
123 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
124
125
126 INTEGER ALLI, BUFLEN, , II, MYCOL, MYROW, NB, NPCOL,
127 $ NPROW, PCOL
128
129
130
131 INTEGER NUMROC
133
134
135
137
138
140
141
142
143 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
144 $ rsrc_.LT.0 )RETURN
145
147 nb = desc( mb_ )
148
149 DO 30 pcol = 0, npcol - 1
150 buflen =
numroc( n, nb, pcol, 0, npcol )
151 IF( mycol.EQ.pcol ) THEN
152 CALL scopy( buflen, bycol, 1, work, 1 )
153 CALL sgebs2d( desc( ctxt_ ),
'R',
' ', 1, buflen, work, 1 )
154 ELSE
155 CALL sgebr2d( desc( ctxt_ ),
'R',
' ', 1, buflen, work, 1,
156 $ myrow, pcol )
157 END IF
158
159 alli = pcol*nb
160 DO 20 ii = 1, buflen, nb
161 DO 10 i = 1,
min( nb, buflen-ii+1 )
162 byall( alli+i ) = work( ii-1+i )
163 10 CONTINUE
164 alli = alli + nb*npcol
165 20 CONTINUE
166 30 CONTINUE
167
168 RETURN
169
170
171
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sgebs2d(contxt, scope, top, m, n, a, lda)
subroutine sgebr2d(contxt, scope, top, m, n, a, lda)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
integer function numroc(n, nb, iproc, isrcproc, nprocs)