87 parameter( npmax = 16 )
89 parameter( nmax = 1000 )
91 parameter( maxin = 12 )
93 parameter( maxrhs = 16 )
95 parameter( matmax = 30 )
97 parameter( nin = 5, nout = 6 )
99 parameter( kdmax = nmax+( nmax+1 ) / 4 )
102 LOGICAL fatal, tstchk, tstdrv, tsterr
108 INTEGER i, ib, ic, j, k, la, lafac, lda, nb, nm, nmats,
109 $ nn, nnb, nnb2, np, nnp, sched, nns, nrhs,
110 $ ntypes, nrank, vers_major, vers_minor,
112 DOUBLE PRECISION eps, s1, s2, threq, thresh
115 LOGICAL dotype( matmax )
116 INTEGER ibval(maxin ), iwork( 25*nmax ), mval( maxin ),
117 $ nbval( maxin ), nbval2( maxin ),
118 $ npval( maxin ), nsval( maxin ),
119 $ nval( maxin ), nxval( maxin ),
120 $ rankval( maxin ), piv( nmax )
121 DOUBLE PRECISION rwork( 150*nmax+2*maxrhs ), s( 2*nmax )
122 COMPLEX*16 a( ( kdmax+1 )*nmax, 7 ), b( nmax*maxrhs, 4 ),
123 $ work( nmax, nmax+maxrhs+10 )
127 DOUBLE PRECISION dlamch, dsecnd
128 EXTERNAL lsame,
lsamen, dlamch, dsecnd
144 INTEGER iparms( 100 )
147 common / infoc / infot, nunit, ok, lerr
148 common / srnamc / srnamt
149 common / claenv / iparms
152 DATA threq / 2.0d0 / , intstr /
'0123456789' /
162 CALL plasma_version( vers_major, vers_minor, vers_patch, info)
163 WRITE( nout, fmt = 9994 ) vers_major, vers_minor, vers_patch
172 READ( nin, fmt = * )nnp
174 WRITE( nout, fmt = 9996 )
' NNP ', nnp, 1
177 ELSE IF( nnp.GT.maxin )
THEN
178 WRITE( nout, fmt = 9995 )
' NNP ', nnp, maxin
182 READ( nin, fmt = * )( npval( i ), i = 1, nnp )
184 IF( npval( i ).LT.0 )
THEN
185 WRITE( nout, fmt = 9996 )
' NP ', npval( i ), 0
187 ELSE IF( npval( i ).GT.npmax )
THEN
188 WRITE( nout, fmt = 9995 )
' NP ', npval( i ), npmax
193 $
WRITE( nout, fmt = 9993 )
'NP ', ( npval( i ), i = 1, nnp )
197 READ( nin, fmt = * )sched
198 IF (( sched .LT. 0 ) .OR. (sched .GT. 1))
THEN
199 WRITE( nout, fmt = 9987 )
' SCHED ', sched
206 READ( nin, fmt = * )nm
208 WRITE( nout, fmt = 9996 )
' NM ', nm, 1
211 ELSE IF( nm.GT.maxin )
THEN
212 WRITE( nout, fmt = 9995 )
' NM ', nm, maxin
216 READ( nin, fmt = * )( mval( i ), i = 1, nm )
218 IF( mval( i ).LT.0 )
THEN
219 WRITE( nout, fmt = 9996 )
' M ', mval( i ), 0
221 ELSE IF( mval( i ).GT.nmax )
THEN
222 WRITE( nout, fmt = 9995 )
' M ', mval( i ), nmax
227 $
WRITE( nout, fmt = 9993 )
'M ', ( mval( i ), i = 1, nm )
231 READ( nin, fmt = * ) nn
233 WRITE( nout, fmt = 9996 )
' NN ', nn, 1
236 ELSE IF( nn.GT.maxin )
THEN
237 WRITE( nout, fmt = 9995 )
' NN ', nn, maxin
241 READ( nin, fmt = * )( nval( i ), i = 1, nn )
243 IF( nval( i ).LT.0 )
THEN
244 WRITE( nout, fmt = 9996 )
' N ', nval( i ), 0
246 ELSE IF( nval( i ).GT.nmax )
THEN
247 WRITE( nout, fmt = 9995 )
' N ', nval( i ), nmax
252 $
WRITE( nout, fmt = 9993 )
'N ', ( nval( i ), i = 1, nn )
256 READ( nin, fmt = * )nns
258 WRITE( nout, fmt = 9996 )
' NNS', nns, 1
261 ELSE IF( nns.GT.maxin )
THEN
262 WRITE( nout, fmt = 9995 )
' NNS', nns, maxin
266 READ( nin, fmt = * )( nsval( i ), i = 1, nns )
268 IF( nsval( i ).LT.0 )
THEN
269 WRITE( nout, fmt = 9996 )
'NRHS', nsval( i ), 0
271 ELSE IF( nsval( i ).GT.maxrhs )
THEN
272 WRITE( nout, fmt = 9995 )
'NRHS', nsval( i ), maxrhs
277 $
WRITE( nout, fmt = 9993 )
'NRHS', ( nsval( i ), i = 1, nns )
281 READ( nin, fmt = * )nnb
283 WRITE( nout, fmt = 9996 )
'NNB ', nnb, 1
286 ELSE IF( nnb.GT.maxin )
THEN
287 WRITE( nout, fmt = 9995 )
'NNB ', nnb, maxin
291 READ( nin, fmt = * )( nbval( i ), i = 1, nnb )
293 IF( nbval( i ).LT.0 )
THEN
294 WRITE( nout, fmt = 9996 )
' NB ', nbval( i ), 0
299 $
WRITE( nout, fmt = 9993 )
'NB ', ( nbval( i ), i = 1, nnb )
303 READ( nin, fmt = * )( ibval( i ), i = 1, nnb )
305 IF( ibval( i ).LT.0 )
THEN
306 WRITE( nout, fmt = 9996 )
' NB ', ibval( i ), 0
311 $
WRITE( nout, fmt = 9993 )
'IB ', ( ibval( i ), i = 1, nnb )
319 IF( nb.EQ.nbval2( j ) )
328 READ( nin, fmt = * )( nxval( i ), i = 1, nnb )
330 IF( nxval( i ).LT.0 )
THEN
331 WRITE( nout, fmt = 9996 )
' NX ', nxval( i ), 0
336 $
WRITE( nout, fmt = 9993 )
'NX ', ( nxval( i ), i = 1, nnb )
340 READ( nin, fmt = * )nrank
342 WRITE( nout, fmt = 9996 )
' NRANK ', nrank, 1
345 ELSE IF( nn.GT.maxin )
THEN
346 WRITE( nout, fmt = 9995 )
' NRANK ', nrank, maxin
350 READ( nin, fmt = * )( rankval( i ), i = 1, nrank )
352 IF( rankval( i ).LT.0 )
THEN
353 WRITE( nout, fmt = 9996 )
' RANK ', rankval( i ), 0
355 ELSE IF( rankval( i ).GT.100 )
THEN
356 WRITE( nout, fmt = 9995 )
' RANK ', rankval( i ), 100
361 $
WRITE( nout, fmt = 9993 )
'RANK % OF N',
362 $ ( rankval( i ), i = 1, nrank )
366 READ( nin, fmt = * )thresh
367 WRITE( nout, fmt = 9992 )thresh
371 READ( nin, fmt = * )tstchk
375 READ( nin, fmt = * )tstdrv
379 READ( nin, fmt = * )tsterr
382 WRITE( nout, fmt = 9999 )
388 eps = dlamch(
'Underflow threshold' )
389 WRITE( nout, fmt = 9991 )
'underflow', eps
390 eps = dlamch(
'Overflow threshold' )
391 WRITE( nout, fmt = 9991 )
'overflow ', eps
392 eps = dlamch(
'Epsilon' )
393 WRITE( nout, fmt = 9991 )
'precision', eps
394 WRITE( nout, fmt = * )
401 IF( sched .EQ. 1 )
THEN
403 $ plasma_dynamic_scheduling, info )
406 $ plasma_static_scheduling, info )
416 READ( nin, fmt =
'(A72)',
END = 140 )aline
424 IF( aline( i: i ).EQ.
' ' )
430 IF( c1.EQ.intstr( k: k ) )
THEN
437 nmats = nmats*10 + ic
448 IF( .NOT.lsame( c1,
'Zomplex precision' ) )
THEN
449 WRITE( nout, fmt = 9990 )path
451 ELSE IF( nmats.LE.0 )
THEN
455 WRITE( nout, fmt = 9989 )path
457 ELSE IF(
lsamen( 2, c2,
'GE' ) )
THEN
462 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
465 CALL
zchkge( dotype, nm, mval, nn, nval, nnb2, nbval2, nns,
466 $ ibval, nsval, thresh, tsterr, lda, a( 1, 1 ),
467 $ a( 1, 2 ), a( 1, 3 ), b( 1, 1 ), b( 1, 2 ),
468 $ b( 1, 3 ), work, rwork, iwork, nout )
470 WRITE( nout, fmt = 9989 )path
474 CALL
zdrvge( dotype, nn, nval, nrhs, thresh, tsterr, lda,
475 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), b( 1, 1 ),
476 $ b( 1, 2 ), b( 1, 3 ), b( 1, 4 ), s, work,
477 $ rwork, iwork, nout )
479 WRITE( nout, fmt = 9988 )path
482 ELSE IF(
lsamen( 2, c2,
'PO' ) )
THEN
487 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
490 CALL
zchkpo( dotype, nn, nval, nnb2, nbval2, nns, nsval,
491 $ thresh, tsterr, lda, a( 1, 1 ), a( 1, 2 ),
492 $ a( 1, 3 ), b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
493 $ work, rwork, nout )
495 WRITE( nout, fmt = 9989 )path
499 CALL
zdrvpo( dotype, nn, nval, nrhs, thresh, tsterr, lda,
500 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), b( 1, 1 ),
501 $ b( 1, 2 ), b( 1, 3 ), b( 1, 4 ), s, work,
504 WRITE( nout, fmt = 9988 )path
507 ELSE IF(
lsamen( 2, c2,
'QR' ) )
THEN
512 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
515 CALL
zchkqr( dotype, nm, mval, nn, nval, nnb, nbval, nxval,
516 $ ibval, nrhs, thresh, tsterr, nmax, a( 1, 1 ),
517 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
518 $ b( 1, 1 ), b( 1, 2 ), b( 1, 3 ), b( 1, 4 ),
519 $ work, rwork, iwork, nout )
521 WRITE( nout, fmt = 9989 )path
524 ELSE IF(
lsamen( 2, c2,
'LQ' ) )
THEN
529 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
532 CALL
zchklq( dotype, nm, mval, nn, nval, nnb, nbval, nxval,
533 $ ibval, nrhs, thresh, tsterr, nmax, a( 1, 1 ),
534 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
535 $ b( 1, 1 ), b( 1, 2 ), b( 1, 3 ), b( 1, 4 ),
536 $ work, rwork, iwork, nout )
538 WRITE( nout, fmt = 9989 )path
541 ELSE IF(
lsamen( 2, c2,
'LS' ) )
THEN
546 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
549 CALL
zdrvls( dotype, nm, mval, nn, nval, nns, nsval, nnb,
550 $ ibval, nbval, nxval, thresh, tsterr, a( 1, 1 ),
551 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
552 $ s( 1 ), s( nmax+1 ), work, rwork, iwork,
555 WRITE( nout, fmt = 9989 )path
560 WRITE( nout, fmt = 9990 )path
576 WRITE( nout, fmt = 9998 )
579 9999
format( /
' Execution not attempted due to input errors' )
580 9998
format( /
' End of tests' )
581 9997
format(
' Total time used = ', f12.2,
' seconds', / )
582 9996
format(
' Invalid input value: ', a4,
'=', i6,
'; must be >=',
584 9995
format(
' Invalid input value: ', a4,
'=', i6,
'; must be <=',
586 9994
format(
' Tests of the COMPLEX*16 PLASMA routines ',
587 $ /
' PLASMA VERSION ', i1,
'.', i1,
'.', i1,
588 $ / /
' The following parameter values will be used:' )
589 9993
format( 4x, a4,
': ', 10i6, / 11x, 10i6 )
590 9992
format( /
' Routines pass computational tests if test ratio is ',
591 $
'less than', f8.2, / )
592 9991
format(
' Relative machine ', a,
' is taken to be', d16.6 )
593 9990
format( / 1x, a3,
': Unrecognized path name' )
594 9989
format( / 1x, a3,
' routines were not tested' )
595 9988
format( / 1x, a3,
' driver routines were not tested' )
596 9987
format(
' Invalid input value: ', a6,
'=', i6,
'; must be 0 or 1')