85 parameter( npmax = 16 )
87 parameter( nmax = 1000 )
89 parameter( maxin = 12 )
91 parameter( maxrhs = 16 )
93 parameter( matmax = 30 )
95 parameter( nin = 5, nout = 6 )
97 parameter( kdmax = nmax+( nmax+1 ) / 4 )
100 LOGICAL fatal, tstchk, tstdrv, tsterr
106 INTEGER i, ib, ic, j, k, la, lafac, lda, nb, nm, nmats,
107 $ nn, nnb, nnb2, nnp, nns, np, sched, nrhs, ntypes,
108 $ nrank, vers_major, vers_minor, vers_patch, info
109 REAL eps, s1, s2, threq, thresh
112 LOGICAL dotype( matmax )
113 INTEGER ibval(maxin), iwork( 25*nmax ), mval( maxin ),
114 $ nbval( maxin ), nbval2( maxin ),
115 $ npval( maxin), nsval( maxin ),
116 $ nval( maxin ), nxval( maxin ),
117 $ rankval( maxin ), piv( nmax )
118 REAL a( ( kdmax+1 )*nmax, 7 ), b( nmax*maxrhs, 4 ),
119 $ rwork( 5*nmax+2*maxrhs ), s( 2*nmax ),
120 $ work( nmax, nmax+maxrhs+30 )
125 EXTERNAL lsame,
lsamen, second, slamch
141 INTEGER iparms( 100 )
144 common / claenv / iparms
145 common / infoc / infot, nunit, ok, lerr
146 common / srnamc / srnamt
149 DATA threq / 2.0e0 / , intstr /
'0123456789' /
159 CALL plasma_version( vers_major, vers_minor, vers_patch, info)
160 WRITE( nout, fmt = 9994 ) vers_major, vers_minor, vers_patch
168 READ( nin, fmt = * )nnp
170 WRITE( nout, fmt = 9996 )
' NNP ', nnp, 1
173 ELSE IF( nnp.GT.maxin )
THEN
174 WRITE( nout, fmt = 9995 )
' NNP ', nnp, maxin
178 READ( nin, fmt = * )( npval( i ), i = 1, nnp )
180 IF( npval( i ).LT.0 )
THEN
181 WRITE( nout, fmt = 9996 )
' NP ', npval( i ), 0
183 ELSE IF( npval( i ).GT.npmax )
THEN
184 WRITE( nout, fmt = 9995 )
' NP ', npval( i ), npmax
189 $
WRITE( nout, fmt = 9993 )
'NP ', ( npval( i ), i = 1, nnp )
193 READ( nin, fmt = * )sched
194 IF (( sched .LT. 0 ) .OR. (sched .GT. 1))
THEN
195 WRITE( nout, fmt = 9987 )
' SCHED ', sched
202 READ( nin, fmt = * )nm
204 WRITE( nout, fmt = 9996 )
' NM ', nm, 1
207 ELSE IF( nm.GT.maxin )
THEN
208 WRITE( nout, fmt = 9995 )
' NM ', nm, maxin
212 READ( nin, fmt = * )( mval( i ), i = 1, nm )
214 IF( mval( i ).LT.0 )
THEN
215 WRITE( nout, fmt = 9996 )
' M ', mval( i ), 0
217 ELSE IF( mval( i ).GT.nmax )
THEN
218 WRITE( nout, fmt = 9995 )
' M ', mval( i ), nmax
223 $
WRITE( nout, fmt = 9993 )
'M ', ( mval( i ), i = 1, nm )
227 READ( nin, fmt = * )nn
229 WRITE( nout, fmt = 9996 )
' NN ', nn, 1
232 ELSE IF( nn.GT.maxin )
THEN
233 WRITE( nout, fmt = 9995 )
' NN ', nn, maxin
237 READ( nin, fmt = * )( nval( i ), i = 1, nn )
239 IF( nval( i ).LT.0 )
THEN
240 WRITE( nout, fmt = 9996 )
' N ', nval( i ), 0
242 ELSE IF( nval( i ).GT.nmax )
THEN
243 WRITE( nout, fmt = 9995 )
' N ', nval( i ), nmax
248 $
WRITE( nout, fmt = 9993 )
'N ', ( nval( i ), i = 1, nn )
252 READ( nin, fmt = * )nns
254 WRITE( nout, fmt = 9996 )
' NNS', nns, 1
257 ELSE IF( nns.GT.maxin )
THEN
258 WRITE( nout, fmt = 9995 )
' NNS', nns, maxin
262 READ( nin, fmt = * )( nsval( i ), i = 1, nns )
264 IF( nsval( i ).LT.0 )
THEN
265 WRITE( nout, fmt = 9996 )
'NRHS', nsval( i ), 0
267 ELSE IF( nsval( i ).GT.maxrhs )
THEN
268 WRITE( nout, fmt = 9995 )
'NRHS', nsval( i ), maxrhs
273 $
WRITE( nout, fmt = 9993 )
'NRHS', ( nsval( i ), i = 1, nns )
277 READ( nin, fmt = * )nnb
279 WRITE( nout, fmt = 9996 )
'NNB ', nnb, 1
282 ELSE IF( nnb.GT.maxin )
THEN
283 WRITE( nout, fmt = 9995 )
'NNB ', nnb, maxin
287 READ( nin, fmt = * )( nbval( i ), i = 1, nnb )
289 IF( nbval( i ).LT.0 )
THEN
290 WRITE( nout, fmt = 9996 )
' NB ', nbval( i ), 0
295 $
WRITE( nout, fmt = 9993 )
'NB ', ( nbval( i ), i = 1, nnb )
299 READ( nin, fmt = * )( ibval( i ), i = 1, nnb )
301 IF( ibval( i ).LT.0 )
THEN
302 WRITE( nout, fmt = 9996 )
' NB ', ibval( i ), 0
307 $
WRITE( nout, fmt = 9993 )
'IB ', ( ibval( i ), i = 1, nnb )
315 IF( nb.EQ.nbval2( j ) )
324 READ( nin, fmt = * )( nxval( i ), i = 1, nnb )
326 IF( nxval( i ).LT.0 )
THEN
327 WRITE( nout, fmt = 9996 )
' NX ', nxval( i ), 0
332 $
WRITE( nout, fmt = 9993 )
'NX ', ( nxval( i ), i = 1, nnb )
336 READ( nin, fmt = * )nrank
338 WRITE( nout, fmt = 9996 )
' NRANK ', nrank, 1
341 ELSE IF( nn.GT.maxin )
THEN
342 WRITE( nout, fmt = 9995 )
' NRANK ', nrank, maxin
346 READ( nin, fmt = * )( rankval( i ), i = 1, nrank )
348 IF( rankval( i ).LT.0 )
THEN
349 WRITE( nout, fmt = 9996 )
' RANK ', rankval( i ), 0
351 ELSE IF( rankval( i ).GT.100 )
THEN
352 WRITE( nout, fmt = 9995 )
' RANK ', rankval( i ), 100
357 $
WRITE( nout, fmt = 9993 )
'RANK % OF N',
358 $ ( rankval( i ), i = 1, nrank )
362 READ( nin, fmt = * )thresh
363 WRITE( nout, fmt = 9992 )thresh
367 READ( nin, fmt = * )tstchk
371 READ( nin, fmt = * )tstdrv
375 READ( nin, fmt = * )tsterr
378 WRITE( nout, fmt = 9999 )
384 eps = slamch(
'Underflow threshold' )
385 WRITE( nout, fmt = 9991 )
'underflow', eps
386 eps = slamch(
'Overflow threshold' )
387 WRITE( nout, fmt = 9991 )
'overflow ', eps
388 eps = slamch(
'Epsilon' )
389 WRITE( nout, fmt = 9991 )
'precision', eps
390 WRITE( nout, fmt = * )
396 IF( sched .EQ. 1 )
THEN
398 $ plasma_dynamic_scheduling, info )
401 $ plasma_static_scheduling, info )
411 READ( nin, fmt =
'(A72)',
END = 140 )aline
421 IF( aline( i: i ).EQ.
' ' )
427 IF( c1.EQ.intstr( k: k ) )
THEN
434 nmats = nmats*10 + ic
446 IF( .NOT.lsame( c1,
'Single precision' ) )
THEN
447 WRITE( nout, fmt = 9990 )path
449 ELSE IF( nmats.LE.0 )
THEN
453 WRITE( nout, fmt = 9989 )path
455 ELSE IF(
lsamen( 2, c2,
'GE' ) )
THEN
460 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
463 CALL
schkge( dotype, nm, mval, nn, nval, nnb2, nbval2, nns,
464 $ ibval, nsval, thresh, tsterr, lda, a( 1, 1 ),
465 $ a( 1, 2 ), a( 1, 3 ), b( 1, 1 ), b( 1, 2 ),
466 $ b( 1, 3 ), work, rwork, iwork, nout )
468 WRITE( nout, fmt = 9989 )path
472 CALL
sdrvge( dotype, nn, nval, nrhs, thresh, tsterr, lda,
473 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), b( 1, 1 ),
474 $ b( 1, 2 ), b( 1, 3 ), b( 1, 4 ), s, work,
475 $ rwork, iwork, nout )
477 WRITE( nout, fmt = 9988 )path
480 ELSE IF(
lsamen( 2, c2,
'PO' ) )
THEN
485 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
488 CALL
schkpo( dotype, nn, nval, nnb2, nbval2, nns, nsval,
489 $ thresh, tsterr, lda, a( 1, 1 ), a( 1, 2 ),
490 $ a( 1, 3 ), b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
491 $ work, rwork, iwork, nout )
493 WRITE( nout, fmt = 9989 )path
497 CALL
sdrvpo( dotype, nn, nval, nrhs, thresh, tsterr, lda,
498 $ a( 1, 1 ), a( 1, 2 ), a( 1, 3 ), b( 1, 1 ),
499 $ b( 1, 2 ), b( 1, 3 ), b( 1, 4 ), s, work,
500 $ rwork, iwork, nout )
502 WRITE( nout, fmt = 9988 )path
505 ELSE IF(
lsamen( 2, c2,
'QR' ) )
THEN
510 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
513 CALL
schkqr( dotype, nm, mval, nn, nval, nnb, nbval, nxval,
514 $ ibval, nrhs, thresh, tsterr, nmax, a( 1, 1 ),
515 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
516 $ b( 1, 1 ), b( 1, 2 ), b( 1, 3 ), b( 1, 4 ),
517 $ work, rwork, iwork, nout )
519 WRITE( nout, fmt = 9989 )path
522 ELSE IF(
lsamen( 2, c2,
'LQ' ) )
THEN
527 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
530 CALL
schklq( dotype, nm, mval, nn, nval, nnb, nbval, nxval,
531 $ ibval, nrhs, thresh, tsterr, nmax, a( 1, 1 ),
532 $ a( 1, 2 ), a( 1, 3 ), a( 1, 4 ), a( 1, 5 ),
533 $ b( 1, 1 ), b( 1, 2 ), b( 1, 3 ), b( 1, 4 ),
534 $ work, rwork, iwork, nout )
536 WRITE( nout, fmt = 9989 )path
539 ELSE IF(
lsamen( 2, c2,
'LS' ) )
THEN
544 CALL
alareq( path, nmats, dotype, ntypes, nin, nout )
547 CALL
sdrvls( dotype, nm, mval, nn, nval, nns, nsval, nnb,
548 $ nbval, nxval, thresh, tsterr, a( 1, 1 ),
549 $ a( 1, 2 ), b( 1, 1 ), b( 1, 2 ), b( 1, 3 ),
550 $ rwork, rwork( nmax+1 ), ibval, work, iwork,
553 WRITE( nout, fmt = 9988 )path
558 WRITE( nout, fmt = 9990 )path
574 WRITE( nout, fmt = 9998 )
577 9999
format( /
' Execution not attempted due to input errors' )
578 9998
format( /
' End of tests' )
579 9997
format(
' Total time used = ', f12.2,
' seconds', / )
580 9996
format(
' Invalid input value: ', a4,
'=', i6,
'; must be >=',
582 9995
format(
' Invalid input value: ', a4,
'=', i6,
'; must be <=',
584 9994
format(
' Tests of the REAL PLASMA routines ',
585 $ /
' PLASMA VERSION ', i1,
'.', i1,
'.', i1,
586 $ / /
' The following parameter values will be used:' )
587 9993
format( 4x, a4,
': ', 10i6, / 11x, 10i6 )
588 9992
format( /
' Routines pass computational tests if test ratio is ',
589 $
'less than', f8.2, / )
590 9991
format(
' Relative machine ', a,
' is taken to be', e16.6 )
591 9990
format( / 1x, a3,
': Unrecognized path name' )
592 9989
format( / 1x, a3,
' routines were not tested' )
593 9988
format( / 1x, a3,
' driver routines were not tested' )
594 9987
format(
' Invalid input value: ', a6,
'=', i6,
'; must be 0 or 1')