3
4
5
6
7
8
9
10 LOGICAL CHECK
11 INTEGER IAM, KFAIL, KPASS, KSKIP, NMAT, NOUT, NPROCS,
12 $ TOTMEM
13 REAL THRESH
14
15
16 INTEGER NVAL( * )
17 DOUBLE PRECISION MEM( * )
18
19
20
21
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 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
72 $ MB_, NB_, RSRC_, CSRC_, LLD_
73 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
74 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
75 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
76 INTEGER DBLESZ
77 DOUBLE PRECISION PADVAL
78 parameter( dblesz = 8, padval = -9923.0d+0 )
79 INTEGER TIMETESTS
80 parameter( timetests = 11 )
81 INTEGER TESTS
82 parameter( tests = 8 )
83 INTEGER MINTIMEN
84 parameter( mintimen = 8 )
85
86
87 LOGICAL TIME
88 CHARACTER UPLO
89 CHARACTER*6 PASSED
90 INTEGER DUMMY, IASEED, ICTXT, IMIDPAD, INFO, IPA, IPD,
91 $ IPE, IPOSTPAD, IPREPAD, IPT, IPW, ITEMP, J, K,
92 $ LCM, LWMIN, MAXTESTS, MEMSIZ, MYCOL, MYROW, N,
93 $ NB, NDIAG, NGRIDS, NN, NOFFD, NP, NPCOL, NPROW,
94 $ NPS, NQ, SPLITSTIMED, WORKSIZ, WORKTRD
95 DOUBLE PRECISION ANORM, FRESID, NOPS, TMFLOPS
96
97
98 INTEGER ANBTEST( TESTS ), ANBTIME( TIMETESTS ),
99 $ BALTEST( TESTS ), BALTIME( TIMETESTS ),
100 $ DESCA( DLEN_ ), DESCD( DLEN_ ), IERR( 1 ),
101 $ INTERTEST( TESTS ), INTERTIME( TIMETESTS ),
102 $ PNBTEST( TESTS ), PNBTIME( TIMETESTS ),
103 $ TWOGEMMTEST( TESTS ), TWOGEMMTIME( TIMETESTS )
104 DOUBLE PRECISION CTIME( 100 ), WTIME( 100 )
105
106
107 EXTERNAL blacs_barrier, blacs_get, blacs_gridexit,
108 $ blacs_gridinfo, blacs_gridinit,
descinit,
112
113
114 LOGICAL LSAME
115 INTEGER ICEIL, ILCM, NUMROC, PJLAENV
116 DOUBLE PRECISION PDLANSY
118
119
120 INTRINSIC dble, int,
max, sqrt
121
122
123
124 INTEGER ANB, BALANCED, BCKBLOCK, GSTBLOCK, INTERLEAVE,
125 $ LLTBLOCK, MINSZ, PNB, TIMEINTERNALS, TIMING,
126 $ TRSBLOCK, TWOGEMMS
127
128
129 COMMON / blocksizes / gstblock, lltblock, bckblock,
130 $ trsblock
131 COMMON / minsize / minsz
132 COMMON / pjlaenvtiming / timing
133 COMMON / tailoredopts / pnb, anb, interleave,
134 $ balanced, twogemms
135 COMMON / timecontrol / timeinternals
136
137
138 DATA baltime / 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0 /
139 DATA intertime / 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1 /
140 DATA twogemmtime / 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 /
141 DATA anbtime / 16, 16, 16, 16, 16, 8, 8, 32, 32, 16,
142 $ 16 /
143 DATA pnbtime / 32, 32, 32, 32, 32, 32, 32, 32, 32,
144 $ 16, 64 /
145 DATA baltest / 0, 0, 0, 0, 1, 1, 1, 1 /
146 DATA intertest / 0, 0, 1, 1, 0, 0, 1, 1 /
147 DATA twogemmtest / 0, 1, 0, 1, 0, 1, 0, 1 /
148 DATA anbtest / 1, 2, 3, 16, 1, 2, 3, 16 /
149 DATA pnbtest / 1, 16, 8, 1, 16, 8, 1, 16 /
150
151
152
153 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
154 $ rsrc_.LT.0 )RETURN
155
156
157 iaseed = 0
158 splitstimed = 0
159 nb = 1
160 uplo = 'L'
161 memsiz = totmem / dblesz
162
163
164
165 IF( iam.EQ.0 ) THEN
166 WRITE( nout, fmt = * )
167 WRITE( nout, fmt = 9995 )
168 WRITE( nout, fmt = 9994 )
169 WRITE( nout, fmt = 9993 )
170 WRITE( nout, fmt = * )
171 END IF
172
173
174
175 ngrids = int( sqrt( dble( nprocs ) ) )
176
177 DO 30 nn = 1, ngrids
178
179 nprow = nn
180 npcol = nn
181 ierr( 1 ) = 0
182
183
184
185 CALL blacs_get( -1, 0, ictxt )
186 CALL blacs_gridinit( ictxt, 'Row-major', nprow, npcol )
187 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
188
189
190
191 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
192 $ GO TO 30
193
194 DO 20 j = 1, nmat
195
196 n = nval( j )
197
198
199
200 ierr( 1 ) = 0
201 IF( n.LT.1 ) THEN
202 IF( iam.EQ.0 )
203 $ WRITE( nout, fmt = 9999 )'MATRIX', 'N', n
204 ierr( 1 ) = 1
205 END IF
206
207
208
209 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
210
211 IF( ierr( 1 ).GT.0 ) THEN
212 IF( iam.EQ.0 )
213 $ WRITE( nout, fmt = 9997 )'matrix'
214 kskip = kskip + 1
215 GO TO 20
216 END IF
217
218
219
220 IF( n.GT.mintimen ) THEN
221
222
223
224
225
226
227
228
229
230 time = .true.
231 maxtests = timetests + 2
232 ELSE
233 time = .false.
234 maxtests = tests
235 END IF
236
237
238 DO 10 k = 1, maxtests
239 timeinternals = 0
240 IF( time ) THEN
241 IF( k.GE.maxtests-1 ) THEN
242
243
244
245
246
247
248
249
250 minsz = -13
251 balanced = -13
252 interleave = -13
253 twogemms = -13
254 anb = -13
255 pnb = -13
256 timing = 1
257 dummy =
pjlaenv( ictxt, 3,
'PDSYTTRD',
'L', 0, 0,
258 $ 0, 0 )
259 IF( k.EQ.maxtests )
260 $ timeinternals = 1
261 ELSE
262 timing = 0
263 minsz = 1
264 balanced = baltime( k )
265 interleave = intertime( k )
266 twogemms = twogemmtime( k )
267 anb = anbtime( k )
268 pnb = pnbtime( k )
269 END IF
270 ELSE
271 timing = 0
272 minsz = 1
273 balanced = baltest( k )
274 interleave = intertest( k )
275 twogemms = twogemmtest( k )
276 anb = anbtest( k )
277 pnb = pnbtest( k )
278 END IF
279
280
281
282
283 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
284 CALL igebs2d( ictxt, 'All', ' ', 1, 1, splitstimed,
285 $ 1 )
286 ELSE
287 CALL igebr2d( ictxt, 'All', ' ', 1, 1, splitstimed, 1,
288 $ 0, 0 )
289 END IF
290
291
292 IF( splitstimed.EQ.0 .AND. k.EQ.maxtests )
293 $ GO TO 10
294
295
296
297
298
299 IF( pnb.EQ.1 )
300 $ pnb = 1 + iam
301
302
303
304 np =
numroc( n, nb, myrow, 0, nprow )
305 nq =
numroc( n, nb, mycol, 0, npcol )
306 IF( check ) THEN
307 iprepad =
max( nb, np )
308 imidpad = nb
309 ipostpad =
max( nb, nq )
310 ELSE
311 iprepad = 0
312 imidpad = 0
313 ipostpad = 0
314 END IF
315
316
317
318
319 CALL descinit( desca, n, n, nb, nb, 0, 0, ictxt,
320 $
max( 1, np )+imidpad, ierr( 1 ) )
321
322 CALL descinit( descd, 1, n, nb, nb, 0, 0, ictxt, 1,
323 $ info )
324
325
326
327 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
328
329 IF( ierr( 1 ).LT.0 ) THEN
330 IF( iam.EQ.0 )
331 $ WRITE( nout, fmt = 9997 )'descriptor'
332 kskip = kskip + 1
333 GO TO 10
334 END IF
335
336
337
338
339 ndiag = nq
340 IF(
lsame( uplo,
'U' ) )
THEN
341 noffd = nq
342 ELSE
343 noffd =
numroc( n-1, nb, mycol, 0, npcol )
344 END IF
345
346 ipa = iprepad + 1
347 ipd = ipa + desca( lld_ )*nq + ipostpad + iprepad
348 ipe = ipd + ndiag + ipostpad + iprepad
349 ipt = ipe + noffd + ipostpad + iprepad
350 ipw = ipt + nq + ipostpad + iprepad
351
352
353
354
355 nps =
max(
numroc( n, 1, 0, 0, nprow ), 2*anb )
356 lwmin = 2*( anb+1 )*( 4*nps+2 ) + nps
357
358 worktrd = lwmin + ipostpad
359 worksiz = worktrd
360
361
362
363 IF( check ) THEN
364 itemp = 2*nq + np
365 IF( nprow.NE.npcol ) THEN
366 lcm =
ilcm( nprow, npcol )
367 itemp = nb*
iceil(
iceil( np, nb ), lcm / nprow ) +
368 $ itemp
369 END IF
370 itemp =
max( itemp, 2*( nb+np )*nb )
371 worksiz =
max( lwmin, itemp ) + ipostpad
372 END IF
373
374
375
376 ierr( 1 ) = 0
377 IF( ipw+worksiz.GT.memsiz ) THEN
378 IF( iam.EQ.0 )
379 $ WRITE( nout, fmt = 9996 )'Tridiagonal reduction',
380 $ ( ipw+worksiz )*dblesz
381 ierr( 1 ) = 1
382 END IF
383
384
385
386 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
387
388 IF( ierr( 1 ).GT.0 ) THEN
389 IF( iam.EQ.0 )
390 $ WRITE( nout, fmt = 9997 )'MEMORY'
391 kskip = kskip + 1
392 GO TO 10
393 END IF
394
395
396
397
398
399 CALL pdmatgen( ictxt,
'Hemm',
'N', desca( m_ ),
400 $ desca( n_ ), desca( mb_ ), desca( nb_ ),
401 $ mem( ipa ), desca( lld_ ), desca( rsrc_ ),
402 $ desca( csrc_ ), iaseed, 0, np, 0, nq,
403 $ myrow, mycol, nprow, npcol )
404
405
406
407
408 IF( check ) THEN
409 CALL pdfillpad( ictxt, np, nq, mem( ipa-iprepad ),
410 $ desca( lld_ ), iprepad, ipostpad,
411 $ padval )
412 CALL pdfillpad( ictxt, ndiag, 1, mem( ipd-iprepad ),
413 $ ndiag, iprepad, ipostpad, padval )
414 CALL pdfillpad( ictxt, noffd, 1, mem( ipe-iprepad ),
415 $ noffd, iprepad, ipostpad, padval )
416 CALL pdfillpad( ictxt, nq, 1, mem( ipt-iprepad ), nq,
417 $ iprepad, ipostpad, padval )
418 CALL pdfillpad( ictxt, worksiz-ipostpad, 1,
419 $ mem( ipw-iprepad ), worksiz-ipostpad,
420 $ iprepad, ipostpad, padval )
421 anorm =
pdlansy(
'I', uplo, n, mem( ipa ), 1, 1,
422 $ desca, mem( ipw ) )
423 CALL pdchekpad( ictxt,
'PDLANSY', np, nq,
424 $ mem( ipa-iprepad ), desca( lld_ ),
425 $ iprepad, ipostpad, padval )
426 CALL pdchekpad( ictxt,
'PDLANSY', worksiz-ipostpad, 1,
427 $ mem( ipw-iprepad ), worksiz-ipostpad,
428 $ iprepad, ipostpad, padval )
429 CALL pdfillpad( ictxt, worktrd-ipostpad, 1,
430 $ mem( ipw-iprepad ), worktrd-ipostpad,
431 $ iprepad, ipostpad, padval )
432 END IF
433
435 CALL blacs_barrier( ictxt, 'All' )
437
438
439
440 CALL pdsyttrd( uplo, n, mem( ipa ), 1, 1, desca,
441 $ mem( ipd ), mem( ipe ), mem( ipt ),
442 $ mem( ipw ), lwmin, info )
443
445
446 IF( check ) THEN
447
448
449
450 CALL pdchekpad( ictxt,
'PDSYTTRD', np, nq,
451 $ mem( ipa-iprepad ), desca( lld_ ),
452 $ iprepad, ipostpad, padval )
453 CALL pdchekpad( ictxt,
'PDSYTTRD', ndiag, 1,
454 $ mem( ipd-iprepad ), ndiag, iprepad,
455 $ ipostpad, padval )
456
457 CALL pdchekpad( ictxt,
'PDSYTTRDc', noffd, 1,
458 $ mem( ipe-iprepad ), noffd, iprepad,
459 $ ipostpad, padval )
460 CALL pdchekpad( ictxt,
'PDSYTTRDd', nq, 1,
461 $ mem( ipt-iprepad ), nq, iprepad,
462 $ ipostpad, padval )
463 CALL pdchekpad( ictxt,
'PDSYTTRDe', worktrd-ipostpad,
464 $ 1, mem( ipw-iprepad ),
465 $ worktrd-ipostpad, iprepad, ipostpad,
466 $ padval )
467 CALL pdfillpad( ictxt, worksiz-ipostpad, 1,
468 $ mem( ipw-iprepad ), worksiz-ipostpad,
469 $ iprepad, ipostpad, padval )
470
471
472
473 CALL pdsytdrv( uplo, n, mem( ipa ), 1, 1, desca,
474 $ mem( ipd ), mem( ipe ), mem( ipt ),
475 $ mem( ipw ), ierr( 1 ) )
476
477
478
479
480
481 CALL pdlatran( n, 1, mem( ipa ), 1, 1, desca,
482 $ mem( ipw ) )
483 CALL pdlafchk(
'Hemm',
'No', n, n, mem( ipa ), 1, 1,
484 $ desca, iaseed, anorm, fresid,
485 $ mem( ipw ) )
486
487
488
489 CALL pdchekpad( ictxt,
'PDSYTDRVf', np, nq,
490 $ mem( ipa-iprepad ), desca( lld_ ),
491 $ iprepad, ipostpad, padval )
492 CALL pdchekpad( ictxt,
'PDSYTDRVg', ndiag, 1,
493 $ mem( ipd-iprepad ), ndiag, iprepad,
494 $ ipostpad, padval )
495 CALL pdchekpad( ictxt,
'PDSYTDRVh', noffd, 1,
496 $ mem( ipe-iprepad ), noffd, iprepad,
497 $ ipostpad, padval )
498 CALL pdchekpad( ictxt,
'PDSYTDRVi', worksiz-ipostpad,
499 $ 1, mem( ipw-iprepad ),
500 $ worksiz-ipostpad, iprepad, ipostpad,
501 $ padval )
502
503
504
505 IF( fresid.LE.thresh .AND. fresid-fresid.EQ.
506 $ 0.0d+0 .AND. ierr( 1 ).EQ.0 ) THEN
507 kpass = kpass + 1
508 passed = 'PASSED'
509 ELSE
510 IF( myrow.EQ.0 .AND. mycol.EQ.0 )
511 $ WRITE( nout, fmt = 9991 )fresid
512 kfail = kfail + 1
513 passed = 'FAILED'
514
515
516 END IF
517
518
519 IF( myrow.EQ.0 .AND. mycol.EQ.0 .AND. ierr( 1 ).NE.0 )
520 $ WRITE( nout, fmt = * )'D or E copies incorrect ...'
521 ELSE
522
523
524
525 kpass = kpass + 1
526 fresid = fresid - fresid
527 passed = 'BYPASS'
528 END IF
529
530
531
532 CALL slcombine( ictxt,
'All',
'>',
'W', 50, 1, wtime )
533 CALL slcombine( ictxt,
'All',
'>',
'C', 50, 1, ctime )
534
535
536
537 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
538
539
540
541 nops = dble( n )
542 nops = ( 16.0d+0 / 3.0d+0 )*nops**3
543 nops = nops / 1.0d+6
544
545
546
547 IF( wtime( 1 ).GT.0.0d+0 ) THEN
548 tmflops = nops / wtime( 1 )
549 ELSE
550 tmflops = 0.0d+0
551 END IF
552 IF( wtime( 1 ).GE.0.0d+0 )
553 $ WRITE( nout, fmt = 9992 )'WALL', n, interleave,
554 $ twogemms, balanced, anb, pnb, nprow*npcol,
555 $ wtime( 1 ), tmflops, fresid, passed
556
557
558
559 IF( ctime( 1 ).GT.0.0d+0 ) THEN
560 tmflops = nops / ctime( 1 )
561 ELSE
562 tmflops = 0.0d+0
563 END IF
564 IF( ctime( 1 ).GE.0.0d+0 )
565 $ WRITE( nout, fmt = 9992 )'CPU ', n, interleave,
566 $ twogemms, balanced, anb, pnb, nprow*npcol,
567 $ ctime( 1 ), tmflops, fresid, passed
568
569
570
571
572
573 IF( wtime( 13 )+wtime( 15 )+wtime( 16 ).GT.0.0d+0 .OR.
574 $ ctime( 13 )+ctime( 15 )+ctime( 16 ).GT.0.0d+0 )
575 $ THEN
576 splitstimed = 1
577 END IF
578 IF( splitstimed.EQ.1 ) THEN
579 WRITE( nout, fmt = 9990 )wtime( 10 ), wtime( 11 ),
580 $ wtime( 12 ), wtime( 13 ), wtime( 14 ),
581 $ wtime( 15 )
582 WRITE( nout, fmt = 9989 )wtime( 16 ), wtime( 17 ),
583 $ wtime( 18 ), wtime( 19 ), wtime( 20 ),
584 $ wtime( 21 )
585
586 WRITE( nout, fmt = 9988 )ctime( 10 ), ctime( 11 ),
587 $ ctime( 12 ), ctime( 13 ), ctime( 14 ),
588 $ ctime( 15 )
589 WRITE( nout, fmt = 9987 )ctime( 16 ), ctime( 17 ),
590 $ ctime( 18 ), ctime( 19 ), ctime( 20 ),
591 $ ctime( 21 )
592 WRITE( nout, fmt = 9986 )n, nprow*npcol, pnb, anb,
593 $ interleave, balanced, twogemms, timeinternals
594 END IF
595 END IF
596 10 CONTINUE
597 20 CONTINUE
598
599 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
600 IF( splitstimed.EQ.1 ) THEN
601 WRITE( nout, fmt = 9985 )
602 WRITE( nout, fmt = 9984 )
603 WRITE( nout, fmt = 9983 )
604 WRITE( nout, fmt = 9982 )
605 WRITE( nout, fmt = 9981 )
606 WRITE( nout, fmt = 9980 )
607 WRITE( nout, fmt = 9979 )
608 WRITE( nout, fmt = 9978 )
609 WRITE( nout, fmt = 9977 )
610 WRITE( nout, fmt = 9976 )
611 WRITE( nout, fmt = 9975 )
612 WRITE( nout, fmt = 9974 )
613 WRITE( nout, fmt = 9973 )
614 END IF
615 END IF
616
617
618 CALL blacs_gridexit( ictxt )
619 30 CONTINUE
620 RETURN
621
622 9999 FORMAT( 'ILLEGAL ', a6, ': ', a5, ' = ', i3,
623 $ '; It should be at least 1' )
624 9998 FORMAT( 'ILLEGAL GRID: nprow*npcol = ', i4, '. It can be at most',
625 $ i4 )
626 9997 FORMAT( 'Bad ', a6, ' parameters: going on to next test case.' )
627 9996 FORMAT( 'Unable to perform ', a, ': need TOTMEM of at least',
628 $ i11 )
629
630 9995 FORMAT( 'PDSYTTRD, tailored reduction to tridiagonal form, test.'
631 $ )
632 9994 FORMAT( 'TIME N int 2gm bal anb pnb prcs TRD Time ',
633 $ ' MFLOPS Residual CHECK' )
634 9993 FORMAT( '---- ---- --- --- --- --- --- ---- -------- ',
635 $ '----------- -------- ------' )
636 9992 FORMAT( a4, 1x, i5, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 1x, i3, 1x,
637 $ i5, 1x, f9.2, 1x, f11.2, 1x, f8.2, 1x, a6 )
638 9991 FORMAT( '||A - Q*T*Q''|| / (||A|| * N * eps) = ', g25.7 )
639 9990 FORMAT( 'wsplit1=[wsplit1;', f9.2, 1x, f9.2, 1x, f9.2, 1x, f9.2,
640 $ 1x, f9.2, 1x, f9.2, ' ];' )
641 9989 FORMAT( 'wsplit2=[wsplit2;', f9.2, 1x, f9.2, 1x, f9.2, 1x, f9.2,
642 $ 1x, f9.2, 1x, f9.2, ' ];' )
643 9988 FORMAT( 'csplit1=[csplit1;', f9.2, 1x, f9.2, 1x, f9.2, 1x, f9.2,
644 $ 1x, f9.2, 1x, f9.2, ' ];' )
645 9987 FORMAT( 'csplit2=[csplit2;', f9.2, 1x, f9.2, 1x, f9.2, 1x, f9.2,
646 $ 1x, f9.2, 1x, f9.2, ' ];' )
647 9986 FORMAT( 'size_opts=[size_opts;', i4, 1x, i4, 1x, i4, 1x, i4, 1x,
648 $ i4, 1x, i4, 1x, i4, 1x, i4, 1x, ' ];' )
649 9985 FORMAT( 'N=1; NPROCS=2; PNB=3; ANB=4; INTERLEAVE=5; BALANCED=6;',
650 $ ' TWOGEMMS=7; TIMEINTERNALS=8;' )
651 9984 FORMAT( 'S1_OVERHEAD = 1; % Should be mainly cost of barrier' )
652 9983 FORMAT( 'S1_BARRIER = 2; % Cost of barrier' )
653 9982 FORMAT( 'S1_UPDCURCOL = 3; % Update the current column' )
654 9981 FORMAT( 'S1_HOUSE = 4; % Compute the householder vector' )
655 9980 FORMAT( 'S1_SPREAD = 5; % Spread across' )
656 9979 FORMAT( 'S1_TRANSPOSE = 6; % Transpose' )
657 9978 FORMAT( 'S2_UPDCURBLK = 1; % Update the current block column' )
658 9977 FORMAT( 'S2_TRMVT = 2; % TRMVT v = A * h; vt = ht * A'' ' )
659 9976 FORMAT( 'S2_UPD_V = 3; % v = v + V * HT * h + H * VT * h ' )
660 9975 FORMAT( 'S2_TRANS_SUM = 4; % v = v + vt'' ' )
661 9974 FORMAT( 'S2_DOT = 5; % c = v'' * h ' )
662 9973 FORMAT( 'S2_R2K = 6; % A = A - v * h'' - h * v'' ' )
663
664
665
666
subroutine pdlafchk(aform, diag, m, n, a, ia, ja, desca, iaseed, anorm, fresid, work)
subroutine pdmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
integer function iceil(inum, idenom)
integer function ilcm(m, n)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pdchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
subroutine pdfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
double precision function pdlansy(norm, uplo, n, a, ia, ja, desca, work)
subroutine pdlatran(n, nb, a, ia, ja, desca, work)
subroutine pdsytdrv(uplo, n, a, ia, ja, desca, d, e, tau, work, info)
subroutine pdsyttrd(uplo, n, a, ia, ja, desca, d, e, tau, work, lwork, info)
integer function pjlaenv(ictxt, ispec, name, opts, n1, n2, n3, n4)
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)