12601
12602
12603 CHARACTER*1 SCOPE
12604 INTEGER ICTXT, M, N, LDA, TESTNUM, MAXERR, NERR
12605
12606
12607 INTEGER ERRIBUF(6, MAXERR), ISEED(*)
12608 REAL A(LDA,*), ERRDBUF(2, MAXERR)
12609
12610
12611 INTEGER IBTMYPROC, IBTNPROCS
12612 REAL SBTEPS
12613 REAL SBTRAN
12615
12616
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
12622
12625 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
12626 dest = myrow*nprocs + mycol
12627
12628
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
12675
12676
12677
12678
12679
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
12701
real function sbtran(iseed)
integer function ibtnprocs()
integer function ibtmyproc()