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