SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ schksum()

subroutine schksum ( character*1  scope,
integer  ictxt,
integer  m,
integer  n,
real, dimension(lda,*)  a,
integer  lda,
integer  testnum,
integer  maxerr,
integer  nerr,
integer, dimension(6, maxerr)  erribuf,
real, dimension(2, maxerr)  errdbuf,
integer, dimension(*)  iseed 
)

Definition at line 12599 of file blacstest.f.

12601*
12602* .. Scalar Arguments ..
12603 CHARACTER*1 SCOPE
12604 INTEGER ICTXT, M, N, LDA, TESTNUM, MAXERR, NERR
12605* ..
12606* .. Array Arguments ..
12607 INTEGER ERRIBUF(6, MAXERR), ISEED(*)
12608 REAL A(LDA,*), ERRDBUF(2, MAXERR)
12609* ..
12610* .. External Functions ..
12611 INTEGER IBTMYPROC, IBTNPROCS
12612 REAL SBTEPS
12613 REAL SBTRAN
12614 EXTERNAL ibtmyproc, ibtnprocs, sbteps, sbtran
12615* ..
12616* .. Local Scalars ..
12617 INTEGER NPROCS, NPROW, NPCOL, MYROW, MYCOL, NODE, NNODES, DEST
12618 INTEGER I, J, K
12619 REAL ANS, EPS, ERRBND, POSNUM, NEGNUM, TMP
12620* ..
12621* .. Executable Statements ..
12622*
12623 nprocs = ibtnprocs()
12624 eps = sbteps()
12625 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
12626 dest = myrow*nprocs + mycol
12627*
12628* Set up seeds to match those used by each proc's genmat call
12629*
12630 IF( scope .EQ. 'R' ) THEN
12631 nnodes = npcol
12632 DO 10 i = 0, nnodes-1
12633 node = myrow * nprocs + i
12634 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
12635 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
12636 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
12637 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
12638 10 CONTINUE
12639 ELSE IF( scope .EQ. 'C' ) THEN
12640 nnodes = nprow
12641 DO 20 i = 0, nnodes-1
12642 node = i * nprocs + mycol
12643 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
12644 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
12645 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
12646 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
12647 20 CONTINUE
12648 ELSE
12649 nnodes = nprow * npcol
12650 DO 30 i = 0, nnodes-1
12651 node = (i / npcol) * nprocs + mod(i, npcol)
12652 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
12653 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
12654 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
12655 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
12656 30 CONTINUE
12657 END IF
12658*
12659 DO 100 j = 1, n
12660 DO 90 i = 1, m
12661 ans = 0
12662 posnum = 0
12663 negnum = 0
12664 DO 40 k = 0, nnodes-1
12665 tmp = sbtran( iseed(k*4+1) )
12666 IF( tmp .LT. 0 ) THEN
12667 negnum = negnum + tmp
12668 ELSE
12669 posnum = posnum + tmp
12670 END IF
12671 ans = ans + tmp
12672 40 CONTINUE
12673*
12674* The error bound is figured by
12675* 2 * eps * (nnodes-1) * max(|max element|, |ans|).
12676* The 2 allows for errors in the distributed _AND_ local result.
12677* The eps is machine epsilon. The number of floating point adds
12678* is (nnodes - 1). We use the fact that 0.5 is the maximum element
12679* in order to save ourselves some computation.
12680*
12681 errbnd = 2 * eps * nnodes * max( posnum, -negnum )
12682 IF( abs( ans - a(i,j) ) .GT. errbnd ) THEN
12683 nerr = nerr + 1
12684 IF( nerr .LE. maxerr ) THEN
12685 erribuf(1, nerr) = testnum
12686 erribuf(2, nerr) = nnodes
12687 erribuf(3, nerr) = dest
12688 erribuf(4, nerr) = i
12689 erribuf(5, nerr) = j
12690 erribuf(6, nerr) = 5
12691 errdbuf(1, nerr) = a(i,j)
12692 errdbuf(2, nerr) = ans
12693 END IF
12694 END IF
12695 90 CONTINUE
12696 100 CONTINUE
12697*
12698 RETURN
12699*
12700* End of SCHKSUM
12701*
real function sbtran(iseed)
Definition blacstest.f:7555
real function sbteps()
integer function ibtnprocs()
Definition btprim.f:81
integer function ibtmyproc()
Definition btprim.f:47
#define max(A, B)
Definition pcgemr.c:180
Here is the caller graph for this function: