6
7
8
9
10
11
12 IMPLICIT NONE
13
14
15 CHARACTER HETERO, SUBTESTS, UPLO
16 INTEGER INFO, IPOSTPAD, IPREPAD, LDA, LIWORK, LWORK,
17 $ MATTYPE, N, NOUT, ORDER
18 INTEGER LRWORK
19 REAL ABSTOL, THRESH
20
21
22 INTEGER DESCA( * ), ICLUSTR( * ), IFAIL( * ),
23 $ ISEED( 4 ), IWORK( * )
24 REAL GAP( * ), WIN( * ), WNEW( * ), RWORK( * )
25 COMPLEX A( LDA, * ), COPYA( LDA, * ),
26 $ WORK( * ), Z( LDA, * )
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198 INTEGER CTXT_, MB_, NB_, RSRC_, CSRC_, LLD_
199 parameter( ctxt_ = 2, mb_ = 5, nb_ = 6,
200 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
201 REAL HALF, ONE, TEN, ZERO
202 parameter( zero = 0.0e0, one = 1.0e0,
203 $ ten = 10.0e0, half = 0.5e0 )
204 COMPLEX PADVAL
205 parameter( padval = ( 19.25e0, 1.1e1 ) )
206 COMPLEX ZZERO
207 parameter( zzero = ( 0.0e0, 0.0e0 ) )
208 COMPLEX ZONE
209 parameter( zone = ( 1.0e0, 0.0e0 ) )
210 INTEGER MAXTYP
211 parameter( maxtyp = 22 )
212
213
214
215 LOGICAL WKNOWN
216 CHARACTER JOBZ, RANGE
217 CHARACTER*14 PASSED
218 INTEGER CONTEXT, I, IAM, IHETERO, IINFO, IL, IMODE, IN,
219 $ INDD, INDWORK, ISIZESUBTST, ISIZEEVR,
220 $ ISIZETST, ITYPE, IU, J, LLWORK, LEVRSIZE,
221 $ MAXSIZE, MYCOL, MYROW, NB, NGEN, NLOC,
222 $ NNODES, NP, NPCOL, NPROW, NQ, RES, SIZECHK,
223 $ SIZEMQRLEFT, SIZEMQRRIGHT, SIZEQRF, SIZEQTQ,
224 $ SIZESUBTST, SIZEEVR, SIZETMS,
225 $ SIZETST, VALSIZE, VECSIZE
226 INTEGER INDRWORK, LLRWORK, RSIZEEVR, RSIZESUBTST,
227 $ RSIZETST
228 REAL ANINV, ANORM, COND, MAXQTQNRM, MAXTSTNRM, OVFL,
229
230
231
232
233 INTEGER ISEEDIN( 4 ), KMAGN( MAXTYP ), KMODE( MAXTYP ),
234 $ KTYPE( MAXTYP )
235 DOUBLE PRECISION CTIME( 10 ), WTIME( 10 )
236
237
238 LOGICAL LSAME
239 INTEGER NUMROC
240 REAL SLARAN, PSLAMCH
242
243
244 EXTERNAL blacs_gridinfo, blacs_pinfo,
clatms, igamx2d,
249
250
251 INTRINSIC abs, real, int,
max,
min, sqrt
252
253
254 DATA ktype / 1, 2, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 8,
255 $ 8, 8, 9, 9, 9, 9, 9, 10, 11 /
256 DATA kmagn / 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
257 $ 2, 3, 1, 1, 1, 2, 3, 1, 1 /
258 DATA kmode / 0, 0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
259 $ 0, 0, 4, 3, 1, 4, 4, 3, 0 /
260
261
262
263 info = 0
264 passed = 'PASSED EVR'
265 context = desca( ctxt_ )
266 nb = desca( nb_ )
267
268 CALL blacs_pinfo( iam, nnodes )
269 CALL blacs_gridinfo( context, nprow, npcol, myrow, mycol )
270
271
272
273 IF( iam.EQ.0 ) THEN
274 IF(
lsame( hetero,
'Y' ) )
THEN
275 ihetero = 2
276 ELSE
277 ihetero = 1
278 END IF
279 CALL igebs2d( context, 'All', ' ', 1, 1, ihetero, 1 )
280 ELSE
281 CALL igebr2d( context, 'All', ' ', 1, 1, ihetero, 1, 0, 0 )
282 END IF
283 IF( ihetero.EQ.2 ) THEN
284 hetero = 'Y'
285 ELSE
286 hetero = 'N'
287 END IF
288
289
290
291 CALL pclasizesepr( desca, iprepad, ipostpad, sizemqrleft,
292 $ sizemqrright, sizeqrf, sizetms, sizeqtq,
293 $ sizechk, sizeevr, rsizeevr, isizeevr,
294 $ sizesubtst, rsizesubtst,
295 $ isizesubtst, sizetst, rsizetst, isizetst )
296 IF( lrwork.LT.rsizetst ) THEN
297 info = 3
298 END IF
299
300 CALL igamx2d( context, 'a', ' ', 1, 1, info, 1, 1, 1, -1, -1, 0 )
301
302 IF( info.EQ.0 ) THEN
303
304 indd = 1
305 indrwork = indd + n
306 indwork = 1
307 llwork = lwork - indwork + 1
308 llrwork = lrwork - indrwork + 1
309
311 ulpinv = one / ulp
312 unfl =
pslamch( context,
'Safe min' )
313 ovfl = one / unfl
314 CALL slabad( unfl, ovfl )
315 rtunfl = sqrt( unfl )
316 rtovfl = sqrt( ovfl )
317 aninv = one / real(
max( 1, n ) )
318
319
320
321 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
322 CALL igebs2d( context, 'a', ' ', 4, 1, iseed, 4 )
323 ELSE
324 CALL igebr2d( context, 'a', ' ', 4, 1, iseed, 4, 0, 0 )
325 END IF
326 iseedin( 1 ) = iseed( 1 )
327 iseedin( 2 ) = iseed( 2 )
328 iseedin( 3 ) = iseed( 3 )
329 iseedin( 4 ) = iseed( 4 )
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348 itype = ktype( mattype )
349 imode = kmode( mattype )
350
351
352
353 GO TO ( 10, 20, 30 )kmagn( mattype )
354
355 10 CONTINUE
356 anorm = one
357 GO TO 40
358
359 20 CONTINUE
360 anorm = ( rtovfl*ulp )*aninv
361 GO TO 40
362
363 30 CONTINUE
364 anorm = rtunfl*n*ulpinv
365 GO TO 40
366
367 40 CONTINUE
368 IF( mattype.LE.15 ) THEN
369 cond = ulpinv
370 ELSE
371 cond = ulpinv*aninv / ten
372 END IF
373
374
375
376 IF( itype.EQ.1 ) THEN
377
378
379
380 DO 50 i = 1, n
381 rwork( indd+i-1 ) = zero
382 50 CONTINUE
383 CALL pclaset(
'All', n, n,zzero,zzero, copya, 1, 1, desca )
384 wknown = .true.
385
386 ELSE IF( itype.EQ.2 ) THEN
387
388
389
390 DO 60 i = 1, n
391 rwork( indd+i-1 ) = one
392 60 CONTINUE
393 CALL pclaset(
'All', n, n,zzero,zone, copya, 1, 1, desca )
394 wknown = .true.
395
396 ELSE IF( itype.EQ.4 ) THEN
397
398
399
400 CALL pcfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
401 $ sizetms, iprepad, ipostpad, padval+1.0e0 )
402
403 CALL pclatms( n, n,
'S', iseed,
'S',rwork( indd ), imode,
404 $ cond, anorm, 0, 0, 'N', copya, 1, 1, desca,
405 $ order, work( indwork+iprepad ), sizetms,
406 $ iinfo )
407 wknown = .true.
408
409 CALL pcchekpad( desca( ctxt_ ),
'PCLATMS1-WORK', sizetms, 1,
410 $ work( indwork ), sizetms, iprepad, ipostpad,
411 $ padval+1.0e0 )
412
413 ELSE IF( itype.EQ.5 ) THEN
414
415
416
417 CALL pcfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
418 $ sizetms, iprepad, ipostpad, padval+2.0e0 )
419
420 CALL pclatms( n, n,
'S', iseed,
'S',rwork( indd ), imode,
421 $ cond, anorm, n, n, 'N', copya, 1, 1, desca,
422 $ order, work( indwork+iprepad ), sizetms,
423 $ iinfo )
424
425 CALL pcchekpad( desca( ctxt_ ),
'PCLATMS2-WORK', sizetms, 1,
426 $ work( indwork ), sizetms, iprepad, ipostpad,
427 $ padval+2.0e0 )
428
429 wknown = .true.
430
431 ELSE IF( itype.EQ.8 ) THEN
432
433
434
435 np =
numroc( n, desca( mb_ ), myrow, 0, nprow )
436 nq =
numroc( n, desca( nb_ ), mycol, 0, npcol )
437 CALL pcmatgen( desca( ctxt_ ),
'H',
'N', n, n, desca( mb_ ),
438 $ desca( nb_ ), copya, desca( lld_ ),
439 $ desca( rsrc_ ), desca( csrc_ ), iseed( 1 ),
440 $ 0, np, 0, nq, myrow, mycol, nprow, npcol )
441 info = 0
442 wknown = .false.
443
444 ELSE IF( itype.EQ.9 ) THEN
445
446
447
448 CALL pcfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
449 $ sizetms, iprepad, ipostpad, padval+3.0e0 )
450
451 CALL pclatms( n, n,
'S', iseed,
'S',rwork( indd ), imode,
452 $ cond, anorm, n, n, 'N', copya, 1, 1, desca,
453 $ order, work( indwork+iprepad ), sizetms,
454 $ iinfo )
455
456 wknown = .true.
457
458 CALL pcchekpad( desca( ctxt_ ),
'PCLATMS3-WORK', sizetms, 1,
459 $ work( indwork ), sizetms, iprepad, ipostpad,
460 $ padval+3.0e0 )
461
462 ELSE IF( itype.EQ.10 ) THEN
463
464
465
466
467 CALL pclaset(
'All', n, n,zzero,zzero, copya, 1, 1, desca )
468 np =
numroc( n, desca( mb_ ), 0, 0, nprow )
469 nq =
numroc( n, desca( nb_ ), 0, 0, npcol )
471 ngen = 0
472 70 CONTINUE
473
474 IF( ngen.LT.n ) THEN
475 in =
min( 1+int(
slaran( iseed )*real( nloc ) ), n-ngen )
476
477 CALL clatms( in, in,
'S', iseed,
'P',rwork( indd ),
478 $ imode, cond, anorm, 1, 1, 'N', a, lda,
479 $ work( indwork ), iinfo )
480
481 DO 80 i = 2, in
482 temp1 = abs( a( i-1, i ) ) /
483 $ sqrt( abs( a( i-1, i-1 )*a( i, i ) ) )
484 IF( temp1.GT.half ) THEN
485 a( i-1, i ) = half*sqrt( abs( a( i-1, i-1 )*a( i,
486 $ i ) ) )
487 a( i, i-1 ) = a( i-1, i )
488 END IF
489 80 CONTINUE
490 CALL pcelset( copya, ngen+1, ngen+1, desca, a( 1, 1 ) )
491 DO 90 i = 2, in
492 CALL pcelset( copya, ngen+i, ngen+i, desca,
493 $ a( i, i ) )
494 CALL pcelset( copya, ngen+i-1, ngen+i, desca,
495 $ a( i-1, i ) )
496 CALL pcelset( copya, ngen+i, ngen+i-1, desca,
497 $ a( i, i-1 ) )
498 90 CONTINUE
499 ngen = ngen + in
500 GO TO 70
501 END IF
502 wknown = .false.
503
504 ELSE IF( itype.EQ.11 ) THEN
505
506
507
508 ngen = 0
509 j = 1
510 temp1 = zero
511 100 CONTINUE
512 IF( ngen.LT.n ) THEN
513 in =
min( j, n-ngen )
514 DO 110 i = 0, in - 1
515 rwork( indd+ngen+i ) = temp1
516 110 CONTINUE
517 temp1 = temp1 + one
518 j = 2*j
519 ngen = ngen + in
520 GO TO 100
521 END IF
522
523 CALL pcfillpad( desca( ctxt_ ), sizetms, 1, work( indwork ),
524 $ sizetms, iprepad, ipostpad, padval+4.0e0 )
525
526 CALL pclatms( n, n,
'S', iseed,
'S',rwork( indd ), imode,
527 $ cond, anorm, 0, 0, 'N', copya, 1, 1, desca,
528 $ order, work( indwork+iprepad ), sizetms,
529 $ iinfo )
530
531 CALL pcchekpad( desca( ctxt_ ),
'PCLATMS4-WORK', sizetms, 1,
532 $ work( indwork ), sizetms, iprepad, ipostpad,
533 $ padval+4.0e0 )
534
535 ELSE
536 iinfo = 1
537 END IF
538
539 IF( wknown )
540 $ CALL slasrt( 'I', n,rwork( indd ), iinfo )
541
543 $ iseed,rwork( indd ), maxsize, vecsize,
544 $ valsize )
545 levrsize =
min( maxsize, llrwork )
546
547 CALL pcseprsubtst( wknown,
'v',
'a', uplo, n, vl, vu, il, iu,
548 $ thresh, abstol, a, copya, z, 1, 1, desca,
549 $ rwork( indd ), win, ifail, iclustr, gap,
550 $ iprepad, ipostpad, work( indwork ), llwork,
551 $ rwork( indrwork ), llrwork,
552 $ levrsize, iwork, isizeevr, res, tstnrm,
553 $ qtqnrm, nout )
554
555 maxtstnrm = tstnrm
556 maxqtqnrm = qtqnrm
557
558 IF( thresh.LE.zero ) THEN
559 passed = 'SKIPPED '
560 info = 2
561 ELSE IF( res.NE.0 ) THEN
562 passed = 'FAILED '
563 info = 1
564 END IF
565 END IF
566
567 IF( thresh.GT.zero .AND.
lsame( subtests,
'Y' ) )
THEN
568
569
570
571 IF( info.EQ.0 ) THEN
572
573 jobz = 'N'
574 range = 'A'
576 $ iseed, win( 1+iprepad ), maxsize,
577 $ vecsize, valsize )
578
579 levrsize = valsize
580
581 CALL pcseprsubtst( .true., jobz, range, uplo, n, vl, vu, il,
582 $ iu, thresh, abstol, a, copya, z, 1, 1,
583 $ desca, win( 1+iprepad ), wnew, ifail,
584 $ iclustr, gap, iprepad, ipostpad,
585 $ work( indwork ), llwork,
586 $ rwork, lrwork, levrsize,
587 $ iwork, isizeevr, res, tstnrm, qtqnrm,
588 $ nout )
589
590 IF( res.NE.0 ) THEN
591 maxtstnrm =
max( tstnrm, maxtstnrm )
592 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
593 passed = 'FAILED stest 1'
594 info = 1
595 END IF
596 END IF
597
598
599
600 IF( info.EQ.0 ) THEN
601
602 il = -1
603 iu = -1
604 jobz = 'N'
605 range = 'I'
606
607
608
610 $ iseed, win( 1+iprepad ), maxsize,
611 $ vecsize, valsize )
612
613 levrsize = valsize
614
615 CALL pcseprsubtst( .true., jobz, range, uplo, n, vl, vu, il,
616 $ iu, thresh, abstol, a, copya, z, 1, 1,
617 $ desca, win( 1+iprepad ), wnew, ifail,
618 $ iclustr, gap, iprepad, ipostpad,
619 $ work( indwork ), llwork,
620 $ rwork, lrwork, levrsize,
621 $ iwork, isizeevr, res, tstnrm, qtqnrm,
622 $ nout )
623
624 IF( res.NE.0 ) THEN
625 maxtstnrm =
max( tstnrm, maxtstnrm )
626 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
627 passed = 'FAILED stest 2'
628 info = 1
629 END IF
630 END IF
631
632
633
634 IF( info.EQ.0 ) THEN
635 il = -1
636 iu = -1
637 jobz = 'V'
638 range = 'I'
639
640
641
643 $ iseed, win( 1+iprepad ), maxsize,
644 $ vecsize, valsize )
645
646 levrsize = vecsize
647
648 CALL pcseprsubtst( .true., jobz, range, uplo, n, vl, vu, il,
649 $ iu, thresh, abstol, a, copya, z, 1, 1,
650 $ desca, win( 1+iprepad ), wnew, ifail,
651 $ iclustr, gap, iprepad, ipostpad,
652 $ work( indwork ), llwork,
653 $ rwork, lrwork, levrsize,
654 $ iwork, isizeevr, res, tstnrm, qtqnrm,
655 $ nout )
656
657 IF( res.NE.0 ) THEN
658 maxtstnrm =
max( tstnrm, maxtstnrm )
659 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
660 passed = 'FAILED stest 3'
661 info = 1
662 END IF
663 END IF
664
665
666
667 IF( info.EQ.0 ) THEN
668 vl = one
669 vu = -one
670 jobz = 'N'
671 range = 'V'
672
673
674
676 $ iseed, win( 1+iprepad ), maxsize,
677 $ vecsize, valsize )
678
679 levrsize = valsize
680
681 CALL pcseprsubtst( .true., jobz, range, uplo, n, vl, vu, il,
682 $ iu, thresh, abstol, a, copya, z, 1, 1,
683 $ desca, win( 1+iprepad ), wnew, ifail,
684 $ iclustr, gap, iprepad, ipostpad,
685 $ work( indwork ), llwork,
686 $ rwork, lrwork, levrsize,
687 $ iwork, isizeevr, res, tstnrm, qtqnrm,
688 $ nout )
689
690 IF( res.NE.0 ) THEN
691 maxtstnrm =
max( tstnrm, maxtstnrm )
692 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
693 passed = 'FAILED stest 4'
694 info = 1
695 END IF
696 END IF
697
698
699
700 IF( info.EQ.0 ) THEN
701 vl = one
702 vu = -one
703 jobz = 'V'
704 range = 'V'
705
706
707
709 $ iseed, win( 1+iprepad ), maxsize,
710 $ vecsize, valsize )
711
712 levrsize = vecsize
713
714 CALL pcseprsubtst( .true., jobz, range, uplo, n, vl, vu, il,
715 $ iu, thresh, abstol, a, copya, z, 1, 1,
716 $ desca, win( 1+iprepad ), wnew, ifail,
717 $ iclustr, gap, iprepad, ipostpad,
718 $ work( indwork ), llwork,
719 $ rwork, lrwork, levrsize,
720 $ iwork, isizeevr, res, tstnrm, qtqnrm,
721 $ nout )
722
723 IF( res.NE.0 ) THEN
724 maxtstnrm =
max( tstnrm, maxtstnrm )
725 maxqtqnrm =
max( qtqnrm, maxqtqnrm )
726 passed = 'FAILED stest 5'
727 info = 1
728 END IF
729 END IF
730 END IF
731
732 CALL igamx2d( context, 'All', ' ', 1, 1, info, 1, -1, -1, -1, -1,
733 $ -1 )
734 IF( info.EQ.1 ) THEN
735 IF( iam.EQ.0 .AND. .false. ) THEN
736 WRITE( nout, fmt = 9994 )'C '
737 WRITE( nout, fmt = 9993 )iseedin( 1 )
738 WRITE( nout, fmt = 9992 )iseedin( 2 )
739 WRITE( nout, fmt = 9991 )iseedin( 3 )
740 WRITE( nout, fmt = 9990 )iseedin( 4 )
741 IF(
lsame( uplo,
'L' ) )
THEN
742 WRITE( nout, fmt = 9994 )' UPLO= ''L'' '
743 ELSE
744 WRITE( nout, fmt = 9994 )' UPLO= ''U'' '
745 END IF
746 IF(
lsame( subtests,
'Y' ) )
THEN
747 WRITE( nout, fmt = 9994 )' SUBTESTS= ''Y'' '
748 ELSE
749 WRITE( nout, fmt = 9994 )' SUBTESTS= ''N'' '
750 END IF
751 WRITE( nout, fmt = 9989 )n
752 WRITE( nout, fmt = 9988 )nprow
753 WRITE( nout, fmt = 9987 )npcol
754 WRITE( nout, fmt = 9986 )nb
755 WRITE( nout, fmt = 9985 )mattype
756 WRITE( nout, fmt = 9982 )abstol
757 WRITE( nout, fmt = 9981 )thresh
758 WRITE( nout, fmt = 9994 )'C '
759 END IF
760 END IF
761
762 CALL slcombine( context,
'All',
'>',
'W', 6, 1, wtime )
763 CALL slcombine( context,
'All',
'>',
'C', 6, 1, ctime )
764 IF( iam.EQ.0 ) THEN
765 IF( info.EQ.0 .OR. info.EQ.1 ) THEN
766 IF( wtime( 1 ).GE.0.0 ) THEN
767 WRITE( nout, fmt = 9999 )n, nb, nprow, npcol, mattype,
768 $ subtests, wtime( 1 ), ctime( 1 ), maxtstnrm,
769 $ maxqtqnrm, passed
770 ELSE
771 WRITE( nout, fmt = 9998 )n, nb, nprow, npcol, mattype,
772 $ subtests, ctime( 1 ), maxtstnrm, maxqtqnrm, passed
773 END IF
774 ELSE IF( info.EQ.2 ) THEN
775 IF( wtime( 1 ).GE.0.0 ) THEN
776 WRITE( nout, fmt = 9997 )n, nb, nprow, npcol, mattype,
777 $ subtests, wtime( 1 ), ctime( 1 )
778 ELSE
779 WRITE( nout, fmt = 9996 )n, nb, nprow, npcol, mattype,
780 $ subtests, ctime( 1 )
781 END IF
782 ELSE IF( info.EQ.3 ) THEN
783 WRITE( nout, fmt = 9995 )n, nb, nprow, npcol, mattype,
784 $ subtests
785 END IF
786
787 END IF
788
789
790 RETURN
791 9999 FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x,
792 $ f8.2, 1x, f8.2, 1x, g9.2, 1x, g9.2, 1x, a14 )
793 9998 FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
794 $ 1x, f8.2, 1x, g9.2, 1x, g9.2, a14 )
795 9997 FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, f8.2,
796 $ 1x, f8.2, 21x, 'Bypassed' )
797 9996 FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 1x, 8x,
798 $ 1x, f8.2, 21x, 'Bypassed' )
799 9995 FORMAT( 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 3x, a1, 32x,
800 $ 'Bad MEMORY parameters' )
801 9994 FORMAT( a )
802 9993 FORMAT( ' ISEED( 1 ) =', i8 )
803 9992 FORMAT( ' ISEED( 2 ) =', i8 )
804 9991 FORMAT( ' ISEED( 3 ) =', i8 )
805 9990 FORMAT( ' ISEED( 4 ) =', i8 )
806 9989 FORMAT( ' N=', i8 )
807 9988 FORMAT( ' NPROW=', i8 )
808 9987 FORMAT( ' NPCOL=', i8 )
809 9986 FORMAT( ' NB=', i8 )
810 9985 FORMAT( ' MATTYPE=', i8 )
811
812
813 9982 FORMAT( ' ABSTOL=', d16.6 )
814 9981 FORMAT( ' THRESH=', d16.6 )
815
816
817
818
subroutine pcmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pclaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
real function pslamch(ictxt, cmach)
subroutine pcchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine pcelset(a, ia, ja, desca, alpha)
subroutine pcfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
subroutine pclasizeheevr(wknown, range, n, desca, vl, vu, il, iu, iseed, win, maxsize, vecsize, valsize)
subroutine pclasizesepr(desca, iprepad, ipostpad, sizemqrleft, sizemqrright, sizeqrf, sizetms, sizeqtq, sizechk, sizeheevr, rsizeheevr, isizeheevr, sizesubtst, rsizesubtst, isizesubtst, sizetst, rsizetst, isizetst)
subroutine pclatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, ia, ja, desca, order, work, lwork, info)
subroutine pcseprsubtst(wknown, jobz, range, uplo, n, vl, vu, il, iu, thresh, abstol, a, copya, z, ia, ja, desca, win, wnew, ifail, iclustr, gap, iprepad, ipostpad, work, lwork, rwork, lrwork, lwork1, iwork, liwork, result, tstnrm, qtqnrm, nout)
real function slaran(iseed)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)