20899
20900
20901 CHARACTER*1 SCOPE
20902 INTEGER ICTXT, M, N, LDA, LDI, TESTNUM, MAXERR, NERR
20903
20904
20905 INTEGER RA(*), CA(*), ERRIBUF(6, MAXERR), ISEED(*)
20906 COMPLEX A(LDA,*), ERRDBUF(2, MAXERR), VALS(*)
20907
20908
20909 INTEGER IBTMYPROC, IBTNPROCS, IBTSPNUM
20910 REAL SBTEPS, CBTABS
20911 COMPLEX CBTRAN
20913
20914
20916
20917
20918 LOGICAL ERROR
20919 INTEGER NPROCS, NNODES, NPROW, NPCOL, MYROW, MYCOL, RAMN, CAMN
20920 INTEGER IAMN, I, J, K, H, DEST, NODE
20921 REAL EPS
20922
20923
20924
20927 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
20928 dest = myrow*nprocs + mycol
20929
20930
20931
20932 IF( scope .EQ. 'R' ) THEN
20933 nnodes = npcol
20934 DO 10 i = 0, nnodes-1
20935 node = myrow * nprocs + i
20936 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
20937 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
20938 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
20939 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
20940 10 CONTINUE
20941 ELSE IF( scope .EQ. 'C' ) THEN
20942 nnodes = nprow
20943 DO 20 i = 0, nnodes-1
20944 node = i * nprocs + mycol
20945 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
20946 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
20947 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
20948 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
20949 20 CONTINUE
20950 ELSE
20951 nnodes = nprow * npcol
20952 DO 30 i = 0, nnodes-1
20953 node = (i / npcol) * nprocs + mod(i, npcol)
20954 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
20955 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
20956 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
20957 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
20958 30 CONTINUE
20959 END IF
20960
20961 DO 100 j = 1, n
20962 DO 90 i = 1, m
20963 h = (j-1)*ldi + i
20964 vals(1) =
cbtran( iseed )
20965 iamn = 1
20966 IF( nnodes .GT. 1 ) THEN
20967 DO 40 k = 1, nnodes-1
20968 vals(k+1) =
cbtran( iseed(k*4+1) )
20970 $ iamn = k + 1
20971 40 CONTINUE
20972 END IF
20973
20974
20975
20976 IF( a(i,j) .NE. vals(iamn) ) THEN
20977
20978
20979
20980 IF( ldi .NE. -1 ) THEN
20981
20982
20983
20984 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
20985 IF( k.GT.0 .AND. k.LE.nnodes ) THEN
20987 $ .GT. 3*eps
20988 IF( .NOT.error ) iamn = k
20989 ELSE
20990 error = .true.
20991 END IF
20992 ELSE
20993
20994
20995
20996
20998 $ .GT. 3*eps
20999 IF( .NOT.error ) THEN
21000 DO 50 k = 1, nnodes
21001 IF( vals(k) .EQ. a(i,j) ) GOTO 60
21002 50 CONTINUE
21003 error = .true.
21004 60 CONTINUE
21005 ENDIF
21006 END IF
21007
21008
21009
21010 IF( error ) THEN
21011 nerr = nerr + 1
21012 erribuf(1, nerr) = testnum
21013 erribuf(2, nerr) = nnodes
21014 erribuf(3, nerr) = dest
21015 erribuf(4, nerr) = i
21016 erribuf(5, nerr) = j
21017 erribuf(6, nerr) = 5
21018 errdbuf(1, nerr) = a(i,j)
21019 errdbuf(2, nerr) = vals(iamn)
21020 END IF
21021 END IF
21022
21023
21024
21025 IF( ldi .NE. -1 ) THEN
21026 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
21027 IF( k.NE.iamn ) THEN
21028
21029
21030
21031
21032
21033 IF( k.GT.nnodes .OR. k.LT.1 ) THEN
21034 error = .true.
21035 ELSE
21036 error = ( vals(k) .NE. vals(iamn) )
21037 END IF
21038 IF( error ) THEN
21039 CALL ibtspcoord( scope, iamn-1, myrow, mycol,
21040 $ npcol, ramn, camn )
21041 IF( ramn .NE. ra(h) ) THEN
21042 nerr = nerr + 1
21043 erribuf(1, nerr) = testnum
21044 erribuf(2, nerr) = nnodes
21045 erribuf(3, nerr) = dest
21046 erribuf(4, nerr) = i
21047 erribuf(5, nerr) = j
21048 erribuf(6, nerr) = -5
21049 errdbuf(1, nerr) = ra(h)
21050 errdbuf(2, nerr) = ramn
21051 END IF
21052 IF( camn .NE. ca(h) ) THEN
21053 nerr = nerr + 1
21054 erribuf(1, nerr) = testnum
21055 erribuf(2, nerr) = nnodes
21056 erribuf(3, nerr) = dest
21057 erribuf(4, nerr) = i
21058 erribuf(5, nerr) = j
21059 erribuf(6, nerr) = -15
21060 errdbuf(1, nerr) = ca(h)
21061 errdbuf(2, nerr) = camn
21062 END IF
21063 END IF
21064 END IF
21065 END IF
21066 90 CONTINUE
21067 100 CONTINUE
21068
21069 RETURN
21070
21071
21072
complex function cbtran(iseed)
subroutine ibtspcoord(scope, pnum, myrow, mycol, npcol, prow, pcol)
real function cbtabs(val)
integer function ibtspnum(scope, prow, pcol, npcol)
integer function ibtnprocs()
integer function ibtmyproc()