SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
pcevcdriver.f
Go to the documentation of this file.
1 PROGRAM pcevcdriver
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* PCEVCDRIVER is the main test program for the COMPLEX
12* SCALAPACK PCTREVC 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 PCNEPDRIVER. 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* CPLXSZ INTEGER, default = 8 bytes.
49* CPLXSZ indicate the length in bytes on the given platform
50* for a single precision complex.
51* MEM COMPLEX array, dimension ( TOTMEM / CPLXSZ )
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 cplxsz, totmem, memsiz, ntests
72 parameter( cplxsz = 8, totmem = 200000000,
73 $ memsiz = totmem / cplxsz, ntests = 20 )
74 COMPLEX padval, zero, one
75 parameter( padval = ( -9923.0e+0, -9923.0e+0 ),
76 $ zero = ( 0.0e+0, 0.0e+0 ),
77 $ one = ( 1.0e+0, 0.0e+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, ipc, 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 REAL anorm, fresid, qresid
91 DOUBLE PRECISION nops, tmflops
92* ..
93* .. Local Arrays ..
94 LOGICAL select( 1 )
95 INTEGER desca( dlen_ ), descz( dlen_ ), ierr( 2 ),
96 $ nbval( ntests ), nval( ntests ),
97 $ pval( ntests ), qval( ntests )
98 REAL result( 2 ), rwork( 5000 )
99 DOUBLE PRECISION ctime( 2 ), wtime( 2 )
100 COMPLEX mem( memsiz )
101* ..
102* .. External Subroutines ..
103 EXTERNAL blacs_barrier, blacs_exit, blacs_get,
104 $ blacs_gridexit, blacs_gridinfo, blacs_gridinit,
105 $ blacs_pinfo, descinit, igsum2d, infog2l,
108 $ sltimer, cgsum2d
109* ..
110* .. External Functions ..
111 INTEGER ilcm, numroc
112 REAL pclanhs
113 EXTERNAL ilcm, numroc, pclanhs
114* ..
115* .. Intrinsic Functions ..
116 INTRINSIC real, max, min
117* ..
118* .. Data statements ..
119 DATA kfail, kpass, kskip, ktests / 4*0 /
120* ..
121* .. Executable Statements ..
122*
123* Get starting information
124*
125 CALL blacs_pinfo( iam, nprocs )
126 iaseed = 100
127 CALL pcevcinfo( outfile, nout, nmat, nval, ntests, nnb, nbval,
128 $ ntests, ngrids, pval, ntests, qval, ntests,
129 $ thresh, mem, iam, nprocs )
130 check = ( thresh.GE.0.0e+0 )
131*
132* Print headings
133*
134 IF( iam.EQ.0 ) THEN
135 WRITE( nout, fmt = * )
136 WRITE( nout, fmt = 9995 )
137 WRITE( nout, fmt = 9994 )
138 WRITE( nout, fmt = * )
139 END IF
140*
141* Loop over different process grids
142*
143 DO 40 i = 1, ngrids
144*
145 nprow = pval( i )
146 npcol = qval( i )
147*
148* Make sure grid information is correct
149*
150 ierr( 1 ) = 0
151 IF( nprow.LT.1 ) THEN
152 IF( iam.EQ.0 )
153 $ WRITE( nout, fmt = 9999 )'GRID', 'nprow', nprow
154 ierr( 1 ) = 1
155 ELSE IF( npcol.LT.1 ) THEN
156 IF( iam.EQ.0 )
157 $ WRITE( nout, fmt = 9999 )'GRID', 'npcol', npcol
158 ierr( 1 ) = 1
159 ELSE IF( nprow*npcol.GT.nprocs ) THEN
160 IF( iam.EQ.0 )
161 $ WRITE( nout, fmt = 9998 )nprow*npcol, nprocs
162 ierr( 1 ) = 1
163 END IF
164*
165 IF( ierr( 1 ).GT.0 ) THEN
166 IF( iam.EQ.0 )
167 $ WRITE( nout, fmt = 9997 )'grid'
168 kskip = kskip + 1
169 GO TO 40
170 END IF
171*
172* Define process grid
173*
174 CALL blacs_get( -1, 0, ictxt )
175 CALL blacs_gridinit( ictxt, 'Row-major', nprow, npcol )
176 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
177*
178* Go to bottom of process grid loop if this case doesn't use my
179* process
180*
181 IF( myrow.GE.nprow .OR. mycol.GE.npcol )
182 $ GO TO 40
183*
184 DO 30 j = 1, nmat
185*
186 n = nval( j )
187*
188* Make sure matrix information is correct
189*
190 ierr( 1 ) = 0
191 IF( n.LT.1 ) THEN
192 IF( iam.EQ.0 )
193 $ WRITE( nout, fmt = 9999 )'MATRIX', 'N', n
194 ierr( 1 ) = 1
195 END IF
196*
197* Check all processes for an error
198*
199 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
200*
201 IF( ierr( 1 ).GT.0 ) THEN
202 IF( iam.EQ.0 )
203 $ WRITE( nout, fmt = 9997 )'matrix'
204 kskip = kskip + 1
205 GO TO 30
206 END IF
207*
208 DO 20 k = 1, nnb
209*
210 nb = nbval( k )
211*
212* Make sure nb is legal
213*
214 ierr( 1 ) = 0
215 IF( nb.LT.6 ) THEN
216 ierr( 1 ) = 1
217 IF( iam.EQ.0 )
218 $ WRITE( nout, fmt = 9999 )'NB', 'NB', nb
219 END IF
220*
221* Check all processes for an error
222*
223 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
224*
225 IF( ierr( 1 ).GT.0 ) THEN
226 IF( iam.EQ.0 )
227 $ WRITE( nout, fmt = 9997 )'NB'
228 kskip = kskip + 1
229 GO TO 20
230 END IF
231*
232* Padding constants
233*
234 np = numroc( n, nb, myrow, 0, nprow )
235 nq = numroc( n, nb, mycol, 0, npcol )
236 IF( check ) THEN
237 iprepad = max( nb, np )
238 imidpad = nb
239 ipostpad = max( nb, nq )
240 iprepad = iprepad + 1000
241 imidpad = imidpad + 1000
242 ipostpad = ipostpad + 1000
243 ELSE
244 iprepad = 0
245 imidpad = 0
246 ipostpad = 0
247 END IF
248*
249* Initialize the array descriptor for the matrix A
250*
251 CALL descinit( desca, n, n, nb, nb, 0, 0, ictxt,
252 $ max( 1, np )+imidpad, ierr( 1 ) )
253*
254* Initialize the array descriptor for the matrix Z
255*
256 CALL descinit( descz, n, n, nb, nb, 0, 0, ictxt,
257 $ max( 1, np )+imidpad, ierr( 2 ) )
258*
259 lda = desca( lld_ )
260 ldz = descz( lld_ )
261*
262* Check all processes for an error
263*
264 CALL igsum2d( ictxt, 'All', ' ', 2, 1, ierr, 2, -1, 0 )
265*
266 IF( ierr( 1 ).LT.0 .OR. ierr( 2 ).LT.0 ) THEN
267 IF( iam.EQ.0 )
268 $ WRITE( nout, fmt = 9997 )'descriptor'
269 kskip = kskip + 1
270 GO TO 20
271 END IF
272*
273* Assign pointers into MEM for SCALAPACK arrays, A is
274* allocated starting at position MEM( IPREPAE+1 )
275*
276 ipa = iprepad + 1
277 ipc = ipa + desca( lld_ )*nq + ipostpad + iprepad
278 ipwr = ipc + descz( lld_ )*nq + ipostpad + iprepad
279 ipvl = ipwr + n + ipostpad + iprepad
280 ipvr = ipvl + descz( lld_ )*nq + ipostpad + iprepad
281 ipw = ipvr + descz( lld_ )*nq + ipostpad + iprepad
282 iii = n / nb
283 IF( iii*nb.LT.n )
284 $ iii = iii + 1
285 iii = 7*iii / ilcm( nprow, npcol )
286*
287*
288 lwork = 3*n + max( 2*max( lda, ldz )+2*nq, iii )
289 lwork = lwork + max( 2*n, ( 8*ilcm( nprow, npcol )+2 )**
290 $ 2 )
291*
292 IF( check ) THEN
293*
294* Figure the amount of workspace required by the
295* checking routines PCEVCFCHK and PCLANHS
296*
297 worksiz = lwork + max( np*desca( nb_ ),
298 $ desca( mb_ )*nq ) + ipostpad
299*
300 ELSE
301*
302 worksiz = lwork + ipostpad
303*
304 END IF
305*
306* Check for adequate memory for problem size
307*
308 ierr( 1 ) = 0
309 IF( ipw+worksiz.GT.memsiz ) THEN
310 IF( iam.EQ.0 )
311 $ WRITE( nout, fmt = 9996 )'Schur reduction',
312 $ ( ipw+worksiz )*cplxsz
313 ierr( 1 ) = 1
314 END IF
315*
316* Check all processes for an error
317*
318 CALL igsum2d( ictxt, 'All', ' ', 1, 1, ierr, 1, -1, 0 )
319*
320 IF( ierr( 1 ).GT.0 ) THEN
321 IF( iam.EQ.0 )
322 $ WRITE( nout, fmt = 9997 )'MEMORY'
323 kskip = kskip + 1
324 GO TO 20
325 END IF
326*
327* Generate matrix Z = In
328*
329 CALL pclaset( 'All', n, n, zero, one, mem( ipc ), 1, 1,
330 $ descz )
331 CALL pclaset( 'All', n, n, zero, zero, mem( ipvr ), 1, 1,
332 $ descz )
333 CALL pclaset( 'All', n, n, zero, zero, mem( ipvl ), 1, 1,
334 $ descz )
335*
336* Generate matrix A upper Hessenberg
337*
338 CALL pcmatgen( ictxt, 'No transpose', 'No transpose',
339 $ desca( m_ ), desca( n_ ), desca( mb_ ),
340 $ desca( nb_ ), mem( ipa ), desca( lld_ ),
341 $ desca( rsrc_ ), desca( csrc_ ), iaseed, 0,
342 $ np, 0, nq, myrow, mycol, nprow, npcol )
343 CALL pclaset( 'Lower', max( 0, n-1 ), max( 0, n-1 ),
344 $ zero, zero, mem( ipa ), min( n, 2 ), 1,
345 $ desca )
346*
347* Calculate inf-norm of A for residual error-checking
348*
349 IF( check ) THEN
350 CALL pcfillpad( ictxt, np, nq, mem( ipa-iprepad ),
351 $ desca( lld_ ), iprepad, ipostpad,
352 $ padval )
353 CALL pcfillpad( ictxt, np, nq, mem( ipvr-iprepad ),
354 $ descz( lld_ ), iprepad, ipostpad,
355 $ padval )
356 CALL pcfillpad( ictxt, np, nq, mem( ipvl-iprepad ),
357 $ descz( lld_ ), iprepad, ipostpad,
358 $ padval )
359 CALL pcfillpad( ictxt, np, nq, mem( ipc-iprepad ),
360 $ descz( lld_ ), iprepad, ipostpad,
361 $ padval )
362 CALL pcfillpad( ictxt, worksiz-ipostpad, 1,
363 $ mem( ipw-iprepad ), worksiz-ipostpad,
364 $ iprepad, ipostpad, padval )
365 anorm = pclanhs( 'I', n, mem( ipa ), 1, 1, desca,
366 $ mem( ipw ) )
367 CALL pcchekpad( ictxt, 'PCLANHS', np, nq,
368 $ mem( ipa-iprepad ), desca( lld_ ),
369 $ iprepad, ipostpad, padval )
370 CALL pcchekpad( ictxt, 'PCLANHS', worksiz-ipostpad, 1,
371 $ mem( ipw-iprepad ), worksiz-ipostpad,
372 $ iprepad, ipostpad, padval )
373*
374 CALL pcfillpad( ictxt, n, 1, mem( ipwr-iprepad ), n,
375 $ iprepad, ipostpad, padval )
376 CALL pcfillpad( ictxt, lwork, 1, mem( ipw-iprepad ),
377 $ lwork, iprepad, ipostpad, padval )
378*
379 END IF
380*
381* Set eigenvalues from diagonal
382*
383 DO 10 jjj = 1, n
384 CALL infog2l( jjj, jjj, descz, nprow, npcol, myrow,
385 $ mycol, irow, icol, ii, jj )
386 IF( myrow.EQ.ii .AND. mycol.EQ.jj ) THEN
387 mem( ipwr-1+jjj ) = mem( ipa-1+( icol-1 )*lda+
388 $ irow )
389 ELSE
390 mem( ipwr-1+jjj ) = zero
391 END IF
392 10 CONTINUE
393 CALL cgsum2d( ictxt, 'All', ' ', n, 1, mem( ipwr ), n,
394 $ -1, -1 )
395*
396 SELECT( 1 ) = .true.
397 CALL slboot()
398 CALL blacs_barrier( ictxt, 'All' )
399 CALL sltimer( 1 )
400*
401* Perform eigenvector calculation
402*
403 CALL pctrevc( 'B', 'A', SELECT, n, mem( ipa ), desca,
404 $ mem( ipvl ), descz, mem( ipvr ), descz, n,
405 $ m, mem( ipw ), rwork, info )
406*
407 CALL sltimer( 1 )
408*
409 IF( info.NE.0 ) THEN
410 IF( iam.EQ.0 )
411 $ WRITE( nout, fmt = * )'PCTREVC INFO=', info
412 kfail = kfail + 1
413 GO TO 20
414 END IF
415*
416 IF( check ) THEN
417*
418* Check for memory overwrite in NEP factorization
419*
420 CALL pcchekpad( ictxt, 'PCTREVC (A)', np, nq,
421 $ mem( ipa-iprepad ), desca( lld_ ),
422 $ iprepad, ipostpad, padval )
423 CALL pcchekpad( ictxt, 'PCTREVC (VR)', np, nq,
424 $ mem( ipvr-iprepad ), descz( lld_ ),
425 $ iprepad, ipostpad, padval )
426 CALL pcchekpad( ictxt, 'PCTREVC (VL)', np, nq,
427 $ mem( ipvl-iprepad ), descz( lld_ ),
428 $ iprepad, ipostpad, padval )
429 CALL pcchekpad( ictxt, 'PCTREVC (WR)', n, 1,
430 $ mem( ipwr-iprepad ), n, iprepad,
431 $ ipostpad, padval )
432 CALL pcchekpad( ictxt, 'PCTREVC (WORK)', lwork, 1,
433 $ mem( ipw-iprepad ), lwork, iprepad,
434 $ ipostpad, padval )
435*
436 CALL pcfillpad( ictxt, worksiz-ipostpad, 1,
437 $ mem( ipw-iprepad ), worksiz-ipostpad,
438 $ iprepad, ipostpad, padval )
439*
440* Compute || T * Z - Z * D || / ( N*|| T ||*EPS )
441*
442 fresid = 0.0e+0
443 qresid = 0.0e+0
444 CALL pcget22( 'N', 'N', 'N', n, mem( ipa ), desca,
445 $ mem( ipvr ), descz, mem( ipwr ),
446 $ mem( ipc ), descz, rwork, result )
447 fresid = result( 1 )
448 qresid = result( 2 )
449*
450* Compute || T^H * L - L * D^H || / ( N*|| T ||*EPS )
451*
452 CALL pcget22( 'C', 'N', 'C', n, mem( ipa ), desca,
453 $ mem( ipvl ), descz, mem( ipwr ),
454 $ mem( ipc ), descz, rwork, result )
455 fresid = max( fresid, result( 1 ) )
456 qresid = max( qresid, result( 2 ) )
457*
458 CALL pcchekpad( ictxt, 'PCGET22 (A)', np, nq,
459 $ mem( ipa-iprepad ), desca( lld_ ),
460 $ iprepad, ipostpad, padval )
461 CALL pcchekpad( ictxt, 'PCGET22 (VR)', np, nq,
462 $ mem( ipvr-iprepad ), descz( lld_ ),
463 $ iprepad, ipostpad, padval )
464 CALL pcchekpad( ictxt, 'PCGET22 (VL)', np, nq,
465 $ mem( ipvl-iprepad ), descz( lld_ ),
466 $ iprepad, ipostpad, padval )
467 CALL pcchekpad( ictxt, 'PCGET22 (Z)', np, nq,
468 $ mem( ipc-iprepad ), descz( lld_ ),
469 $ iprepad, ipostpad, padval )
470*
471* Test residual and detect NaN result
472*
473 IF( ( fresid.LE.thresh ) .AND.
474 $ ( ( fresid-fresid ).EQ.0.0e+0 ) .AND.
475 $ ( qresid.LE.thresh ) .AND.
476 $ ( ( qresid-qresid ).EQ.0.0e+0 ) ) THEN
477 kpass = kpass + 1
478 passed = 'PASSED'
479 ELSE
480 kfail = kfail + 1
481 passed = 'FAILED'
482 IF( iam.EQ.0 ) THEN
483 WRITE( nout, fmt = 9986 )fresid
484 WRITE( nout, fmt = 9985 )qresid
485 END IF
486 END IF
487*
488 ELSE
489*
490* Don't perform the checking, only timing
491*
492 kpass = kpass + 1
493 fresid = fresid - fresid
494 qresid = qresid - qresid
495 passed = 'BYPASS'
496*
497 END IF
498*
499* Gather maximum of all CPU and WALL clock timings
500*
501 CALL slcombine( ictxt, 'All', '>', 'W', 1, 1, wtime )
502 CALL slcombine( ictxt, 'All', '>', 'C', 1, 1, ctime )
503*
504* Print results
505*
506 IF( myrow.EQ.0 .AND. mycol.EQ.0 ) THEN
507*
508* 2 N^2 flops for PxTREVC
509*
510 nops = 2.0d+0*dble( n )**2
511*
512* Calculate total megaflops -- eigenvector calc only,
513* -- for WALL and CPU time, and print output
514*
515* Print WALL time if machine supports it
516*
517 IF( wtime( 1 ).GT.0.0d+0 ) THEN
518 tmflops = nops / ( wtime( 1 )*1.0d+6 )
519 ELSE
520 tmflops = 0.0d+0
521 END IF
522 IF( wtime( 1 ).GE.0.0d+0 )
523 $ WRITE( nout, fmt = 9993 )'WALL', n, nb, nprow,
524 $ npcol, wtime( 1 ), tmflops, passed
525*
526* Print CPU time if machine supports it
527*
528 IF( ctime( 1 ).GT.0.0d+0 ) THEN
529 tmflops = nops / ( ctime( 1 )*1.0d+6 )
530 ELSE
531 tmflops = 0.0d+0
532 END IF
533*
534 IF( ctime( 1 ).GE.0.0d+0 )
535 $ WRITE( nout, fmt = 9993 )'CPU ', n, nb, nprow,
536 $ npcol, ctime( 1 ), tmflops, passed
537 END IF
538*
539 20 CONTINUE
540*
541 30 CONTINUE
542*
543 CALL blacs_gridexit( ictxt )
544*
545 40 CONTINUE
546*
547* Print ending messages and close output file
548*
549 IF( iam.EQ.0 ) THEN
550 ktests = kpass + kfail + kskip
551 WRITE( nout, fmt = * )
552 WRITE( nout, fmt = 9992 )ktests
553 IF( check ) THEN
554 WRITE( nout, fmt = 9991 )kpass
555 WRITE( nout, fmt = 9989 )kfail
556 ELSE
557 WRITE( nout, fmt = 9990 )kpass
558 END IF
559 WRITE( nout, fmt = 9988 )kskip
560 WRITE( nout, fmt = * )
561 WRITE( nout, fmt = * )
562 WRITE( nout, fmt = 9987 )
563 IF( nout.NE.6 .AND. nout.NE.0 )
564 $ CLOSE ( nout )
565 END IF
566*
567 CALL blacs_exit( 0 )
568*
569 9999 FORMAT( 'ILLEGAL ', a6, ': ', a5, ' = ', i3,
570 $ '; It should be at least 1' )
571 9998 FORMAT( 'ILLEGAL GRID: nprow*npcol = ', i4, '. It can be at most',
572 $ i4 )
573 9997 FORMAT( 'Bad ', a6, ' parameters: going on to next test case.' )
574 9996 FORMAT( 'Unable to perform ', a, ': need TOTMEM of at least',
575 $ i11 )
576 9995 FORMAT( 'TIME N NB P Q NEP Time MFLOPS CHECK' )
577 9994 FORMAT( '---- ----- --- ---- ---- -------- -------- ------' )
578 9993 FORMAT( a4, 1x, i5, 1x, i3, 1x, i4, 1x, i4, 1x, f8.2, 1x, f8.2,
579 $ 1x, a6 )
580 9992 FORMAT( 'Finished ', i6, ' tests, with the following results:' )
581 9991 FORMAT( i5, ' tests completed and passed residual checks.' )
582 9990 FORMAT( i5, ' tests completed without checking.' )
583 9989 FORMAT( i5, ' tests completed and failed residual checks.' )
584 9988 FORMAT( i5, ' tests skipped because of illegal input values.' )
585 9987 FORMAT( 'END OF TESTS.' )
586 9986 FORMAT( '||H*Z - Z*D|| / (||T|| * N * eps) = ', g25.7 )
587 9985 FORMAT( 'max_j(max|Z(j)| - 1) / ( N * eps ) ', g25.7 )
588*
589 stop
590*
591* End of PCEVCDRIVER
592*
593 END
subroutine pcmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)
Definition pcmatgen.f:4
subroutine descinit(desc, m, n, mb, nb, irsrc, icsrc, ictxt, lld, info)
Definition descinit.f:3
integer function ilcm(m, n)
Definition ilcm.f:2
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
Definition infog2l.f:3
integer function numroc(n, nb, iproc, isrcproc, nprocs)
Definition numroc.f:2
subroutine pclaset(uplo, m, n, alpha, beta, a, ia, ja, desca)
Definition pcblastst.f:7508
subroutine pcchekpad(ictxt, mess, m, n, a, lda, ipre, ipost, chkval)
Definition pcchekpad.f:3
program pcevcdriver
Definition pcevcdriver.f:1
subroutine pcevcinfo(summry, nout, nmat, nval, ldnval, nnb, nbval, ldnbval, ngrids, pval, ldpval, qval, ldqval, thresh, work, iam, nprocs)
Definition pcevcinfo.f:4
subroutine pcfillpad(ictxt, m, n, a, lda, ipre, ipost, chkval)
Definition pcfillpad.f:2
#define max(A, B)
Definition pcgemr.c:180
#define min(A, B)
Definition pcgemr.c:181
subroutine pcget22(transa, transe, transw, n, a, desca, e, desce, w, work, descw, rwork, result)
Definition pcget22.f:3
real function pclanhs(norm, n, a, ia, ja, desca, work)
Definition pclanhs.f:3
subroutine pctrevc(side, howmny, select, n, t, desct, vl, descvl, vr, descvr, mm, m, work, rwork, info)
Definition pctrevc.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