5
6
7
8
9
10
11
12
13
14
15 CHARACTER*1 AFORM, AFORM2
16 INTEGER IACOL, IAROW, ICTXT,
17 $ ISEED, LDA, MB, MYCOL, MYROW, N,
18 $ NB, NPCOL, NPROW, BWL, BWU
19
20
21 COMPLEX*16 A( LDA, * )
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 DOUBLE PRECISION ONE, ZERO
117 parameter( one = 1.0d+0 )
118 parameter( zero = 0.0d+0 )
119 COMPLEX*16 CONE, CZERO
120 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
121 parameter( czero = ( 0.0d+0, 0.0d+0 ) )
122
123
124 INTEGER DIAG_INDEX, I, J, M_MATGEN, NQ, N_MATGEN,
125 $ START_INDEX
126
127
129
130
131 LOGICAL LSAME
132 INTEGER ICEIL, NUMROC
134
135
136
137
138 IF(
lsame( aform,
'L' ).OR.
lsame( aform,
'U' ) )
THEN
139 m_matgen = bwl + 1
140 n_matgen = n
141 start_index = 1
142 IF(
lsame( aform,
'L' ) )
THEN
143 diag_index = 1
144 ELSE
145 diag_index = bwl + 1
146 ENDIF
147 ELSE
148 m_matgen = bwl + bwu + 1
149 n_matgen = n
150 diag_index = bwu + 1
151 start_index = 1
152 ENDIF
153
154 nq =
numroc( n, nb, mycol, iacol, npcol )
155
156
157
158
159 IF(
lsame( aform,
'T' ) .OR.
160 $ (
lsame( aform2,
'T' ) ) )
THEN
161
163 $ n_matgen, m_matgen,
164 $ nb, m_matgen, a( start_index, 1 ),
165 $ lda, iarow, iacol,
166 $ iseed, 0, nq, 0, m_matgen,
167 $ mycol, myrow, npcol, nprow )
168
169 ELSE
170
172 $ m_matgen, n_matgen,
173 $ m_matgen, nb, a( start_index, 1 ),
174 $ lda, iarow, iacol,
175 $ iseed, 0, m_matgen, 0, nq,
176 $ myrow, mycol, nprow, npcol )
177
178
179
180 DO 1000 j=1,nb
181
182 DO 2000 i=1, lda-m_matgen
183
184
185
186
187
188
189 a( i-lda+m_matgen, j ) = czero
190
191 2000 CONTINUE
192
193 1000 CONTINUE
194
195 ENDIF
196
197 IF(
lsame( aform2,
'D' ).OR.
198 $ (
lsame( aform,
'L' ).OR.
lsame( aform,
'U' ) ) )
THEN
199
200
201
202
203 DO 330 i=1, nq
204 IF(
lsame( aform,
'T' ) .OR.
205 $ (
lsame( aform2,
'T' ) ) )
THEN
206 IF( nprow .EQ. 1 ) THEN
207 a( i, diag_index ) = dcmplx( dble( a( i, diag_index ) )
208 $ + dble( 2*( bwl+bwu+1 ) ) )
209 ENDIF
210 ELSE
211 IF( nprow .EQ. 1 ) THEN
212 a( diag_index, i ) = dcmplx( dble( a( diag_index, i ) )
213 $ + dble( 2*( bwl+bwu+1 ) ) )
214 ENDIF
215 END IF
216 330 CONTINUE
217
218
219 ELSE
220
221
222
223 DO 380 i=1, nq
224
225 IF( nprow .EQ. 1 ) THEN
226
227 IF( mod(i+mycol*nb,2) .EQ. 1 ) THEN
228 a( diag_index+1, i ) =
229 $ dcmplx( dble( a( diag_index+1, i ) )
230 $ + dble( 2*( bwl+bwu+1 ) ) )
231
232 ELSE
233
234 a( diag_index-1, i ) =
235 $ dcmplx( dble( a( diag_index-1, i ) )
236 $ + dble( 2*( bwl+bwu+1 ) ) )
237 ENDIF
238
239 ENDIF
240
241 380 CONTINUE
242
243 END IF
244
245 RETURN
246
247
248
subroutine pzmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
integer function iceil(inum, idenom)
integer function numroc(n, nb, iproc, isrcproc, nprocs)