OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
pzevcdriver.f
Go to the documentation of this file.
1 PROGRAM pzevcdriver
2*
3* -- ScaLAPACK testing driver (version 1.7) --
4* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
5* and University of California, Berkeley.
6* June, 2000
7*
8* Purpose
9* =======
10*
11* PZEVCDRIVER is the main test program for the COMPLEX*16
12* SCALAPACK PZTREVC routine. This test driver performs a right and
13* left eigenvector calculation of a triangular matrix followed by
14* a residual checks of the calcuated eigenvectors.
15*
16* The program must be driven by a short data file and uses the same
17* input file as the PZNEPDRIVER. An annotated example of a data file
18* can be obtained by deleting the first 3 characters from the following
19* 18 lines:
20* 'SCALAPACK, Version 1.8, NEP (Nonsymmetric EigenProblem) input file'
21* 'Intel iPSC/860 hypercube, gamma model.'
22* 'NEP.out' output file name (if any)
23* 6 device out
24* 8 number of problems sizes
25* 1 2 3 4 6 10 100 200 vales of N
26* 3 number of NB's
27* 6 20 40 values of NB
28* 4 number of process grids (ordered pairs of P & Q)
29* 1 2 1 4 values of P
30* 1 2 4 1 values of Q
31* 20.0 threshold
32*
33* Internal Parameters
34* ===================
35*
36* TOTMEM INTEGER, default = 2000000
37* TOTMEM is a machine-specific parameter indicating the
38* maximum amount of available memory in bytes.
39* The user should customize TOTMEM to his platform. Remember
40* to leave room in memory for the operating system, the BLACS
41* buffer, etc. For example, on a system with 8 MB of memory
42* per process (e.g., one processor on an Intel iPSC/860), the
43* parameters we use are TOTMEM=6200000 (leaving 1.8 MB for OS,
44* code, BLACS buffer, etc). However, for PVM, we usually set
45* TOTMEM = 2000000. Some experimenting with the maximum value
46* of TOTMEM may be required.
47*
48* ZPLXSZ INTEGER, default = 16 bytes.
49* ZPLXSZ indicate the length in bytes on the given platform
50* for a double precision complex.
51* MEM COMPLEX*16 array, dimension ( TOTMEM / ZPLXSZ )
52*
53* All arrays used by SCALAPACK routines are allocated from
54* this array and referenced by pointers. The integer IPA,
55* for example, is a pointer to the starting element of MEM for
56* the matrix A.
57*
58* Further Details
59* ==============
60*
61* Contributed by Mark Fahey, June, 2000
62*
63* =====================================================================
64*
65* .. Parameters ..
66 INTEGER block_cyclic_2d, csrc_, ctxt_, dlen_, dt_,
67 $ lld_, MB_, m_, nb_, n_, rsrc_
68 parameter( block_cyclic_2d = 1, dlen_ = 9, dt_ = 1,
69 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
70 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
71 INTEGER ZPLXSZ, totmem, memsiz, ntests
72 parameter( zplxsz = 16, totmem = 200000000,
73 $ memsiz = totmem / zplxsz, ntests = 20 )
74 COMPLEX*16 padval, zero, one
75 parameter( padval = ( -9923.0d+0, -9923.0d+0 ),
76 $ zero = ( 0.0d+0, 0.0d+0 ),
77 $ one = ( 1.0d+0, 0.0d+0 ) )
78* ..
79* .. Local Scalars ..
80 LOGICAL check
81 CHARACTER*6 passed
82 CHARACTER*80 outfile
83 INTEGER i, iam, iaseed, icol, ictxt, ii, iii, imidpad,
84 $ info, ipa, ipostpad, iprepad, ipvl, ipvr, ipw,
85 $ ipwr, ipz, irow, j, jj, jjj, k, kfail, kpass,
86 $ kskip, ktests, lda, ldz, lwork, m, mycol,
87 $ myrow, n, nb, ngrids, nmat, nnb, nout, np,
88 $ npcol, nprocs, nprow, nq, worksiz
89 REAL thresh
90 DOUBLE PRECISION anorm, fresid, nops, qresid, tmflops
91* ..
92* .. Local Arrays ..
93 LOGICAL select( 1 )
94 INTEGER desca( dlen_ ), descz( dlen_ ), ierr( 2 ),
95 $ nbval( ntests ), nval( ntests ),
96 $ pval( ntests ), qval( ntests )
97 DOUBLE PRECISION ctime( 2 ), result( 2 ), rwork( 5000 ),
98 $ wtime( 2 )
99 COMPLEX*16 mem( memsiz )
100* ..
101* .. External Subroutines ..
102 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
104 $ blacs_pinfo, descinit, igsum2d, infog2l,
107 $ sltimer, zgsum2d
108* ..
109* .. External Functions ..
110 INTEGER ilcm, numroc
111 DOUBLE PRECISION pzlanhs
112 EXTERNAL ilcm, numroc, pzlanhs
113* ..
114* .. Intrinsic Functions ..
115 INTRINSIC dble, max, min
116* ..
117* .. Data statements ..
118 DATA kfail, kpass, kskip, ktests / 4*0 /
119* ..
120* .. Executable Statements ..
121*
122* Get starting information
123*
124 CALL blacs_pinfo( iam, nprocs )
125 iaseed = 100
126 CALL pzevcinfo( outfile, nout, nmat, nval, ntests, nnb, nbval,
127 $ ntests, ngrids, pval, ntests, qval, ntests,
128 $ thresh, mem, iam, nprocs )
129 check = ( thresh.GE.0.0e+0 )
130*
131* Print headings
132*
133 IF( iam.EQ.0 ) THEN
134 WRITE( nout, fmt = * )
135 WRITE( nout, fmt = 9995 )
136 WRITE( nout, fmt = 9994 )
137 WRITE( nout, fmt = * )
138 END IF
139*
140* Loop over different process grids
141*
142 DO 40 i = 1, ngrids
143*
144 nprow = pval( i )
145 npcol = qval( i )
146*
147* Make sure grid information is correct
148*
149 ierr( 1 ) = 0
150 IF( nprow.LT.1 ) THEN
151 IF( iam.EQ.0 )
152 $ WRITE( nout, fmt = 9999 )'GRID', 'nprow', nprow
153 ierr( 1 ) = 1
154 ELSE IF( npcol.LT.1 ) THEN
155 IF( iam.EQ.0 )
156 $ WRITE( nout, fmt = 9999 )'GRID', 'npcol', npcol
157 ierr( 1 ) = 1
158 ELSE IF( nprow*npcol.GT.nprocs ) THEN
159 IF( iam.EQ.0 )
160 $ WRITE( nout, fmt = 9998 )nprow*npcol, nprocs
161 ierr( 1 ) = 1
162 END IF
163*
164 IF( ierr( 1 ).GT.0 ) THEN
165 IF( iam.EQ.0 )
166 $ WRITE( nout, fmt = 9997 )'grid'
167 kskip = kskip + 1
168 GO TO 40
169 END IF
170*
171* Define process grid
172*
173 CALL blacs_get( -1, 0, ictxt )
174 CALL blacs_gridinit( ictxt, 'Row-major', nprow, npcol )
175 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
176*
177* Go to bottom of process grid loop if this case doesn't use my
178* process
179*
180 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
181 $ GO TO 40
182*
183 DO 30 j = 1, nmat
184*
185 n = nval( j )
186*
187* Make sure matrix information is correct
188*
189 ierr( 1 ) = 0
190 IF( n.LT.1 ) THEN
191 IF( iam.EQ.0 )
192 $ WRITE( nout, fmt = 9999 )'MATRIX', 'N', n
193 ierr( 1 ) = 1
194 END IF
195*
196* Check all processes for an error
197*
198 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
199*
200 IF( ierr( 1 ).GT.0 ) THEN
201 IF( iam.EQ.0 )
202 $ WRITE( nout, fmt = 9997 )'matrix'
203 kskip = kskip + 1
204 GO TO 30
205 END IF
206*
207 DO 20 k = 1, nnb
208*
209 nb = nbval( k )
210*
211* Make sure nb is legal
212*
213 ierr( 1 ) = 0
214 IF( nb.LT.6 ) THEN
215 ierr( 1 ) = 1
216 IF( iam.EQ.0 )
217 $ WRITE( nout, fmt = 9999 )'NB', 'NB', nb
218 END IF
219*
220* Check all processes for an error
221*
222 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
223*
224 IF( ierr( 1 ).GT.0 ) THEN
225 IF( iam.EQ.0 )
226 $ WRITE( nout, fmt = 9997 )'NB'
227 kskip = kskip + 1
228 GO TO 20
229 END IF
230*
231* Padding constants
232*
233 np = numroc( n, nb, myrow, 0, nprow )
234 nq = numroc( n, nb, mycol, 0, npcol )
235 IF( check ) THEN
236 iprepad = max( nb, np )
237 imidpad = nb
238 ipostpad = max( nb, nq )
239 iprepad = iprepad + 1000
240 imidpad = imidpad + 1000
241 ipostpad = ipostpad + 1000
242 ELSE
243 iprepad = 0
244 imidpad = 0
245 ipostpad = 0
246 END IF
247*
248* Initialize the array descriptor for the matrix A
249*
250 CALL descinit( desca, n, n, nb, nb, 0, 0, ictxt,
251 $ max( 1, np )+imidpad, ierr( 1 ) )
252*
253* Initialize the array descriptor for the matrix Z
254*
255 CALL descinit( descz, n, n, nb, nb, 0, 0, ictxt,
256 $ max( 1, np )+imidpad, ierr( 2 ) )
257*
258 lda = desca( lld_ )
259 ldz = descz( lld_ )
260*
261* Check all processes for an error
262*
263 CALL igsum2d( ictxt, 'All', ' ', 2, 1, ierr, 2, -1, 0 )
264*
265 IF( ierr( 1 ).LT.0 .OR. ierr( 2 ).LT.0 ) THEN
266 IF( iam.EQ.0 )
267 $ WRITE( nout, fmt = 9997 )'descriptor'
268 kskip = kskip + 1
269 GO TO 20
270 END IF
271*
272* Assign pointers into MEM for SCALAPACK arrays, A is
273* allocated starting at position MEM( IPREPAD+1 )
274*
275 ipa = iprepad + 1
276 ipz = ipa + desca( lld_ )*nq + ipostpad + iprepad
277 ipwr = ipz + descz( lld_ )*nq + ipostpad + iprepad
278 ipvl = ipwr + n + ipostpad + iprepad
279 ipvr = ipvl + descz( lld_ )*nq + ipostpad + iprepad
280 ipw = ipvr + descz( lld_ )*nq + ipostpad + iprepad
281 iii = n / nb
282 IF( iii*nb.LT.n )
283 $ iii = iii + 1
284 iii = 7*iii / ilcm( nprow, npcol )
285*
286*
287 lwork = 3*n + max( 2*max( lda, ldz )+2*nq, iii )
288 lwork = lwork + max( 2*n, ( 8*ilcm( nprow, npcol )+2 )**
289 $ 2 )
290*
291 IF( check ) THEN
292*
293* Figure the amount of workspace required by the
294* checking routines PZEVCFCHK and PZLANHS
295*
296 worksiz = lwork + max( np*desca( nb_ ),
297 $ desca( mb_ )*nq ) + ipostpad
298*
299 ELSE
300*
301 worksiz = lwork + ipostpad
302*
303 END IF
304*
305* Check for adequate memory for problem size
306*
307 ierr( 1 ) = 0
308 IF( ipw+worksiz.GT.memsiz ) THEN
309 IF( iam.EQ.0 )
310 $ WRITE( nout, fmt = 9996 )'Schur reduction',
311 $ ( ipw+worksiz )*zplxsz
312 ierr( 1 ) = 1
313 END IF
314*
315* Check all processes for an error
316*
317 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
318*
319 IF( ierr( 1 ).GT.0 ) THEN
320 IF( iam.EQ.0 )
321 $ WRITE( nout, fmt = 9997 )'MEMORY'
322 kskip = kskip + 1
323 GO TO 20
324 END IF
325*
326* Generate matrix Z = In
327*
328 CALL pzlaset( 'All', n, n, zero, one, mem( ipz ), 1, 1,
329 $ descz )
330 CALL pzlaset( 'All', n, n, zero, zero, mem( ipvr ), 1, 1,
331 $ descz )
332 CALL pzlaset( 'All', n, n, zero, zero, mem( ipvl ), 1, 1,
333 $ descz )
334*
335* Generate matrix A upper Hessenberg
336*
337 CALL pzmatgen( ictxt, 'No transpose', 'No transpose',
338 $ desca( m_ ), desca( n_ ), desca( mb_ ),
339 $ desca( nb_ ), mem( ipa ), desca( lld_ ),
340 $ desca( rsrc_ ), desca( csrc_ ), iaseed, 0,
341 $ np, 0, nq, myrow, mycol, nprow, npcol )
342 CALL pzlaset( 'Lower', max( 0, n-1 ), max( 0, n-1 ),
343 $ zero, zero, mem( ipa ), min( n, 2 ), 1,
344 $ desca )
345*
346* Calculate inf-norm of A for residual error-checking
347*
348 IF( check ) THEN
349 CALL pzfillpad( ictxt, np, nq, mem( ipa-iprepad ),
350 $ desca( lld_ ), iprepad, ipostpad,
351 $ padval )
352 CALL pzfillpad( ictxt, np, nq, mem( ipvr-iprepad ),
353 $ descz( lld_ ), iprepad, ipostpad,
354 $ padval )
355 CALL pzfillpad( ictxt, np, nq, mem( ipvl-iprepad ),
356 $ descz( lld_ ), iprepad, ipostpad,
357 $ padval )
358 CALL pzfillpad( ictxt, np, nq, mem( ipz-iprepad ),
359 $ descz( lld_ ), iprepad, ipostpad,
360 $ padval )
361 CALL pzfillpad( ictxt, worksiz-ipostpad, 1,
362 $ mem( ipw-iprepad ), worksiz-ipostpad,
363 $ iprepad, ipostpad, padval )
364 anorm = pzlanhs( 'I', n, mem( ipa ), 1, 1, desca,
365 $ mem( ipw ) )
366 CALL pzchekpad( ictxt, 'pzlanhs', NP, NQ,
367 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
368 $ IPREPAD, IPOSTPAD, PADVAL )
369 CALL PZCHEKPAD( ICTXT, 'pzlanhs', WORKSIZ-IPOSTPAD, 1,
370 $ MEM( IPW-IPREPAD ), WORKSIZ-IPOSTPAD,
371 $ IPREPAD, IPOSTPAD, PADVAL )
372*
373 CALL PZFILLPAD( ICTXT, N, 1, MEM( IPWR-IPREPAD ), N,
374 $ IPREPAD, IPOSTPAD, PADVAL )
375 CALL PZFILLPAD( ICTXT, LWORK, 1, MEM( IPW-IPREPAD ),
376 $ LWORK, IPREPAD, IPOSTPAD, PADVAL )
377*
378 END IF
379*
380* Set eigenvalues from diagonal
381*
382 DO 10 JJJ = 1, N
383 CALL INFOG2L( JJJ, JJJ, DESCZ, NPROW, NPCOL, MYROW,
384 $ MYCOL, IROW, ICOL, II, JJ )
385.EQ..AND..EQ. IF( MYROWII MYCOLJJ ) THEN
386 MEM( IPWR-1+JJJ ) = MEM( IPA-1+( ICOL-1 )*LDA+
387 $ IROW )
388 ELSE
389 MEM( IPWR-1+JJJ ) = ZERO
390 END IF
391 10 CONTINUE
392 CALL ZGSUM2D( ICTXT, 'all', ' ', N, 1, MEM( IPWR ), N,
393 $ -1, -1 )
394*
395 SELECT( 1 ) = .TRUE.
396 CALL SLBOOT
397 CALL BLACS_BARRIER( ICTXT, 'all' )
398 CALL SLTIMER( 1 )
399*
400* Perform eigenvector calculation
401*
402 CALL PZTREVC( 'b', 'a', SELECT, N, MEM( IPA ), DESCA,
403 $ MEM( IPVL ), DESCZ, MEM( IPVR ), DESCZ, N,
404 $ M, MEM( IPW ), RWORK, INFO )
405*
406 CALL SLTIMER( 1 )
407*
408.NE. IF( INFO0 ) THEN
409.EQ. IF( IAM0 )
410 $ WRITE( NOUT, FMT = * )'pztrevc info=', INFO
411 KFAIL = KFAIL + 1
412 GO TO 20
413 END IF
414*
415 IF( CHECK ) THEN
416*
417* Check for memory overwrite in NEP factorization
418*
419 CALL PZCHEKPAD( ICTXT, 'pztrevc(a)', NP, NQ,
420 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
421 $ IPREPAD, IPOSTPAD, PADVAL )
422 CALL PZCHEKPAD( ICTXT, 'pztrevc(vr)', NP, NQ,
423 $ MEM( IPVR-IPREPAD ), DESCZ( LLD_ ),
424 $ IPREPAD, IPOSTPAD, PADVAL )
425 CALL PZCHEKPAD( ICTXT, 'pztrevc(vl)', NP, NQ,
426 $ MEM( IPVL-IPREPAD ), DESCZ( LLD_ ),
427 $ IPREPAD, IPOSTPAD, PADVAL )
428 CALL PZCHEKPAD( ICTXT, 'pztrevc(wr)', N, 1,
429 $ MEM( IPWR-IPREPAD ), N, IPREPAD,
430 $ IPOSTPAD, PADVAL )
431 CALL PZCHEKPAD( ICTXT, 'pztrevc(work)', LWORK, 1,
432 $ MEM( IPW-IPREPAD ), LWORK, IPREPAD,
433 $ IPOSTPAD, PADVAL )
434*
435 CALL PZFILLPAD( ICTXT, WORKSIZ-IPOSTPAD, 1,
436 $ MEM( IPW-IPREPAD ), WORKSIZ-IPOSTPAD,
437 $ IPREPAD, IPOSTPAD, PADVAL )
438*
439* Compute || T * Z - Z * D || / ( N*|| T ||*EPS )
440*
441 FRESID = 0.0D+0
442 QRESID = 0.0D+0
443 CALL PZGET22( 'n', 'n', 'n', N, MEM( IPA ), DESCA,
444 $ MEM( IPVR ), DESCZ, MEM( IPWR ),
445 $ MEM( IPZ ), DESCZ, RWORK, RESULT )
446 FRESID = RESULT( 1 )
447 QRESID = RESULT( 2 )
448*
449* Compute || T^H * L - L * D^H || / ( N*|| T ||*EPS )
450*
451 CALL PZGET22( 'c', 'n', 'c', N, MEM( IPA ), DESCA,
452 $ MEM( IPVL ), DESCZ, MEM( IPWR ),
453 $ MEM( IPZ ), DESCZ, RWORK, RESULT )
454 FRESID = MAX( FRESID, RESULT( 1 ) )
455 QRESID = MAX( QRESID, RESULT( 2 ) )
456*
457 CALL PZCHEKPAD( ICTXT, 'pzget22(a)', NP, NQ,
458 $ MEM( IPA-IPREPAD ), DESCA( LLD_ ),
459 $ IPREPAD, IPOSTPAD, PADVAL )
460 CALL PZCHEKPAD( ICTXT, 'pzget22(vr)', NP, NQ,
461 $ MEM( IPVR-IPREPAD ), DESCZ( LLD_ ),
462 $ IPREPAD, IPOSTPAD, PADVAL )
463 CALL PZCHEKPAD( ICTXT, 'pzget22(vl)', NP, NQ,
464 $ MEM( IPVL-IPREPAD ), DESCZ( LLD_ ),
465 $ IPREPAD, IPOSTPAD, PADVAL )
466 CALL PZCHEKPAD( ICTXT, 'pzget22(z)', NP, NQ,
467 $ MEM( IPZ-IPREPAD ), DESCZ( LLD_ ),
468 $ IPREPAD, IPOSTPAD, PADVAL )
469*
470* Test residual and detect NaN result
471*
472.LE..AND. IF( ( FRESIDTHRESH )
473.EQ..AND. $ ( ( FRESID-FRESID )0.0D+0 )
474.LE..AND. $ ( QRESIDTHRESH )
475.EQ. $ ( ( QRESID-QRESID )0.0D+0 ) ) THEN
476 KPASS = KPASS + 1
477 PASSED = 'passed'
478 ELSE
479 KFAIL = KFAIL + 1
480 PASSED = 'failed'
481.EQ. IF( IAM0 ) THEN
482 WRITE( NOUT, FMT = 9986 )FRESID
483 WRITE( NOUT, FMT = 9985 )QRESID
484 END IF
485 END IF
486*
487 ELSE
488*
489* Don't perform the checking, only timing
490*
491 KPASS = KPASS + 1
492 FRESID = FRESID - FRESID
493 QRESID = QRESID - QRESID
494 PASSED = 'bypass'
495*
496 END IF
497*
498* Gather maximum of all CPU and WALL clock timings
499*
500 CALL SLCOMBINE( ICTXT, 'all', '>', 'w', 1, 1, WTIME )
501 CALL SLCOMBINE( ICTXT, 'all', '>', 'c', 1, 1, CTIME )
502*
503* Print results
504*
505.EQ..AND..EQ. IF( MYROW0 MYCOL0 ) THEN
506*
507* 2 N^2 flops for PxTREVC
508*
509 NOPS = 2.0D+0*DBLE( N )**2
510*
511* Calculate total megaflops -- eigenvector calc only,
512* -- for WALL and CPU time, and print output
513*
514* Print WALL time if machine supports it
515*
516.GT. IF( WTIME( 1 )0.0D+0 ) THEN
517 TMFLOPS = NOPS / ( WTIME( 1 )*1.0D+6 )
518 ELSE
519 TMFLOPS = 0.0D+0
520 END IF
521.GE. IF( WTIME( 1 )0.0D+0 )
522 $ WRITE( NOUT, FMT = 9993 )'wall', N, NB, NPROW,
523 $ NPCOL, WTIME( 1 ), TMFLOPS, PASSED
524*
525* Print CPU time if machine supports it
526*
527.GT. IF( CTIME( 1 )0.0D+0 ) THEN
528 TMFLOPS = NOPS / ( CTIME( 1 )*1.0D+6 )
529 ELSE
530 TMFLOPS = 0.0D+0
531 END IF
532*
533.GE. IF( CTIME( 1 )0.0D+0 )
534 $ WRITE( NOUT, FMT = 9993 )'cpu ', N, NB, NPROW,
535 $ NPCOL, CTIME( 1 ), TMFLOPS, PASSED
536 END IF
537*
538 20 CONTINUE
539*
540 30 CONTINUE
541*
542 CALL BLACS_GRIDEXIT( ICTXT )
543*
544 40 CONTINUE
545*
546* Print ending messages and close output file
547*
548.EQ. IF( IAM0 ) THEN
549 KTESTS = KPASS + KFAIL + KSKIP
550 WRITE( NOUT, FMT = * )
551 WRITE( NOUT, FMT = 9992 )KTESTS
552 IF( CHECK ) THEN
553 WRITE( NOUT, FMT = 9991 )KPASS
554 WRITE( NOUT, FMT = 9989 )KFAIL
555 ELSE
556 WRITE( NOUT, FMT = 9990 )KPASS
557 END IF
558 WRITE( NOUT, FMT = 9988 )KSKIP
559 WRITE( NOUT, FMT = * )
560 WRITE( NOUT, FMT = * )
561 WRITE( NOUT, FMT = 9987 )
562.NE..AND..NE. IF( NOUT6 NOUT0 )
563 $ CLOSE ( NOUT )
564 END IF
565*
566 CALL BLACS_EXIT( 0 )
567*
568 9999 FORMAT( 'illegal ', A6, ': ', A5, ' = ', I3,
569 $ '; it should be at least 1' )
570 9998 FORMAT( 'illegal grid: nprow*npcol = ', I4, '. it can be at most',
571 $ i4 )
572 9997 FORMAT( 'Bad ', a6, ' parameters: going on to next test case.' )
573 9996 FORMAT( 'Unable to perform ', a, ': need TOTMEM of at least',
574 $ i11 )
575 9995 FORMAT( 'TIME N NB P Q NEP Time MFLOPS CHECK' )
576 9994 FORMAT( '---- ----- --- ---- ---- -------- -------- ------' )
577 9993 FORMAT( a4, 1x, i5, 1x, i3, 1x, i4, 1x, i4, 1x, f8.2, 1x, f8.2,
578 $ 1x, a6 )
579 9992 FORMAT( 'Finished ', i6, ' tests, with the following results:' )
580 9991 FORMAT( i5, ' tests completed and passed residual checks.' )
581 9990 FORMAT( i5, ' tests completed without checking.' )
582 9989 FORMAT( i5, ' tests completed and failed residual checks.' )
583 9988 FORMAT( i5, ' tests skipped because of illegal input values.' )
584 9987 FORMAT( 'END OF TESTS.' )
585 9986 FORMAT( '||H*Z - Z*D|| / (||T|| * N * eps) = ', g25.7 )
586 9985 FORMAT( 'max_j(max|Z(j)| - 1) / ( N * eps ) ', g25.7 )
587*
588 stop
589*
590* End of PZEVCDRIVER
591*
592 END
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
integer function ilcm(m, n)
Definition ilcm.f:2
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine blacs_gridinit(cntxt, c, nprow, npcol)
Definition mpi.f:745
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
Definition mpi.f:937
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
Definition mpi.f:777
subroutine blacs_gridexit(cntxt)
Definition mpi.f:762
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
Definition mpi.f:754
integer function numroc(n, nb, iproc, isrcproc, nprocs)
Definition mpi.f:786
subroutine pzlaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
Definition pzblastst.f:7509
subroutine pzchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
Definition pzchekpad.f:3
program pzevcdriver
Definition pzevcdriver.f:1
subroutine pzevcinfo(summry, nout, nmat, nval, ldnval, nnb, nbval, ldnbval, ngrids, pval, ldpval, qval, ldqval, thresh, work, iam, nprocs)
Definition pzevcinfo.f:4
subroutine pzfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
Definition pzfillpad.f:2
subroutine pzget22(transa, transe, transw, n, a, desca, e, desce, w, work, descw, rwork, result)
Definition pzget22.f:3
double precision function pzlanhs(norm, n, a, ia, ja, desca, work)
Definition pzlanhs.f:3
subroutine pztrevc(side, howmny, select, n, t, desct, vl, descvl, vr, descvr, mm, m, work, rwork, info)
Definition pztrevc.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