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