13179
13180
13181 CHARACTER*1 SCOPE
13182 INTEGER ICTXT, M, N, LDA, TESTNUM, MAXERR, NERR
13183
13184
13185 INTEGER ERRIBUF(6, MAXERR), ISEED(*)
13186 DOUBLE PRECISION A(LDA,*), ERRDBUF(2, MAXERR)
13187
13188
13189 INTEGER IBTMYPROC, IBTNPROCS
13190 DOUBLE PRECISION DBTEPS
13191 DOUBLE PRECISION DBTRAN
13193
13194
13195 INTEGER NPROCS, NPROW, NPCOL, MYROW, MYCOL, NODE, NNODES, DEST
13196 INTEGER I, J, K
13197 DOUBLE PRECISION ANS, EPS, ERRBND, POSNUM, NEGNUM, TMP
13198
13199
13200
13203 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
13204 dest = myrow*nprocs + mycol
13205
13206
13207
13208 IF( scope .EQ. 'R' ) THEN
13209 nnodes = npcol
13210 DO 10 i = 0, nnodes-1
13211 node = myrow * nprocs + i
13212 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
13213 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
13214 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
13215 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
13216 10 CONTINUE
13217 ELSE IF( scope .EQ. 'C' ) THEN
13218 nnodes = nprow
13219 DO 20 i = 0, nnodes-1
13220 node = i * nprocs + mycol
13221 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
13222 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
13223 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
13224 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
13225 20 CONTINUE
13226 ELSE
13227 nnodes = nprow * npcol
13228 DO 30 i = 0, nnodes-1
13229 node = (i / npcol) * nprocs + mod(i, npcol)
13230 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
13231 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
13232 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
13233 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
13234 30 CONTINUE
13235 END IF
13236
13237 DO 100 j = 1, n
13238 DO 90 i = 1, m
13239 ans = 0
13240 posnum = 0
13241 negnum = 0
13242 DO 40 k = 0, nnodes-1
13243 tmp =
dbtran( iseed(k*4+1) )
13244 IF( tmp .LT. 0 ) THEN
13245 negnum = negnum + tmp
13246 ELSE
13247 posnum = posnum + tmp
13248 END IF
13249 ans = ans + tmp
13250 40 CONTINUE
13251
13252
13253
13254
13255
13256
13257
13258
13259 errbnd = 2 * eps * nnodes *
max( posnum, -negnum )
13260 IF( abs( ans - a(i,j) ) .GT. errbnd ) THEN
13261 nerr = nerr + 1
13262 IF( nerr .LE. maxerr ) THEN
13263 erribuf(1, nerr) = testnum
13264 erribuf(2, nerr) = nnodes
13265 erribuf(3, nerr) = dest
13266 erribuf(4, nerr) = i
13267 erribuf(5, nerr) = j
13268 erribuf(6, nerr) = 5
13269 errdbuf(1, nerr) = a(i,j)
13270 errdbuf(2, nerr) = ans
13271 END IF
13272 END IF
13273 90 CONTINUE
13274 100 CONTINUE
13275
13276 RETURN
13277
13278
13279
double precision function dbteps()
double precision function dbtran(iseed)
integer function ibtnprocs()
integer function ibtmyproc()