SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
psttrdtester.f
Go to the documentation of this file.
1 SUBROUTINE psttrdtester( IAM, NPROCS, CHECK, NOUT, THRESH, NVAL,
2 $ NMAT, MEM, TOTMEM, KPASS, KFAIL, KSKIP )
3*
4* -- ScaLAPACK test routine (version 1.7) --
5* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
6* and University of California, Berkeley.
7* February 24, 2000
8*
9* .. Scalar Arguments ..
10 LOGICAL CHECK
11 INTEGER IAM, KFAIL, KPASS, KSKIP, NMAT, NOUT, NPROCS,
12 $ totmem
13 REAL THRESH
14* ..
15* .. Array Arguments ..
16 INTEGER NVAL( * )
17 REAL MEM( * )
18* ..
19*
20* Purpose
21* =======
22*
23* PSTTRDTESTER tests PSSYTTRD
24*
25* Arguments
26* =========
27*
28* IAM (local input) INTEGER
29* The local process number
30*
31* NPROCS (global input) INTEGER
32* The number of processors
33*
34* CHECK (global input) LOGICAL
35* Specifies whether the user wants to check the answer
36*
37* NOUT (local input) INTEGER
38* File descriptor
39*
40* THRESH (global input) REAL
41* Acceptable error threshold
42*
43* NVAL (global input) INTEGER array dimension NMAT
44* The matrix sizes to test
45*
46* NMAT (global input) INTEGER
47* The number of matrix sizes to test
48*
49* MEM (local input) REAL array dimension MEMSIZ
50* Where:
51* MEMSIZ = TOTMEM / REALSZ
52*
53* TOTMEM (global input) INTEGER
54* Number of bytes in MEM
55*
56* KPASS (local input/output) INTEGER
57* The number of tests which passed. Only relevant on
58* processor 0.
59*
60* KFAIL (local input/output) INTEGER
61* The number of tests which failed. Only relevant on
62* processor 0.
63*
64* KSKIP (local input/output) INTEGER
65* The number of tests which were skipped. Only relevant on
66* processor 0.
67*
68* ================================================================
69* .. Parameters ..
70 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
71 $ mb_, nb_, rsrc_, csrc_, lld_
72 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
73 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
74 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
75 INTEGER REALSZ
76 REAL PADVAL
77 parameter( realsz = 4, padval = -9923.0e+0 )
78 INTEGER TIMETESTS
79 parameter( timetests = 11 )
80 INTEGER TESTS
81 parameter( tests = 8 )
82 INTEGER MINTIMEN
83 parameter( mintimen = 8 )
84* ..
85* .. Local Scalars ..
86 LOGICAL TIME
87 CHARACTER UPLO
88 CHARACTER*6 PASSED
89 INTEGER DUMMY, IASEED, ICTXT, IMIDPAD, INFO, IPA, IPD,
90 $ ipe, ipostpad, iprepad, ipt, ipw, itemp, j, k,
91 $ lcm, lwmin, maxtests, memsiz, mycol, myrow, n,
92 $ nb, ndiag, ngrids, nn, noffd, np, npcol, nprow,
93 $ nps, nq, splitstimed, worksiz, worktrd
94 REAL ANORM, FRESID
95 DOUBLE PRECISION NOPS, TMFLOPS
96* ..
97* .. Local Arrays ..
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* .. External Subroutines ..
107 EXTERNAL blacs_barrier, blacs_get, blacs_gridexit,
108 $ blacs_gridinfo, blacs_gridinit, descinit,
109 $ igebr2d, igebs2d, igsum2d, pschekpad,
112* ..
113* .. External Functions ..
114 LOGICAL LSAME
115 INTEGER ICEIL, ILCM, NUMROC, PJLAENV
116 REAL PSLANSY
117 EXTERNAL lsame, iceil, ilcm, numroc, pjlaenv, pslansy
118* ..
119* .. Intrinsic Functions ..
120 INTRINSIC dble, int, max, real, sqrt
121* ..
122*
123* .. Scalars in Common ..
124 INTEGER ANB, BALANCED, BCKBLOCK, GSTBLOCK, INTERLEAVE,
125 $ lltblock, minsz, pnb, timeinternals, timing,
126 $ trsblock, twogemms
127* ..
128* .. Common blocks ..
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* .. Data statements ..
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* .. Executable Statements ..
152* This is just to keep ftnchek and toolpack/1 happy
153 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
154 $ rsrc_.LT.0 )RETURN
155*
156*
157 iaseed = 100
158 splitstimed = 0
159 nb = 1
160 uplo = 'L'
161 memsiz = totmem / realsz
162*
163* Print headings
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* Loop over different process grids
174*
175 ngrids = int( sqrt( real( nprocs ) ) )
176*
177 DO 30 nn = 1, ngrids
178*
179 nprow = nn
180 npcol = nn
181 ierr( 1 ) = 0
182*
183* Define process grid
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* Go to bottom of loop if this case doesn't use my process
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* Make sure matrix information is correct
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* Make sure no one had error
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* Loop over different blocking sizes
219*
220 IF( n.GT.mintimen ) THEN
221*
222* For timing tests, we perform one or two extra tests.
223* Both of these extra tests are performed with the
224* default values for the performance tuning parameters.
225* The second extra test (which is only performed if
226* split times are non-zero) is performed with timeinternals
227* set to 1 (which forces barrier syncs between many
228* phases of the computation).
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* For the last two timings, we let pjlaenv set
244* the execution path values. These dummy
245* initializations aren't really necessary,
246* but they illustrate the fact that these values are
247* set in xpjlaenv. The dummy call to pjlaenv
248* has the side effect of setting ANB.
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, 'PSSYTTRD', '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* Skip the last test (with timeinternals = 1) if
281* PSSYTTRD is not collecting the split times.
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* The following hack tests to make sure that PNB need not
296* be the same on all processes. (Provided that PNB is set
297* to 1 in the TRD.dat file.)
298*
299 IF( pnb.EQ.1 )
300 $ pnb = 1 + iam
301*
302* Padding constants
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* Initialize the array descriptor for the matrix A
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* Check all processes for an error
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* Assign pointers into MEM for SCALAPACK arrays, A is
337* allocated starting at position MEM( IPREPAD+1 )
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* Calculate the amount of workspace required for the
353* reduction
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* Figure the amount of workspace required by the check
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* Check for adequate memory for problem size
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 )*realsz
381 ierr( 1 ) = 1
382 END IF
383*
384* Check all processes for an error
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* Generate the matrix A
398*
399 CALL psmatgen( 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* Need Infinity-norm of A for checking
407*
408 IF( check ) THEN
409 CALL psfillpad( ictxt, np, nq, mem( ipa-iprepad ),
410 $ desca( lld_ ), iprepad, ipostpad,
411 $ padval )
412 CALL psfillpad( ictxt, ndiag, 1, mem( ipd-iprepad ),
413 $ ndiag, iprepad, ipostpad, padval )
414 CALL psfillpad( ictxt, noffd, 1, mem( ipe-iprepad ),
415 $ noffd, iprepad, ipostpad, padval )
416 CALL psfillpad( ictxt, nq, 1, mem( ipt-iprepad ), nq,
417 $ iprepad, ipostpad, padval )
418 CALL psfillpad( ictxt, worksiz-ipostpad, 1,
419 $ mem( ipw-iprepad ), worksiz-ipostpad,
420 $ iprepad, ipostpad, padval )
421 anorm = pslansy( 'I', uplo, n, mem( ipa ), 1, 1,
422 $ desca, mem( ipw ) )
423 CALL pschekpad( ictxt, 'PSLANSY', np, nq,
424 $ mem( ipa-iprepad ), desca( lld_ ),
425 $ iprepad, ipostpad, padval )
426 CALL pschekpad( ictxt, 'PSLANSY', worksiz-ipostpad, 1,
427 $ mem( ipw-iprepad ), worksiz-ipostpad,
428 $ iprepad, ipostpad, padval )
429 CALL psfillpad( ictxt, worktrd-ipostpad, 1,
430 $ mem( ipw-iprepad ), worktrd-ipostpad,
431 $ iprepad, ipostpad, padval )
432 END IF
433*
434 CALL slboot
435 CALL blacs_barrier( ictxt, 'All' )
436 CALL sltimer( 1 )
437*
438* Reduce to symmetric tridiagonal form
439*
440 CALL pssyttrd( uplo, n, mem( ipa ), 1, 1, desca,
441 $ mem( ipd ), mem( ipe ), mem( ipt ),
442 $ mem( ipw ), lwmin, info )
443*
444 CALL sltimer( 1 )
445*
446 IF( check ) THEN
447*
448* Check for memory overwrite
449*
450 CALL pschekpad( ictxt, 'PSSYTTRD', np, nq,
451 $ mem( ipa-iprepad ), desca( lld_ ),
452 $ iprepad, ipostpad, padval )
453 CALL pschekpad( ictxt, 'PSSYTTRD', ndiag, 1,
454 $ mem( ipd-iprepad ), ndiag, iprepad,
455 $ ipostpad, padval )
456*
457 CALL pschekpad( ictxt, 'PSSYTTRDc', noffd, 1,
458 $ mem( ipe-iprepad ), noffd, iprepad,
459 $ ipostpad, padval )
460 CALL pschekpad( ictxt, 'PSSYTTRDd', nq, 1,
461 $ mem( ipt-iprepad ), nq, iprepad,
462 $ ipostpad, padval )
463 CALL pschekpad( ictxt, 'PSSYTTRDe', worktrd-ipostpad,
464 $ 1, mem( ipw-iprepad ),
465 $ worktrd-ipostpad, iprepad, ipostpad,
466 $ padval )
467 CALL psfillpad( ictxt, worksiz-ipostpad, 1,
468 $ mem( ipw-iprepad ), worksiz-ipostpad,
469 $ iprepad, ipostpad, padval )
470*
471* Compute fctres = ||A - QTQ'|| / (||A|| * N * eps)
472*
473 CALL pssytdrv( uplo, n, mem( ipa ), 1, 1, desca,
474 $ mem( ipd ), mem( ipe ), mem( ipt ),
475 $ mem( ipw ), ierr( 1 ) )
476*
477* TTRD does not preserve the upper triangular part of A.
478* The following call to PSLATRAN means that we only
479* check the lower triangular part of A - QTQ'
480*
481 CALL pslatran( n, 1, mem( ipa ), 1, 1, desca,
482 $ mem( ipw ) )
483 CALL pslafchk( 'Hemm', 'No', n, n, mem( ipa ), 1, 1,
484 $ desca, iaseed, anorm, fresid,
485 $ mem( ipw ) )
486*
487* Check for memory overwrite
488*
489 CALL pschekpad( ictxt, 'PSSYTDRVf', np, nq,
490 $ mem( ipa-iprepad ), desca( lld_ ),
491 $ iprepad, ipostpad, padval )
492 CALL pschekpad( ictxt, 'PSSYTDRVg', ndiag, 1,
493 $ mem( ipd-iprepad ), ndiag, iprepad,
494 $ ipostpad, padval )
495 CALL pschekpad( ictxt, 'PSSYTDRVh', noffd, 1,
496 $ mem( ipe-iprepad ), noffd, iprepad,
497 $ ipostpad, padval )
498 CALL pschekpad( ictxt, 'PSSYTDRVi', worksiz-ipostpad,
499 $ 1, mem( ipw-iprepad ),
500 $ worksiz-ipostpad, iprepad, ipostpad,
501 $ padval )
502*
503* Test residual and detect NaN result
504*
505 IF( fresid.LE.thresh .AND. fresid-fresid.EQ.
506 $ 0.0e+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* Don't perform the checking, only the timing operation
524*
525 kpass = kpass + 1
526 fresid = fresid - fresid
527 passed = 'BYPASS'
528 END IF
529*
530* Gather maximum of all CPU and WALL clock timings
531*
532 CALL slcombine( ictxt, 'All', '>', 'W', 50, 1, wtime )
533 CALL slcombine( ictxt, 'All', '>', 'C', 50, 1, ctime )
534*
535* Print results
536*
537 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
538*
539* TRD requires 16/3 N^3 floating point operations
540*
541 nops = dble( n )
542 nops = ( 16.0d+0 / 3.0d+0 )*nops**3
543 nops = nops / 1.0d+6
544*
545* Print WALL time
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* Print CPU time
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* If split times were collected (in PSSYttrd.f), print
571* them out.
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( 'PSSYTTRD, 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* End of PSTTRDTESTER
666*
667 END
subroutine pslafchk(aform, diag, m, n, a, ia, ja, desca, iaseed, anorm, fresid, work)
Definition pslafchk.f:3
subroutine psmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
Definition psmatgen.f:4
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
Definition descinit.f:3
#define max(A, B)
Definition pcgemr.c:180
subroutine pschekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
Definition pschekpad.f:3
subroutine psfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
Definition psfillpad.f:2
subroutine pslatran(n, nb, a, ia, ja, desca, work)
Definition pslatran.f:2
subroutine pssytdrv(uplo, n, a, ia, ja, desca, d, e, tau, work, info)
Definition pssytdrv.f:3
subroutine pssyttrd(uplo, n, a, ia, ja, desca, d, e, tau, work, lwork, info)
Definition pssyttrd.f:3
subroutine psttrdtester(iam, nprocs, check, nout, thresh, nval, nmat, mem, totmem, kpass, kfail, kskip)
Definition psttrdtester.f:3
subroutine slboot()
Definition sltimer.f:2
subroutine sltimer(i)
Definition sltimer.f:47
subroutine slcombine(ictxt, scope, op, timetype, n, ibeg, times)
Definition sltimer.f:267