15870
15871
15872 CHARACTER*1 SCOPE
15873 INTEGER ICTXT, M, N, LDA, LDI, TESTNUM, MAXERR, NERR
15874
15875
15876 INTEGER RA(*), CA(*), ERRIBUF(6, MAXERR), ISEED(*)
15877 REAL A(LDA,*), ERRDBUF(2, MAXERR), VALS(*)
15878
15879
15880 INTEGER IBTMYPROC, IBTNPROCS, IBTSPNUM
15881 REAL SBTEPS, SBTABS
15882 REAL SBTRAN
15884
15885
15887
15888
15889 LOGICAL ERROR
15890 INTEGER NPROCS, NNODES, NPROW, NPCOL, MYROW, MYCOL, RAMX, CAMX
15891 INTEGER IAMX, I, J, K, H, DEST, NODE
15892 REAL EPS
15893
15894
15895
15898 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
15899 dest = myrow*nprocs + mycol
15900
15901
15902
15903 IF( scope .EQ. 'R' ) THEN
15904 nnodes = npcol
15905 DO 10 i = 0, nnodes-1
15906 node = myrow * nprocs + i
15907 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
15908 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
15909 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
15910 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
15911 10 CONTINUE
15912 ELSE IF( scope .EQ. 'C' ) THEN
15913 nnodes = nprow
15914 DO 20 i = 0, nnodes-1
15915 node = i * nprocs + mycol
15916 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
15917 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
15918 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
15919 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
15920 20 CONTINUE
15921 ELSE
15922 nnodes = nprow * npcol
15923 DO 30 i = 0, nnodes-1
15924 node = (i / npcol) * nprocs + mod(i, npcol)
15925 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
15926 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
15927 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
15928 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
15929 30 CONTINUE
15930 END IF
15931
15932 DO 100 j = 1, n
15933 DO 90 i = 1, m
15934 h = (j-1)*ldi + i
15935 vals(1) =
sbtran( iseed )
15936 iamx = 1
15937 IF( nnodes .GT. 1 ) THEN
15938 DO 40 k = 1, nnodes-1
15939 vals(k+1) =
sbtran( iseed(k*4+1) )
15941 $ iamx = k + 1
15942 40 CONTINUE
15943 END IF
15944
15945
15946
15947 IF( a(i,j) .NE. vals(iamx) ) THEN
15948
15949
15950
15951 IF( ldi .NE. -1 ) THEN
15952
15953
15954
15955 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
15956 IF( k.GT.0 .AND. k.LE.nnodes ) THEN
15958 IF( .NOT.error ) iamx = k
15959 ELSE
15960 error = .true.
15961 END IF
15962 ELSE
15963
15964
15965
15966
15967 error = (
sbtabs( a(i,j) ) .NE.
sbtabs( vals(iamx) ) )
15968 IF( .NOT.error ) THEN
15969 DO 50 k = 1, nnodes
15970 IF( vals(k) .EQ. a(i,j) ) GOTO 60
15971 50 CONTINUE
15972 error = .true.
15973 60 CONTINUE
15974 ENDIF
15975 END IF
15976
15977
15978
15979 IF( error ) THEN
15980 nerr = nerr + 1
15981 erribuf(1, nerr) = testnum
15982 erribuf(2, nerr) = nnodes
15983 erribuf(3, nerr) = dest
15984 erribuf(4, nerr) = i
15985 erribuf(5, nerr) = j
15986 erribuf(6, nerr) = 5
15987 errdbuf(1, nerr) = a(i,j)
15988 errdbuf(2, nerr) = vals(iamx)
15989 END IF
15990 END IF
15991
15992
15993
15994 IF( ldi .NE. -1 ) THEN
15995 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
15996 IF( k.NE.iamx ) THEN
15997
15998
15999
16000
16001
16002 IF( k.GT.nnodes .OR. k.LT.1 ) THEN
16003 error = .true.
16004 ELSE
16005 error = ( vals(k) .NE. vals(iamx) )
16006 END IF
16007 IF( error ) THEN
16008 CALL ibtspcoord( scope, iamx-1, myrow, mycol,
16009 $ npcol, ramx, camx )
16010 IF( ramx .NE. ra(h) ) THEN
16011 nerr = nerr + 1
16012 erribuf(1, nerr) = testnum
16013 erribuf(2, nerr) = nnodes
16014 erribuf(3, nerr) = dest
16015 erribuf(4, nerr) = i
16016 erribuf(5, nerr) = j
16017 erribuf(6, nerr) = -5
16018 errdbuf(1, nerr) = ra(h)
16019 errdbuf(2, nerr) = ramx
16020 END IF
16021 IF( camx .NE. ca(h) ) THEN
16022 nerr = nerr + 1
16023 erribuf(1, nerr) = testnum
16024 erribuf(2, nerr) = nnodes
16025 erribuf(3, nerr) = dest
16026 erribuf(4, nerr) = i
16027 erribuf(5, nerr) = j
16028 erribuf(6, nerr) = -15
16029 errdbuf(1, nerr) = ca(h)
16030 errdbuf(2, nerr) = camx
16031 END IF
16032 END IF
16033 END IF
16034 END IF
16035 90 CONTINUE
16036 100 CONTINUE
16037
16038 RETURN
16039
16040
16041
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()