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 REAL 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 REAL ONE, ZERO
117 parameter( one = 1.0e+0 )
118 parameter( zero = 0.0e+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
180 DO 2000 i=1, lda-m_matgen
181
182
183
184
185
186
187
188 a( i-lda+m_matgen, j ) = zero
189
190 2000 CONTINUE
191
192 1000 CONTINUE
193
194 ENDIF
195
196 IF(
lsame( aform2,
'D' ).OR.
197 $ (
lsame( aform,
'L' ).OR.
lsame( aform,
'U' ) ) )
THEN
198
199
200
201
202 DO 330 i=1, nq
203 IF(
lsame( aform,
'T' ) .OR.
204 $ (
lsame( aform2,
'T' ) ) )
THEN
205 IF( nprow .EQ. 1 ) THEN
206 a( i, diag_index ) = a( i, diag_index )
207 $ + real( bwl+bwu+1 )
208 ENDIF
209 ELSE
210 IF( nprow .EQ. 1 ) THEN
211 a( diag_index, i ) = a( diag_index, i )
212 $ + real( bwl+bwu+1 )
213 ENDIF
214 END IF
215 330 CONTINUE
216
217
218 ELSE
219
220
221
222 DO 380 i=1, nq
223
224 IF( nprow .EQ. 1 ) THEN
225
226 IF( mod(i+mycol*nb,2) .EQ. 1 ) THEN
227 a( diag_index+1, i ) = a( diag_index+1, i )
228 $ + real( bwl+bwu+1 )
229
230 ELSE
231
232 a( diag_index-1, i ) = a( diag_index-1, i )
233 $ + real( bwl+bwu+1 )
234 ENDIF
235
236 ENDIF
237
238 380 CONTINUE
239
240 END IF
241
242 RETURN
243
244
245
subroutine psmatgen(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)