1 SUBROUTINE pdpbinfo( SUMMRY, NOUT, UPLO, NMAT, NVAL, LDNVAL, NBW,
2 $ BWVAL, LDBWVAL, NNB, NBVAL, LDNBVAL, NNR,
3 $ NRVAL, LDNRVAL, NNBR, NBRVAL, LDNBRVAL,
4 $ NGRIDS, PVAL, LDPVAL, QVAL, LDQVAL, THRESH,
18 $ LDBWVAL, LDNBRVAL, LDNBVAL, LDNRVAL, LDNVAL,
19 $ ldpval, ldqval, ngrids, nmat, nnb, nnbr, nbw,
24 INTEGER NBRVAL( LDNBRVAL ), NBVAL( LDNBVAL ),
25 $ nrval( ldnrval ), nval( ldnval ),
27 $ pval( ldpval ), qval(ldqval), work( * )
154 PARAMETER ( NIN = 11 )
168 DOUBLE PRECISION PDLAMCH
183 OPEN( nin, file =
'BLLT.dat', status =
'OLD' )
184 READ( nin, fmt = * ) summry
189 READ( NIN, FMT = 9999 ) USRINFO
193 READ( NIN, FMT = * ) SUMMRY
194 READ( NIN, FMT = * ) NOUT
195.NE..AND..NE.
IF( NOUT0 NOUT6 )
196 $ OPEN( NOUT, FILE = SUMMRY, STATUS = 'unknown
' )
202 READ( NIN, FMT = * ) UPLO
207 READ( NIN, FMT = * ) NMAT
208.LT..OR..GT.
IF( NMAT1 NMATLDNVAL ) THEN
209 WRITE( NOUT, FMT = 9994 ) 'n
', LDNVAL
212 READ( NIN, FMT = * ) ( NVAL( I ), I = 1, NMAT )
216 READ( NIN, FMT = * ) NBW
217.LT..OR..GT.
IF( NBW1 NBWLDBWVAL ) THEN
218 WRITE( NOUT, FMT = 9994 ) 'bw
', LDBWVAL
221 READ( NIN, FMT = * ) ( BWVAL( I ), I = 1, NBW )
225 READ( NIN, FMT = * ) NNB
226.LT..OR..GT.
IF( NNB1 NNBLDNBVAL ) THEN
227 WRITE( NOUT, FMT = 9994 ) 'nb
', LDNBVAL
230 READ( NIN, FMT = * ) ( NBVAL( I ), I = 1, NNB )
234 READ( NIN, FMT = * ) NNR
235.LT..OR..GT.
IF( NNR1 NNRLDNRVAL ) THEN
236 WRITE( NOUT, FMT = 9994 ) 'nrhs
', LDNRVAL
239 READ( NIN, FMT = * ) ( NRVAL( I ), I = 1, NNR )
243 READ( NIN, FMT = * ) NNBR
244.LT..OR..GT.
IF( NNBR1 NNBRLDNBRVAL ) THEN
245 WRITE( NOUT, FMT = 9994 ) 'nbrhs
', LDNBRVAL
248 READ( NIN, FMT = * ) ( NBRVAL( I ), I = 1, NNBR )
252 READ( NIN, FMT = * ) NGRIDS
253.LT..OR..GT.
IF( NGRIDS1 NGRIDSLDPVAL ) THEN
254 WRITE( NOUT, FMT = 9994 ) 'grids
', LDPVAL
256.GT.
ELSE IF( NGRIDSLDQVAL ) THEN
257 WRITE( NOUT, FMT = 9994 ) 'grids
', LDQVAL
262 DO 8738 I = 1, NGRIDS
268 READ( NIN, FMT = * ) ( QVAL( I ), I = 1, NGRIDS )
272 READ( NIN, FMT = * ) THRESH
281.LT.
IF( NPROCS1 ) THEN
284 NPROCS = MAX( NPROCS, PVAL( I )*QVAL( I ) )
286 CALL BLACS_SETUP( IAM, NPROCS )
292 CALL BLACS_GET( -1, 0, ICTXT )
293 CALL BLACS_GRIDINIT( ICTXT, 'row-major
', 1, NPROCS )
297 EPS = PDLAMCH( ICTXT, 'eps
' )
301 CALL SGEBS2D( ICTXT, 'all
', ' ', 1, 1, THRESH, 1 )
315 IF( LSAME( UPLO, 'l
' ) ) THEN
322 CALL IGEBS2D( ICTXT, 'all
', ' ', 1, 1, I-1, 1 )
324 CALL IGEBS2D( ICTXT, 'all
', ' ', I-1, 1, WORK, I-1 )
327 CALL ICOPY( NMAT, NVAL, 1, WORK( I ), 1 )
329 CALL ICOPY( NBW, BWVAL, 1, WORK( I ), 1 )
331 CALL ICOPY( NNB, NBVAL, 1, WORK( I ), 1 )
333 CALL ICOPY( NNR, NRVAL, 1, WORK( I ), 1 )
335 CALL ICOPY( NNBR, NBRVAL, 1, WORK( I ), 1 )
337 CALL ICOPY( NGRIDS, PVAL, 1, WORK( I ), 1 )
339 CALL ICOPY( NGRIDS, QVAL, 1, WORK( I ), 1 )
341 CALL IGEBS2D( ICTXT, 'all
', ' ', I-1, 1, WORK, I-1 )
345 WRITE( NOUT, FMT = 9999 )
346 $ 'scalapack banded linear systems.
'
347 WRITE( NOUT, FMT = 9999 ) USRINFO
348 WRITE( NOUT, FMT = * )
349 WRITE( NOUT, FMT = 9999 )
350 $ 'tests of
the parallel
'//
351 $ 'real
double precision band matrix solve
'
352 WRITE( NOUT, FMT = 9999 )
353 $ 'The following scaled residual
'//
354 $ 'checks will be computed:
'
355 WRITE( NOUT, FMT = 9999 )
356 $ ' Solve residual = ||ax - b|| /
'//
357 $ '(||x|| * ||a|| * eps * n)
'
358 IF( LSAME( UPLO, 'l
' ) ) THEN
359 WRITE( NOUT, FMT = 9999 )
360 $ ' factorization residual = ||a - ll
''|| /
'//
361 $ ' (||a|| * eps * n)
'
363 WRITE( NOUT, FMT = 9999 )
364 $ ' factorization residual = ||a - u
''u|| /
'//
365 $ ' (||a|| * eps * n)
'
367 WRITE( NOUT, FMT = 9999 )
368 $ 'the matrix a is randomly
'//
369 $ 'generated
for each test.
'
370 WRITE( NOUT, FMT = * )
371 WRITE( NOUT, FMT = 9999 )
372 $ 'an explanation of the input/output
'//
373 $ 'parameters follows:
'
374 WRITE( NOUT, FMT = 9999 )
375 $ 'time : indicates whether wall or
'//
376 $ 'cpu time was used.
'
378 WRITE( NOUT, FMT = 9999 )
379 $ 'uplo : whether
data represents
''upper
'//
380 $ ''' or
''lower
'' triangular portion of array a.
'
381 WRITE( NOUT, FMT = 9999 )
382 $ 'trans : whether solve is to be done with
'//
383 $ ' ''transpose
'' of matrix a(t,c) or not(n).
'
384 WRITE( NOUT, FMT = 9999 )
385 $ 'n : the number of
'//
387 WRITE( NOUT, FMT = 9999 )
388 $ 'bw : the number of diagonals
'//
390 WRITE( NOUT, FMT = 9999 )
391 $ 'nb : the
size of the column panels the
'//
392 $ ' matrix a is
split into. [-1
for default]
'
393 WRITE( NOUT, FMT = 9999 )
394 $ 'nrhs : the total number of rhs to solve'//
396 WRITE( nout, fmt = 9999 )
397 $
'NBRHS : The number of RHS to be put on '//
398 $
'a column of processes before going'
399 WRITE( nout, fmt = 9999 )
400 $
' on to the next column of processes.'
401 WRITE( nout, fmt = 9999 )
402 $
'P : The number of process rows.'
403 WRITE( nout, fmt = 9999 )
404 $
'Q : The number of process columns.'
405 WRITE( nout, fmt = 9999 )
406 $
'THRESH : If a residual value is less than'//
407 $
' THRESH, CHECK is flagged as PASSED'
408 WRITE( nout, fmt = 9999 )
409 $
'Fact time: Time in seconds to factor the'//
411 WRITE( nout, fmt = 9999 )
412 $
'Sol Time: Time in seconds to solve the'//
414 WRITE( nout, fmt = 9999 )
415 $
'MFLOPS : Rate of execution for factor '//
416 $
'and solve using sequential operation count.'
417 WRITE( nout, fmt = 9999 )
418 $ 'mflop2 : rough estimate of speed
'//
419 $ 'using actual op count(accurate big p,n).
'
420 WRITE( NOUT, FMT = * )
421 WRITE( NOUT, FMT = 9999 )
422 $ 'the following
parameter values will be used:'
423 WRITE( nout, fmt = 9999 )
425 WRITE( nout, fmt = 9996 )
426 $
'N ', ( nval(i), i = 1,
min(nmat, 10) )
428 $
WRITE( nout, fmt = 9997 ) ( nval(i), i = 11, nmat )
429 WRITE( nout, fmt = 9996 )
430 $
'bw ', ( bwval(i), i = 1,
min(nbw, 10) )
432 $
WRITE( nout, fmt = 9997 ) ( bwval(i), i = 11, nbw )
433 WRITE( nout, fmt = 9996 )
434 $
'NB ', ( nbval(i), i = 1,
min(nnb, 10) )
436 $
WRITE( nout, fmt = 9997 ) ( nbval(i), i = 11, nnb )
437 WRITE( nout, fmt = 9996 )
438 $
'NRHS ', ( nrval(i), i = 1,
min(nnr, 10) )
440 $
WRITE( nout, fmt = 9997 ) ( nrval(i), i = 11, nnr )
441 WRITE( nout, fmt = 9996 )
442 $
'NBRHS', ( nbrval(i), i = 1,
min
444 $
WRITE( nout, fmt = 9997 ) ( nbrval(i), i = 11, nnbr )
445 WRITE( nout, fmt = 9996 )
446 $
'P ', ( pval(i), i = 1,
min(ngrids, 10) )
448 $
WRITE( nout, fmt = 9997) ( pval(i), i = 11, ngrids )
449 WRITE( nout, fmt = 9996 )
450 $
'Q ', ( qval(i), i = 1,
min(ngrids, 10) )
452 $
WRITE( nout, fmt = 9997 ) ( qval(i), i = 11, ngrids )
453 WRITE( nout, fmt = * )
454 WRITE( nout, fmt = 9995 ) eps
455 WRITE( nout, fmt = 9998 ) thresh
462 $
CALL blacs_setup( iam, nprocs )
467 CALL blacs_get( -1, 0, ictxt )
472 eps = pdlamch( ictxt,
'eps' )
474 CALL sgebr2d( ictxt,
'All',
' ', 1, 1, thresh, 1, 0, 0 )
475 CALL igebr2d( ictxt,
'All',
' ', 1, 1, i, 1, 0, 0 )
476 CALL igebr2d( ictxt,
'All',
' ', i, 1, work, i, 0, 0 )
490 IF( work( i ) .EQ. 1 )
THEN
497 i = nmat + nbw + nnb + nnr + nnbr + 2*ngrids
499 CALL igebr2d( ictxt,
'All',
' ', 1, i, work, 1, 0, 0 )
501 CALL icopy( nmat, work( i ), 1, nval, 1 )
503 CALL icopy( nbw, work( i ), 1, bwval, 1 )
505 CALL icopy( nnb, work( i ), 1, nbval, 1 )
507 CALL icopy( nnr, work( i ), 1, nrval, 1 )
509 CALL icopy( nnbr, work( i ), 1, nbrval, 1 )
511 CALL icopy( ngrids, work( i ), 1, pval, 1 )
513 CALL icopy( ngrids, work( i ), 1, qval, 1 )
521 20
WRITE( nout, fmt = 9993 )
523 IF( nout.NE.6 .AND. nout.NE.0 )
526 CALL blacs_abort( ictxt, 1 )
530 9998
FORMAT(
'Routines pass computational tests if scaled residual ',
531 $
'is less than ', g12.5 )
532 9997
FORMAT(
' ', 10i6 )
533 9996
FORMAT( 2x, a5,
': ', 10i6 )
534 9995
FORMAT(
'Relative machine precision (eps) is taken to be ',
536 9994
FORMAT(
' Number of values of ',5a,
' is less than 1 or greater ',
538 9993
FORMAT(
' Illegal input in file ',40a,
'. Aborting run.' )
subroutine pdpbinfo(summry, nout, uplo, nmat, nval, ldnval, nbw, bwval, ldbwval, nnb, nbval, ldnbval, nnr, nrval, ldnrval, nnbr, nbrval, ldnbrval, ngrids, pval, ldpval, qval, ldqval, thresh, work, iam, nprocs)