OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pzmatgen.f
Go to the documentation of this file.
1 SUBROUTINE pzmatgen( ICTXT, AFORM, DIAG, M, N, MB, NB, A, LDA,
2 $ IAROW, IACOL, ISEED, IROFF, IRNUM, ICOFF,
3 $ ICNUM, MYROW, MYCOL, NPROW, NPCOL )
4*
5* -- ScaLAPACK routine (version 1.7) --
6* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
7* and University of California, Berkeley.
8* May 1, 1997
9*
10* .. Scalar Arguments ..
11 CHARACTER*1 AFORM, DIAG
12 INTEGER IACOL, IAROW, ICNUM, ICOFF, ICTXT, IRNUM,
13 $ iroff, iseed, lda, m, mb, mycol, myrow, n,
14 $ nb, npcol, nprow
15* ..
16* .. Array Arguments ..
17 COMPLEX*16 A( LDA, * )
18* ..
19*
20* Purpose
21* =======
22*
23* PZMATGEN : Parallel Complex Double precision MATrix GENerator.
24* Generate (or regenerate) a distributed matrix A (or sub-matrix of A).
25*
26* Arguments
27* =========
28*
29* ICTXT (global input) INTEGER
30* The BLACS context handle, indicating the global context of
31* the operation. The context itself is global.
32*
33* AFORM (global input) CHARACTER*1
34* if AFORM = 'S' : A is returned is a symmetric matrix.
35* if AFORM = 'H' : A is returned is a Hermitian matrix.
36* if AFORM = 'T' : A is overwritten with the transpose of
37* what would normally be generated.
38* if AFORM = 'C' : A is overwritten with the conjugate trans-
39* pose of what would normally be generated.
40* otherwise a random matrix is generated.
41*
42* DIAG (global input) CHARACTER*1
43* if DIAG = 'D' : A is diagonally dominant.
44*
45* M (global input) INTEGER
46* The number of rows in the generated distributed matrix.
47*
48* N (global input) INTEGER
49* The number of columns in the generated distributed
50* matrix.
51*
52* MB (global input) INTEGER
53* The row blocking factor of the distributed matrix A.
54*
55* NB (global input) INTEGER
56* The column blocking factor of the distributed matrix A.
57*
58* A (local output) COMPLEX*16, pointer into the local memory
59* to an array of dimension ( LDA, * ) containing the local
60* pieces of the distributed matrix.
61*
62* LDA (local input) INTEGER
63* The leading dimension of the array containing the local
64* pieces of the distributed matrix A.
65*
66* IAROW (global input) INTEGER
67* The row processor coordinate which holds the first block
68* of the distributed matrix A.
69*
70* IACOL (global input) INTEGER
71* The column processor coordinate which holds the first
72* block of the distributed matrix A.
73*
74* ISEED (global input) INTEGER
75* The seed number to generate the distributed matrix A.
76*
77* IROFF (local input) INTEGER
78* The number of local rows of A that have already been
79* generated. It should be a multiple of MB.
80*
81* IRNUM (local input) INTEGER
82* The number of local rows to be generated.
83*
84* ICOFF (local input) INTEGER
85* The number of local columns of A that have already been
86* generated. It should be a multiple of NB.
87*
88* ICNUM (local input) INTEGER
89* The number of local columns to be generated.
90*
91* MYROW (local input) INTEGER
92* The row process coordinate of the calling process.
93*
94* MYCOL (local input) INTEGER
95* The column process coordinate of the calling process.
96*
97* NPROW (global input) INTEGER
98* The number of process rows in the grid.
99*
100* NPCOL (global input) INTEGER
101* The number of process columns in the grid.
102*
103* Notes
104* =====
105*
106* The code is originally developed by David Walker, ORNL,
107* and modified by Jaeyoung Choi, ORNL.
108*
109* Reference: G. Fox et al.
110* Section 12.3 of "Solving problems on concurrent processors Vol. I"
111*
112* =====================================================================
113*
114* .. Parameters ..
115 INTEGER MULT0, MULT1, IADD0, IADD1
116 PARAMETER ( MULT0=20077, mult1=16838, iadd0=12345,
117 $ iadd1=0 )
118 DOUBLE PRECISION ONE, TWO, ZERO
119 PARAMETER ( ONE = 1.0d+0, two = 2.0d+0, zero = 0.0d+0 )
120* ..
121* .. Local Scalars ..
122 LOGICAL SYMM, HERM, TRAN
123 INTEGER I, IC, IK, INFO, IOFFC, IOFFR, IR, J, JK,
124 $ jump1, jump2, jump3, jump4, jump5, jump6,
125 $ jump7, maxmn, mend, moff, mp, mrcol, mrrow,
126 $ nend, noff, npmb, nq, nqnb
127 DOUBLE PRECISION DUMMY
128* ..
129* .. Local Arrays ..
130 INTEGER IADD(2), IA1(2), IA2(2), IA3(2), IA4(2),
131 $ IA5(2), IB1(2), IB2(2), IB3(2), IC1(2), IC2(2),
132 $ ic3(2), ic4(2), ic5(2), iran1(2), iran2(2),
133 $ iran3(2), iran4(2), itmp1(2), itmp2(2),
134 $ itmp3(2), jseed(2), mult(2)
135* ..
136* .. External Subroutines ..
137 EXTERNAL jumpit, pxerbla, setran, xjumpm
138* ..
139* .. Intrinsic Functions ..
140 INTRINSIC abs, dble, dcmplx, dconjg, dimag, max, mod
141* ..
142* .. External Functions ..
143 LOGICAL LSAME
144 INTEGER ICEIL, NUMROC
145 DOUBLE PRECISION PDRAND
146 EXTERNAL iceil, numroc, lsame, pdrand
147* ..
148* .. Executable Statements ..
149*
150* Test the input arguments
151*
152 mp = numroc( m, mb, myrow, iarow, nprow )
153 nq = numroc( n, nb, mycol, iacol, npcol )
154 symm = lsame( aform, 'S' )
155 herm = lsame( aform, 'H' )
156 tran = lsame( aform, 't' )
157*
158 INFO = 0
159.NOT. IF( LSAME( DIAG, 'd.AND.' )
160.NOT. $ LSAME( DIAG, 'n' ) ) THEN
161 INFO = 3
162.OR. ELSE IF( SYMMHERM ) THEN
163.NE. IF( MN ) THEN
164 INFO = 5
165.NE. ELSE IF( MBNB ) THEN
166 INFO = 7
167 END IF
168.LT. ELSE IF( M0 ) THEN
169 INFO = 4
170.LT. ELSE IF( N0 ) THEN
171 INFO = 5
172.LT. ELSE IF( MB1 ) THEN
173 INFO = 6
174.LT. ELSE IF( NB1 ) THEN
175 INFO = 7
176.LT. ELSE IF( LDA0 ) THEN
177 INFO = 9
178.LT..OR..GE. ELSE IF( ( IAROW0 )( IAROWNPROW ) ) THEN
179 INFO = 10
180.LT..OR..GE. ELSE IF( ( IACOL0 )( IACOLNPCOL ) ) THEN
181 INFO = 11
182.GT. ELSE IF( MOD(IROFF,MB)0 ) THEN
183 INFO = 13
184.GT. ELSE IF( IRNUM(MP-IROFF) ) THEN
185 INFO = 14
186.GT. ELSE IF( MOD(ICOFF,NB)0 ) THEN
187 INFO = 15
188.GT. ELSE IF( ICNUM(NQ-ICOFF) ) THEN
189 INFO = 16
190.LT..OR..GE. ELSE IF( ( MYROW0 )( MYROWNPROW ) ) THEN
191 INFO = 17
192.LT..OR..GE. ELSE IF( ( MYCOL0 )( MYCOLNPCOL ) ) THEN
193 INFO = 18
194 END IF
195.NE. IF( INFO0 ) THEN
196 CALL PXERBLA( ICTXT, 'pzmatgen', INFO )
197 RETURN
198 END IF
199*
200 MRROW = MOD( NPROW+MYROW-IAROW, NPROW )
201 MRCOL = MOD( NPCOL+MYCOL-IACOL, NPCOL )
202 NPMB = NPROW * MB
203 NQNB = NPCOL * NB
204 MOFF = IROFF / MB
205 NOFF = ICOFF / NB
206 MEND = ICEIL(IRNUM, MB) + MOFF
207 NEND = ICEIL(ICNUM, NB) + NOFF
208*
209 MULT(1) = MULT0
210 MULT(2) = MULT1
211 IADD(1) = IADD0
212 IADD(2) = IADD1
213 JSEED(1) = ISEED
214 JSEED(2) = 0
215*
216* Symmetric or Hermitian matrix will be generated.
217*
218.OR. IF( SYMMHERM ) THEN
219*
220* First, generate the lower triangular part (with diagonal block)
221*
222 JUMP1 = 1
223 JUMP2 = 2*NPMB
224 JUMP3 = 2*M
225 JUMP4 = NQNB
226 JUMP5 = NB
227 JUMP6 = MRCOL
228 JUMP7 = 2*MB*MRROW
229*
230 CALL XJUMPM( JUMP1, MULT, IADD, JSEED, IRAN1, IA1, IC1 )
231 CALL XJUMPM( JUMP2, MULT, IADD, IRAN1, ITMP1, IA2, IC2 )
232 CALL XJUMPM( JUMP3, MULT, IADD, IRAN1, ITMP1, IA3, IC3 )
233 CALL XJUMPM( JUMP4, IA3, IC3, IRAN1, ITMP1, IA4, IC4 )
234 CALL XJUMPM( JUMP5, IA3, IC3, IRAN1, ITMP1, IA5, IC5 )
235 CALL XJUMPM( JUMP6, IA5, IC5, IRAN1, ITMP3, ITMP1, ITMP2 )
236 CALL XJUMPM( JUMP7, MULT, IADD, ITMP3, IRAN1, ITMP1, ITMP2 )
237 CALL XJUMPM( NOFF, IA4, IC4, IRAN1, ITMP1, ITMP2, ITMP3 )
238 CALL XJUMPM( MOFF, IA2, IC2, ITMP1, IRAN1, ITMP2, ITMP3 )
239 CALL SETRAN( IRAN1, IA1, IC1 )
240*
241 DO 10 I = 1, 2
242 IB1(I) = IRAN1(I)
243 IB2(I) = IRAN1(I)
244 IB3(I) = IRAN1(I)
245 10 CONTINUE
246*
247 JK = 1
248 DO 80 IC = NOFF+1, NEND
249 IOFFC = ((IC-1)*NPCOL+MRCOL) * NB
250 DO 70 I = 1, NB
251.GT. IF( JK ICNUM ) GO TO 90
252*
253 IK = 1
254 DO 50 IR = MOFF+1, MEND
255 IOFFR = ((IR-1)*NPROW+MRROW) * MB
256*
257.GT. IF( IOFFR IOFFC ) THEN
258 DO 20 J = 1, MB
259.GT. IF( IK IRNUM ) GO TO 60
260 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
261 $ ONE - TWO*PDRAND(0) )
262 IK = IK + 1
263 20 CONTINUE
264*
265.EQ. ELSE IF( IOFFC IOFFR ) THEN
266 IK = IK + I - 1
267.GT. IF( IK IRNUM ) GO TO 60
268 DO 30 J = 1, I-1
269 A(IK,JK) = DCMPLX( PDRAND(0), PDRAND(0) )
270 30 CONTINUE
271 IF( SYMM ) THEN
272 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
273 $ ONE - TWO*PDRAND(0) )
274 ELSE
275 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0), ZERO )
276 DUMMY = PDRAND(0)
277 END IF
278 DO 40 J = 1, MB-I
279.GT. IF( IK+J IRNUM ) GO TO 60
280 A(IK+J,JK) = DCMPLX( ONE - TWO*PDRAND(0),
281 $ ONE - TWO*PDRAND(0) )
282 IF( HERM ) THEN
283 A(IK,JK+J) = DCONJG( A(IK+J,JK) )
284 ELSE
285 A(IK,JK+J) = A(IK+J,JK)
286 END IF
287 40 CONTINUE
288 IK = IK + MB - I + 1
289 ELSE
290 IK = IK + MB
291 END IF
292*
293 CALL JUMPIT( IA2, IC2, IB1, IRAN2 )
294 IB1(1) = IRAN2(1)
295 IB1(2) = IRAN2(2)
296 50 CONTINUE
297*
298 60 CONTINUE
299 JK = JK + 1
300 CALL JUMPIT( IA3, IC3, IB2, IRAN3 )
301 IB1(1) = IRAN3(1)
302 IB1(2) = IRAN3(2)
303 IB2(1) = IRAN3(1)
304 IB2(2) = IRAN3(2)
305 70 CONTINUE
306*
307 CALL JUMPIT( IA4, IC4, IB3, IRAN4 )
308 IB1(1) = IRAN4(1)
309 IB1(2) = IRAN4(2)
310 IB2(1) = IRAN4(1)
311 IB2(2) = IRAN4(2)
312 IB3(1) = IRAN4(1)
313 IB3(2) = IRAN4(2)
314 80 CONTINUE
315*
316* Next, generate the upper triangular part.
317*
318 90 CONTINUE
319 MULT(1) = MULT0
320 MULT(2) = MULT1
321 IADD(1) = IADD0
322 IADD(2) = IADD1
323 JSEED(1) = ISEED
324 JSEED(2) = 0
325*
326 JUMP1 = 1
327 JUMP2 = 2*NQNB
328 JUMP3 = 2*N
329 JUMP4 = NPMB
330 JUMP5 = MB
331 JUMP6 = MRROW
332 JUMP7 = 2*NB*MRCOL
333*
334 CALL XJUMPM( JUMP1, MULT, IADD, JSEED, IRAN1, IA1, IC1 )
335 CALL XJUMPM( JUMP2, MULT, IADD, IRAN1, ITMP1, IA2, IC2 )
336 CALL XJUMPM( JUMP3, MULT, IADD, IRAN1, ITMP1, IA3, IC3 )
337 CALL XJUMPM( JUMP4, IA3, IC3, IRAN1, ITMP1, IA4, IC4 )
338 CALL XJUMPM( JUMP5, IA3, IC3, IRAN1, ITMP1, IA5, IC5 )
339 CALL XJUMPM( JUMP6, IA5, IC5, IRAN1, ITMP3, ITMP1, ITMP2 )
340 CALL XJUMPM( JUMP7, MULT, IADD, ITMP3, IRAN1, ITMP1, ITMP2 )
341 CALL XJUMPM( MOFF, IA4, IC4, IRAN1, ITMP1, ITMP2, ITMP3 )
342 CALL XJUMPM( NOFF, IA2, IC2, ITMP1, IRAN1, ITMP2, ITMP3 )
343 CALL SETRAN( IRAN1, IA1, IC1 )
344*
345 DO 100 I = 1, 2
346 IB1(I) = IRAN1(I)
347 IB2(I) = IRAN1(I)
348 IB3(I) = IRAN1(I)
349 100 CONTINUE
350*
351 IK = 1
352 DO 150 IR = MOFF+1, MEND
353 IOFFR = ((IR-1)*NPROW+MRROW) * MB
354 DO 140 J = 1, MB
355.GT. IF( IK IRNUM ) GO TO 160
356 JK = 1
357 DO 120 IC = NOFF+1, NEND
358 IOFFC = ((IC-1)*NPCOL+MRCOL) * NB
359.GT. IF( IOFFC IOFFR ) THEN
360 DO 110 I = 1, NB
361.GT. IF( JK ICNUM ) GO TO 130
362 IF( SYMM ) THEN
363 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
364 $ ONE - TWO*PDRAND(0) )
365 ELSE
366 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
367 $ TWO*PDRAND(0) - ONE )
368 END IF
369 JK = JK + 1
370 110 CONTINUE
371 ELSE
372 JK = JK + NB
373 END IF
374 CALL JUMPIT( IA2, IC2, IB1, IRAN2 )
375 IB1(1) = IRAN2(1)
376 IB1(2) = IRAN2(2)
377 120 CONTINUE
378*
379 130 CONTINUE
380 IK = IK + 1
381 CALL JUMPIT( IA3, IC3, IB2, IRAN3 )
382 IB1(1) = IRAN3(1)
383 IB1(2) = IRAN3(2)
384 IB2(1) = IRAN3(1)
385 IB2(2) = IRAN3(2)
386 140 CONTINUE
387*
388 CALL JUMPIT( IA4, IC4, IB3, IRAN4 )
389 IB1(1) = IRAN4(1)
390 IB1(2) = IRAN4(2)
391 IB2(1) = IRAN4(1)
392 IB2(2) = IRAN4(2)
393 IB3(1) = IRAN4(1)
394 IB3(2) = IRAN4(2)
395 150 CONTINUE
396 160 CONTINUE
397*
398* (Conjugate) Transposed matrix A will be generated.
399*
400.OR. ELSE IF( TRAN LSAME( AFORM, 'c' ) ) THEN
401*
402 JUMP1 = 1
403 JUMP2 = 2*NQNB
404 JUMP3 = 2*N
405 JUMP4 = NPMB
406 JUMP5 = MB
407 JUMP6 = MRROW
408 JUMP7 = 2*NB*MRCOL
409*
410 CALL XJUMPM( JUMP1, MULT, IADD, JSEED, IRAN1, IA1, IC1 )
411 CALL XJUMPM( JUMP2, MULT, IADD, IRAN1, ITMP1, IA2, IC2 )
412 CALL XJUMPM( JUMP3, MULT, IADD, IRAN1, ITMP1, IA3, IC3 )
413 CALL XJUMPM( JUMP4, IA3, IC3, IRAN1, ITMP1, IA4, IC4 )
414 CALL XJUMPM( JUMP5, IA3, IC3, IRAN1, ITMP1, IA5, IC5 )
415 CALL XJUMPM( JUMP6, IA5, IC5, IRAN1, ITMP3, ITMP1, ITMP2 )
416 CALL XJUMPM( JUMP7, MULT, IADD, ITMP3, IRAN1, ITMP1, ITMP2 )
417 CALL XJUMPM( MOFF, IA4, IC4, IRAN1, ITMP1, ITMP2, ITMP3 )
418 CALL XJUMPM( NOFF, IA2, IC2, ITMP1, IRAN1, ITMP2, ITMP3 )
419 CALL SETRAN( IRAN1, IA1, IC1 )
420*
421 DO 170 I = 1, 2
422 IB1(I) = IRAN1(I)
423 IB2(I) = IRAN1(I)
424 IB3(I) = IRAN1(I)
425 170 CONTINUE
426*
427 IK = 1
428 DO 220 IR = MOFF+1, MEND
429 IOFFR = ((IR-1)*NPROW+MRROW) * MB
430 DO 210 J = 1, MB
431.GT. IF( IK IRNUM ) GO TO 230
432 JK = 1
433 DO 190 IC = NOFF+1, NEND
434 IOFFC = ((IC-1)*NPCOL+MRCOL) * NB
435 DO 180 I = 1, NB
436.GT. IF( JK ICNUM ) GO TO 200
437 IF( TRAN ) THEN
438 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
439 $ ONE - TWO*PDRAND(0) )
440 ELSE
441 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
442 $ TWO*PDRAND(0) - ONE )
443 END IF
444 JK = JK + 1
445 180 CONTINUE
446 CALL JUMPIT( IA2, IC2, IB1, IRAN2 )
447 IB1(1) = IRAN2(1)
448 IB1(2) = IRAN2(2)
449 190 CONTINUE
450*
451 200 CONTINUE
452 IK = IK + 1
453 CALL JUMPIT( IA3, IC3, IB2, IRAN3 )
454 IB1(1) = IRAN3(1)
455 IB1(2) = IRAN3(2)
456 IB2(1) = IRAN3(1)
457 IB2(2) = IRAN3(2)
458 210 CONTINUE
459*
460 CALL JUMPIT( IA4, IC4, IB3, IRAN4 )
461 IB1(1) = IRAN4(1)
462 IB1(2) = IRAN4(2)
463 IB2(1) = IRAN4(1)
464 IB2(2) = IRAN4(2)
465 IB3(1) = IRAN4(1)
466 IB3(2) = IRAN4(2)
467 220 CONTINUE
468 230 CONTINUE
469*
470* A random matrix is generated.
471*
472 ELSE
473*
474 JUMP1 = 1
475 JUMP2 = 2*NPMB
476 JUMP3 = 2*M
477 JUMP4 = NQNB
478 JUMP5 = NB
479 JUMP6 = MRCOL
480 JUMP7 = 2*MB*MRROW
481*
482 CALL XJUMPM( JUMP1, MULT, IADD, JSEED, IRAN1, IA1, IC1 )
483 CALL XJUMPM( JUMP2, MULT, IADD, IRAN1, ITMP1, IA2, IC2 )
484 CALL XJUMPM( JUMP3, MULT, IADD, IRAN1, ITMP1, IA3, IC3 )
485 CALL XJUMPM( JUMP4, IA3, IC3, IRAN1, ITMP1, IA4, IC4 )
486 CALL XJUMPM( JUMP5, IA3, IC3, IRAN1, ITMP1, IA5, IC5 )
487 CALL XJUMPM( JUMP6, IA5, IC5, IRAN1, ITMP3, ITMP1, ITMP2 )
488 CALL XJUMPM( JUMP7, MULT, IADD, ITMP3, IRAN1, ITMP1, ITMP2 )
489 CALL XJUMPM( NOFF, IA4, IC4, IRAN1, ITMP1, ITMP2, ITMP3 )
490 CALL XJUMPM( MOFF, IA2, IC2, ITMP1, IRAN1, ITMP2, ITMP3 )
491 CALL SETRAN( IRAN1, IA1, IC1 )
492*
493 DO 240 I = 1, 2
494 IB1(I) = IRAN1(I)
495 IB2(I) = IRAN1(I)
496 IB3(I) = IRAN1(I)
497 240 CONTINUE
498*
499 JK = 1
500 DO 290 IC = NOFF+1, NEND
501 IOFFC = ((IC-1)*NPCOL+MRCOL) * NB
502 DO 280 I = 1, NB
503.GT. IF( JK ICNUM ) GO TO 300
504 IK = 1
505 DO 260 IR = MOFF+1, MEND
506 IOFFR = ((IR-1)*NPROW+MRROW) * MB
507 DO 250 J = 1, MB
508.GT. IF( IK IRNUM ) GO TO 270
509 A(IK,JK) = DCMPLX( ONE - TWO*PDRAND(0),
510 $ ONE - TWO*PDRAND(0) )
511 IK = IK + 1
512 250 CONTINUE
513 CALL JUMPIT( IA2, IC2, IB1, IRAN2 )
514 IB1(1) = IRAN2(1)
515 IB1(2) = IRAN2(2)
516 260 CONTINUE
517*
518 270 CONTINUE
519 JK = JK + 1
520 CALL JUMPIT( IA3, IC3, IB2, IRAN3 )
521 IB1(1) = IRAN3(1)
522 IB1(2) = IRAN3(2)
523 IB2(1) = IRAN3(1)
524 IB2(2) = IRAN3(2)
525 280 CONTINUE
526*
527 CALL JUMPIT( IA4, IC4, IB3, IRAN4 )
528 IB1(1) = IRAN4(1)
529 IB1(2) = IRAN4(2)
530 IB2(1) = IRAN4(1)
531 IB2(2) = IRAN4(2)
532 IB3(1) = IRAN4(1)
533 IB3(2) = IRAN4(2)
534 290 CONTINUE
535 300 CONTINUE
536 END IF
537*
538* Diagonally dominant matrix will be generated.
539*
540 IF( LSAME( DIAG, 'd' ) ) THEN
541.NE. IF( MBNB ) THEN
542 WRITE(*,*) 'diagonally dominant matrices with rownb not'//
543 $ ' equal colnb is not supported!'
544 RETURN
545 END IF
546*
547 maxmn = max(m, n)
548 jk = 1
549 DO 340 ic = noff+1, nend
550 ioffc = ((ic-1)*npcol+mrcol) * nb
551 ik = 1
552 DO 320 ir = moff+1, mend
553 ioffr = ((ir-1)*nprow+mrrow) * mb
554 IF( ioffc.EQ.ioffr ) THEN
555 DO 310 j = 0, mb-1
556 IF( ik .GT. irnum ) GO TO 330
557 IF( herm ) THEN
558 a(ik,jk+j) = dcmplx(
559 $ abs(dble(a(ik,jk+j)))+2*maxmn, zero )
560 ELSE
561 a(ik,jk+j)= dcmplx( abs(dble(a(ik,jk+j)))+maxmn,
562 $ abs(dimag(a(ik,jk+j)))+ maxmn )
563 END IF
564 ik = ik + 1
565 310 CONTINUE
566 ELSE
567 ik = ik + mb
568 END IF
569 320 CONTINUE
570 330 CONTINUE
571 jk = jk + nb
572 340 CONTINUE
573 END IF
574*
575 RETURN
576*
577* End of PZMATGEN
578*
579 END
double precision function pdrand(idumm)
Definition pmatgeninc.f:272
subroutine jumpit(mult, iadd, irann, iranm)
Definition pmatgeninc.f:183
subroutine xjumpm(jumpm, mult, iadd, irann, iranm, iam, icm)
Definition pmatgeninc.f:85
subroutine setran(iran, ia, ic)
Definition pmatgeninc.f:142
subroutine pzmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
Definition pzmatgen.f:4
#define max(a, b)
Definition macros.h:21
subroutine pxerbla(contxt, srname, info)
Definition mpi.f:1600