19607
19608
19609 CHARACTER*1 SCOPE
19610 INTEGER ICTXT, M, N, LDA, LDI, TESTNUM, MAXERR, NERR
19611
19612
19613 INTEGER RA(*), CA(*), ERRIBUF(6, MAXERR), ISEED(*)
19614 REAL A(LDA,*), ERRDBUF(2, MAXERR), VALS(*)
19615
19616
19617 INTEGER IBTMYPROC, IBTNPROCS, IBTSPNUM
19618 REAL SBTEPS, SBTABS
19619 REAL SBTRAN
19621
19622
19624
19625
19626 LOGICAL ERROR
19627 INTEGER NPROCS, NNODES, NPROW, NPCOL, MYROW, MYCOL, RAMN, CAMN
19628 INTEGER IAMN, I, J, K, H, DEST, NODE
19629 REAL EPS
19630
19631
19632
19635 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
19636 dest = myrow*nprocs + mycol
19637
19638
19639
19640 IF( scope .EQ. 'R' ) THEN
19641 nnodes = npcol
19642 DO 10 i = 0, nnodes-1
19643 node = myrow * nprocs + i
19644 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
19645 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
19646 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
19647 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
19648 10 CONTINUE
19649 ELSE IF( scope .EQ. 'C' ) THEN
19650 nnodes = nprow
19651 DO 20 i = 0, nnodes-1
19652 node = i * nprocs + mycol
19653 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
19654 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
19655 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
19656 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
19657 20 CONTINUE
19658 ELSE
19659 nnodes = nprow * npcol
19660 DO 30 i = 0, nnodes-1
19661 node = (i / npcol) * nprocs + mod(i, npcol)
19662 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
19663 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
19664 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
19665 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
19666 30 CONTINUE
19667 END IF
19668
19669 DO 100 j = 1, n
19670 DO 90 i = 1, m
19671 h = (j-1)*ldi + i
19672 vals(1) =
sbtran( iseed )
19673 iamn = 1
19674 IF( nnodes .GT. 1 ) THEN
19675 DO 40 k = 1, nnodes-1
19676 vals(k+1) =
sbtran( iseed(k*4+1) )
19678 $ iamn = k + 1
19679 40 CONTINUE
19680 END IF
19681
19682
19683
19684 IF( a(i,j) .NE. vals(iamn) ) THEN
19685
19686
19687
19688 IF( ldi .NE. -1 ) THEN
19689
19690
19691
19692 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
19693 IF( k.GT.0 .AND. k.LE.nnodes ) THEN
19695 IF( .NOT.error ) iamn = k
19696 ELSE
19697 error = .true.
19698 END IF
19699 ELSE
19700
19701
19702
19703
19704 error = (
sbtabs( a(i,j) ) .NE.
sbtabs( vals(iamn) ) )
19705 IF( .NOT.error ) THEN
19706 DO 50 k = 1, nnodes
19707 IF( vals(k) .EQ. a(i,j) ) GOTO 60
19708 50 CONTINUE
19709 error = .true.
19710 60 CONTINUE
19711 ENDIF
19712 END IF
19713
19714
19715
19716 IF( error ) THEN
19717 nerr = nerr + 1
19718 erribuf(1, nerr) = testnum
19719 erribuf(2, nerr) = nnodes
19720 erribuf(3, nerr) = dest
19721 erribuf(4, nerr) = i
19722 erribuf(5, nerr) = j
19723 erribuf(6, nerr) = 5
19724 errdbuf(1, nerr) = a(i,j)
19725 errdbuf(2, nerr) = vals(iamn)
19726 END IF
19727 END IF
19728
19729
19730
19731 IF( ldi .NE. -1 ) THEN
19732 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
19733 IF( k.NE.iamn ) THEN
19734
19735
19736
19737
19738
19739 IF( k.GT.nnodes .OR. k.LT.1 ) THEN
19740 error = .true.
19741 ELSE
19742 error = ( vals(k) .NE. vals(iamn) )
19743 END IF
19744 IF( error ) THEN
19745 CALL ibtspcoord( scope, iamn-1, myrow, mycol,
19746 $ npcol, ramn, camn )
19747 IF( ramn .NE. ra(h) ) THEN
19748 nerr = nerr + 1
19749 erribuf(1, nerr) = testnum
19750 erribuf(2, nerr) = nnodes
19751 erribuf(3, nerr) = dest
19752 erribuf(4, nerr) = i
19753 erribuf(5, nerr) = j
19754 erribuf(6, nerr) = -5
19755 errdbuf(1, nerr) = ra(h)
19756 errdbuf(2, nerr) = ramn
19757 END IF
19758 IF( camn .NE. ca(h) ) THEN
19759 nerr = nerr + 1
19760 erribuf(1, nerr) = testnum
19761 erribuf(2, nerr) = nnodes
19762 erribuf(3, nerr) = dest
19763 erribuf(4, nerr) = i
19764 erribuf(5, nerr) = j
19765 erribuf(6, nerr) = -15
19766 errdbuf(1, nerr) = ca(h)
19767 errdbuf(2, nerr) = camn
19768 END IF
19769 END IF
19770 END IF
19771 END IF
19772 90 CONTINUE
19773 100 CONTINUE
19774
19775 RETURN
19776
19777
19778
subroutine ibtspcoord(scope, pnum, myrow, mycol, npcol, prow, pcol)
integer function ibtspnum(scope, prow, pcol, npcol)
real function sbtran(iseed)
real function sbtabs(val)
integer function ibtnprocs()
integer function ibtmyproc()