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

◆ cchkamn()

subroutine cchkamn ( character*1  scope,
integer  ictxt,
integer  m,
integer  n,
complex, dimension(lda,*)  a,
integer  lda,
integer, dimension(*)  ra,
integer, dimension(*)  ca,
integer  ldi,
integer  testnum,
integer  maxerr,
integer  nerr,
integer, dimension(6, maxerr)  erribuf,
complex, dimension(2, maxerr)  errdbuf,
integer, dimension(*)  iseed,
complex, dimension(*)  vals 
)

Definition at line 20896 of file blacstest.f.

20899*
20900* .. Scalar Arguments ..
20901 CHARACTER*1 SCOPE
20902 INTEGER ICTXT, M, N, LDA, LDI, TESTNUM, MAXERR, NERR
20903* ..
20904* .. Array Arguments ..
20905 INTEGER RA(*), CA(*), ERRIBUF(6, MAXERR), ISEED(*)
20906 COMPLEX A(LDA,*), ERRDBUF(2, MAXERR), VALS(*)
20907* ..
20908* .. External Functions ..
20909 INTEGER IBTMYPROC, IBTNPROCS, IBTSPNUM
20910 REAL SBTEPS, CBTABS
20911 COMPLEX CBTRAN
20913* ..
20914* .. External Subroutines ..
20915 EXTERNAL ibtspcoord
20916* ..
20917* .. Local Scalars ..
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* .. Executable Statements ..
20924*
20925 nprocs = ibtnprocs()
20926 eps = sbteps()
20927 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
20928 dest = myrow*nprocs + mycol
20929*
20930* Set up seeds to match those used by each proc's genmat call
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) )
20969 IF( cbtabs( vals(k+1) ) .LT. cbtabs( vals(iamn) ) )
20970 $ iamn = k + 1
20971 40 CONTINUE
20972 END IF
20973*
20974* If BLACS have not returned same value we've chosen
20975*
20976 IF( a(i,j) .NE. vals(iamn) ) THEN
20977*
20978* If we have RA and CA arrays
20979*
20980 IF( ldi .NE. -1 ) THEN
20981*
20982* Any number having the same absolute value is a valid max
20983*
20984 k = ibtspnum( scope, ra(h), ca(h), npcol ) + 1
20985 IF( k.GT.0 .AND. k.LE.nnodes ) THEN
20986 error = abs( cbtabs(vals(k)) - cbtabs(vals(iamn)) )
20987 $ .GT. 3*eps
20988 IF( .NOT.error ) iamn = k
20989 ELSE
20990 error = .true.
20991 END IF
20992 ELSE
20993*
20994* Error if BLACS answer not same absolute value, or if it
20995* was not really in the numbers being compared
20996*
20997 error = abs( cbtabs(a(i,j)) - cbtabs(vals(iamn)) )
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* If the value is in error
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* If they are defined, make sure coordinate entries are OK
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* Make sure more than one proc doesn't have exact same value
21030* (and therefore there may be more than one valid coordinate
21031* for a single value)
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* End of CCHKAMN
21072*
complex function cbtran(iseed)
Definition blacstest.f:9683
subroutine ibtspcoord(scope, pnum, myrow, mycol, npcol, prow, pcol)
real function cbtabs(val)
integer function ibtspnum(scope, prow, pcol, npcol)
real function sbteps()
integer function ibtnprocs()
Definition btprim.f:81
integer function ibtmyproc()
Definition btprim.f:47
Here is the call graph for this function:
Here is the caller graph for this function: