SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ dchksum()

subroutine dchksum ( character*1  scope,
integer  ictxt,
integer  m,
integer  n,
double precision, dimension(lda,*)  a,
integer  lda,
integer  testnum,
integer  maxerr,
integer  nerr,
integer, dimension(6, maxerr)  erribuf,
double precision, dimension(2, maxerr)  errdbuf,
integer, dimension(*)  iseed 
)

Definition at line 13177 of file blacstest.f.

13179*
13180* .. Scalar Arguments ..
13181 CHARACTER*1 SCOPE
13182 INTEGER ICTXT, M, N, LDA, TESTNUM, MAXERR, NERR
13183* ..
13184* .. Array Arguments ..
13185 INTEGER ERRIBUF(6, MAXERR), ISEED(*)
13186 DOUBLE PRECISION A(LDA,*), ERRDBUF(2, MAXERR)
13187* ..
13188* .. External Functions ..
13189 INTEGER IBTMYPROC, IBTNPROCS
13190 DOUBLE PRECISION DBTEPS
13191 DOUBLE PRECISION DBTRAN
13192 EXTERNAL ibtmyproc, ibtnprocs, dbteps, dbtran
13193* ..
13194* .. Local Scalars ..
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* .. Executable Statements ..
13200*
13201 nprocs = ibtnprocs()
13202 eps = dbteps()
13203 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
13204 dest = myrow*nprocs + mycol
13205*
13206* Set up seeds to match those used by each proc's genmat call
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* The error bound is figured by
13253* 2 * eps * (nnodes-1) * max(|max element|, |ans|).
13254* The 2 allows for errors in the distributed _AND_ local result.
13255* The eps is machine epsilon. The number of floating point adds
13256* is (nnodes - 1). We use the fact that 0.5 is the maximum element
13257* in order to save ourselves some computation.
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* End of DCHKSUM
13279*
double precision function dbteps()
double precision function dbtran(iseed)
Definition blacstest.f:8619
integer function ibtnprocs()
Definition btprim.f:81
integer function ibtmyproc()
Definition btprim.f:47
#define max(A, B)
Definition pcgemr.c:180
Here is the caller graph for this function: