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 DOUBLE PRECISION 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
120
121 INTEGER DIAG_INDEX, I, J, M_MATGEN, NQ, N_MATGEN,
122 $ START_INDEX
123
124
126
127
128 LOGICAL LSAME
129 INTEGER ICEIL, NUMROC
131
132
133
134
135 IF(
lsame( aform,
'L' ).OR.
lsame( aform,
'U' ) )
THEN
136 m_matgen = bwl + 1
137 n_matgen = n
138 start_index = 1
139 IF(
lsame( aform,
'L' ) )
THEN
140 diag_index = 1
141 ELSE
142 diag_index = bwl + 1
143 ENDIF
144 ELSE
145 m_matgen = bwl + bwu + 1
146 n_matgen = n
147 diag_index = bwu + 1
148 start_index = 1
149 ENDIF
150
151 nq =
numroc( n, nb, mycol, iacol, npcol )
152
153
154
155
156 IF(
lsame( aform,
'T' ) .OR.
157 $ (
lsame( aform2,
'T' ) ) )
THEN
158
160 $ n_matgen, m_matgen,
161 $ nb, m_matgen, a( start_index, 1 ),
162 $ lda, iarow, iacol,
163 $ iseed, 0, nq, 0, m_matgen,
164 $ mycol, myrow, npcol, nprow )
165
166 ELSE
167
169 $ m_matgen, n_matgen,
170 $ m_matgen, nb, a( start_index, 1 ),
171 $ lda, iarow, iacol,
172 $ iseed, 0, m_matgen, 0, nq,
173 $ myrow, mycol, nprow, npcol )
174
175
176
177 DO 1000 j=1,nb
178
179 DO 2000 i=1, lda-m_matgen
180
181
182
183
184
185
186 a( i-lda+m_matgen, j ) = zero
187
188 2000 CONTINUE
189
190 1000 CONTINUE
191
192 ENDIF
193
194 IF(
lsame( aform2,
'D' ).OR.
195 $ (
lsame( aform,
'L' ).OR.
lsame( aform,
'U' ) ) )
THEN
196
197
198
199
200 DO 330 i=1, nq
201 IF(
lsame( aform,
'T' ) .OR.
202 $ (
lsame( aform2,
'T' ) ) )
THEN
203 IF( nprow .EQ. 1 ) THEN
204 a( i, diag_index ) = a( i, diag_index )
205 $ + dble( bwl+bwu+1 )
206 ENDIF
207 ELSE
208 IF( nprow .EQ. 1 ) THEN
209 a( diag_index, i ) = a( diag_index, i )
210 $ + dble( bwl+bwu+1 )
211 ENDIF
212 END IF
213 330 CONTINUE
214
215
216 ELSE
217
218
219
220 DO 380 i=1, nq
221
222 IF( nprow .EQ. 1 ) THEN
223
224 IF( mod(i+mycol*nb,2) .EQ. 1 ) THEN
225 a( diag_index+1, i ) = a( diag_index+1, i )
226 $ + dble( bwl+bwu+1 )
227
228 ELSE
229
230 a( diag_index-1, i ) = a( diag_index-1, i )
231 $ + dble( bwl+bwu+1 )
232 ENDIF
233
234 ENDIF
235
236 380 CONTINUE
237
238 END IF
239
240 RETURN
241
242
243
subroutine pdmatgen(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)