17500
17501
17502 CHARACTER*1 SCOPE
17503 INTEGER ICTXT, M, N, LDA, LDI, TESTNUM, MAXERR, NERR
17504
17505
17506 INTEGER RA(*), CA(*), ERRIBUF(6, MAXERR), ISEED(*)
17507 COMPLEX A(LDA,*), ERRDBUF(2, MAXERR), VALS(*)
17508
17509
17510 INTEGER IBTMYPROC, IBTNPROCS, IBTSPNUM
17511 REAL SBTEPS, CBTABS
17512 COMPLEX CBTRAN
17514
17515
17517
17518
17519 LOGICAL ERROR
17520 INTEGER NPROCS, NNODES, NPROW, NPCOL, MYROW, MYCOL, RAMX, CAMX
17521 INTEGER IAMX, I, J, K, H, DEST, NODE
17522 REAL EPS
17523
17524
17525
17528 CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
17529 dest = myrow*nprocs + mycol
17530
17531
17532
17533 IF( scope .EQ. 'R' ) THEN
17534 nnodes = npcol
17535 DO 10 i = 0, nnodes-1
17536 node = myrow * nprocs + i
17537 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
17538 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
17539 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
17540 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
17541 10 CONTINUE
17542 ELSE IF( scope .EQ. 'C' ) THEN
17543 nnodes = nprow
17544 DO 20 i = 0, nnodes-1
17545 node = i * nprocs + mycol
17546 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
17547 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
17548 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
17549 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
17550 20 CONTINUE
17551 ELSE
17552 nnodes = nprow * npcol
17553 DO 30 i = 0, nnodes-1
17554 node = (i / npcol) * nprocs + mod(i, npcol)
17555 iseed(i*4+1) = mod( 1002 + testnum*5 + node*3, 4096 )
17556 iseed(i*4+2) = mod( 2027 + testnum*7 + node, 4096 )
17557 iseed(i*4+3) = mod( 1234 + testnum + node*3, 4096 )
17558 iseed(i*4+4) = mod( 4311 + testnum*10 + node*2, 4096 )
17559 30 CONTINUE
17560 END IF
17561
17562 DO 100 j = 1, n
17563 DO 90 i = 1, m
17564 h = (j-1)*ldi + i
17565 vals(1) =
cbtran( iseed )
17566 iamx = 1
17567 IF( nnodes .GT. 1 ) THEN
17568 DO 40 k = 1, nnodes-1
17569 vals(k+1) =
cbtran( iseed(k*4+1) )
17571 $ iamx = k + 1
17572 40 CONTINUE
17573 END IF
17574
17575
17576
17577 IF( a(i,j) .NE. vals(iamx) ) THEN
17578
17579
17580
17581 IF( ldi .NE. -1 ) THEN
17582
17583
17584
17585 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
17586 IF( k.GT.0 .AND. k.LE.nnodes ) THEN
17588 $ .GT. 3*eps
17589 IF( .NOT.error ) iamx = k
17590 ELSE
17591 error = .true.
17592 END IF
17593 ELSE
17594
17595
17596
17597
17599 $ .GT. 3*eps
17600 IF( .NOT.error ) THEN
17601 DO 50 k = 1, nnodes
17602 IF( vals(k) .EQ. a(i,j) ) GOTO 60
17603 50 CONTINUE
17604 error = .true.
17605 60 CONTINUE
17606 ENDIF
17607 END IF
17608
17609
17610
17611 IF( error ) THEN
17612 nerr = nerr + 1
17613 erribuf(1, nerr) = testnum
17614 erribuf(2, nerr) = nnodes
17615 erribuf(3, nerr) = dest
17616 erribuf(4, nerr) = i
17617 erribuf(5, nerr) = j
17618 erribuf(6, nerr) = 5
17619 errdbuf(1, nerr) = a(i,j)
17620 errdbuf(2, nerr) = vals(iamx)
17621 END IF
17622 END IF
17623
17624
17625
17626 IF( ldi .NE. -1 ) THEN
17627 k =
ibtspnum( scope, ra(h), ca(h), npcol ) + 1
17628 IF( k.NE.iamx ) THEN
17629
17630
17631
17632
17633
17634 IF( k.GT.nnodes .OR. k.LT.1 ) THEN
17635 error = .true.
17636 ELSE
17637 error = ( vals(k) .NE. vals(iamx) )
17638 END IF
17639 IF( error ) THEN
17640 CALL ibtspcoord( scope, iamx-1, myrow, mycol,
17641 $ npcol, ramx, camx )
17642 IF( ramx .NE. ra(h) ) THEN
17643 nerr = nerr + 1
17644 erribuf(1, nerr) = testnum
17645 erribuf(2, nerr) = nnodes
17646 erribuf(3, nerr) = dest
17647 erribuf(4, nerr) = i
17648 erribuf(5, nerr) = j
17649 erribuf(6, nerr) = -5
17650 errdbuf(1, nerr) = ra(h)
17651 errdbuf(2, nerr) = ramx
17652 END IF
17653 IF( camx .NE. ca(h) ) THEN
17654 nerr = nerr + 1
17655 erribuf(1, nerr) = testnum
17656 erribuf(2, nerr) = nnodes
17657 erribuf(3, nerr) = dest
17658 erribuf(4, nerr) = i
17659 erribuf(5, nerr) = j
17660 erribuf(6, nerr) = -15
17661 errdbuf(1, nerr) = ca(h)
17662 errdbuf(2, nerr) = camx
17663 END IF
17664 END IF
17665 END IF
17666 END IF
17667 90 CONTINUE
17668 100 CONTINUE
17669
17670 RETURN
17671
17672
17673
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()