16865
16866
16867
16868
16869
16870
16871
16872 INTEGER MEMLEN, NDEST, NGRID, NMAT, NSCOPE, NTOP, OUTNUM, RCLEN,
16873 $ TOPSCOHRNT, TOPSREPEAT, VERB
16874
16875
16876 CHARACTER*1 SCOPE0(NSCOPE), TOP0(NTOP)
16877 INTEGER M0(NMAT), N0(NMAT), LDAS0(NMAT), LDAD0(NMAT), LDI0(NMAT)
16878 INTEGER RDEST0(NDEST), CDEST0(NDEST), CONTEXT0(NGRID)
16879 INTEGER P0(NGRID), Q0(NGRID), ISEED(*), RMEM(RCLEN), CMEM(RCLEN)
16880 COMPLEX MEM(MEMLEN)
16881
16882
16883
16884
16885
16886
16887
16888
16889
16890
16891
16892
16893
16894
16895
16896
16897
16898
16899
16900
16901
16902
16903
16904
16905
16906
16907
16908
16909
16910
16911
16912
16913
16914
16915
16916
16917
16918
16919
16920
16921
16922
16923
16924
16925
16926
16927
16928
16929
16930
16931
16932
16933
16934
16935
16936
16937
16938
16939
16940
16941
16942
16943
16944
16945
16946
16947
16948
16949
16950
16951
16952
16953
16954
16955
16956
16957
16958
16959
16960
16961
16962
16963
16964
16965
16966
16967
16968
16969
16970
16971
16972
16973
16974
16975
16976
16977
16978
16979 LOGICAL ALLPASS, LSAME
16980 INTEGER IBTMYPROC, IBTNPROCS, IBTSIZEOF
16982
16983
16984 EXTERNAL blacs_gridinfo, cgamx2d
16986
16987
16988 CHARACTER*1 SCOPE, TOP
16989 LOGICAL INGRID, TESTOK, ALLRCV
16990 INTEGER APTR, CAPTR, CDEST, CDEST2, CONTEXT, CSIZE, ERRDPTR,
16991 $ ERRIPTR, I, IAM, ICHECKVAL, IDE, IGR, IMA, IPAD, IPOST,
16992 $ IPRE, ISC, ISIZE, ISTART, ISTOP, ITC, ITC1, ITC2, ITO,
16993 $ ITR, ITR1, ITR2, J, K, LDA, LDADST, LDASRC, LDI, M,
16994 $ MAXERR, MYCOL, MYROW, N, NERR, NFAIL, NPCOL, NPROW, NSKIP,
16995 $ PREAPTR, RAPTR, RDEST, RDEST2, SETWHAT, TESTNUM, VALPTR
16996 COMPLEX CHECKVAL
16997
16998
16999
17000
17001
17002 checkval =
cmplx( -0.91e0, -0.71e0 )
17004 checkval = iam * checkval
17007 icheckval = -iam
17008
17009
17010
17011 IF( iam .EQ. 0 ) THEN
17012 WRITE(outnum, *) ' '
17013 WRITE(outnum, *) ' '
17014 WRITE(outnum, 1000 )
17015 IF( verb .GT. 0 ) THEN
17016 WRITE(outnum,*) ' '
17017 WRITE(outnum, 2000) 'NSCOPE:', nscope
17018 WRITE(outnum, 3000) ' SCOPE:', ( scope0(i), i = 1, nscope )
17019 WRITE(outnum, 2000) 'TReps :', topsrepeat
17020 WRITE(outnum, 2000) 'TCohr :', topscohrnt
17021 WRITE(outnum, 2000) 'NTOP :', ntop
17022 WRITE(outnum, 3000) ' TOP :', ( top0(i), i = 1, ntop )
17023 WRITE(outnum, 2000) 'NMAT :', nmat
17024 WRITE(outnum, 2000) ' M :', ( m0(i), i = 1, nmat )
17025 WRITE(outnum, 2000) ' N :', ( n0(i), i = 1, nmat )
17026 WRITE(outnum, 2000) ' LDAS :', ( ldas0(i), i = 1, nmat )
17027 WRITE(outnum, 2000) ' LDAD :', ( ldad0(i), i = 1, nmat )
17028 WRITE(outnum, 2000) ' LDI :', ( ldi0(i), i = 1, nmat )
17029 WRITE(outnum, 2000) 'NDEST :', ndest
17030 WRITE(outnum, 2000) ' RDEST:',( rdest0(i), i = 1, ndest )
17031 WRITE(outnum, 2000) ' CDEST:',( cdest0(i), i = 1, ndest )
17032 WRITE(outnum, 2000) 'NGRIDS:', ngrid
17033 WRITE(outnum, 2000) ' P :', ( p0(i), i = 1, ngrid )
17034 WRITE(outnum, 2000) ' Q :', ( q0(i), i = 1, ngrid )
17035 WRITE(outnum, 2000) 'VERB :', verb
17036 WRITE(outnum,*) ' '
17037 END IF
17038 IF( verb .GT. 1 ) THEN
17039 WRITE(outnum,4000)
17040 WRITE(outnum,5000)
17041 END IF
17042 END IF
17043 IF (topsrepeat.EQ.0) THEN
17044 itr1 = 0
17045 itr2 = 0
17046 ELSE IF (topsrepeat.EQ.1) THEN
17047 itr1 = 1
17048 itr2 = 1
17049 ELSE
17050 itr1 = 0
17051 itr2 = 1
17052 END IF
17053
17054
17055
17056 i = 0
17057 DO 10 ima = 1, nmat
17058 ipad = 4 * m0(ima)
17059 k = n0(ima) * max0( ldas0(ima), ldad0(ima) ) + ipad
17060 IF( k .GT. i ) i = k
17061 10 CONTINUE
17063 maxerr = ( csize * (memlen-i) ) / ( csize*2 + isize*6 )
17064 IF( maxerr .LT. 1 ) THEN
17065 WRITE(outnum,*) 'ERROR: Not enough memory to run MAX tests.'
17066 CALL blacs_abort(-1, 1)
17067 END IF
17068 errdptr = i + 1
17069 erriptr = errdptr + maxerr
17070 nerr = 0
17071 testnum = 0
17072 nfail = 0
17073 nskip = 0
17074
17075
17076
17077 DO 90 igr = 1, ngrid
17078
17079
17080
17081 context = context0(igr)
17082 CALL blacs_gridinfo( context, nprow, npcol, myrow, mycol )
17083 ingrid = ( (myrow.LT.nprow) .AND. (mycol.LT.npcol) )
17084
17085 DO 80 isc = 1, nscope
17086 scope = scope0(isc)
17087 DO 70 ito = 1, ntop
17088 top = top0(ito)
17089
17090
17091
17092
17093 IF(
lsame(top,
'M') )
THEN
17094 setwhat = 13
17095 IF( scope .EQ. 'R' ) THEN
17096 istart = -(npcol - 1)
17097 istop = -istart
17098 ELSE IF (scope .EQ. 'C') THEN
17099 istart = -(nprow - 1)
17100 istop = -istart
17101 ELSE
17102 istart = -(nprow*npcol - 1)
17103 istop = -istart
17104 ENDIF
17105 ELSE IF(
lsame(top,
'T') )
THEN
17106 setwhat = 14
17107 istart = 1
17108 IF( scope .EQ. 'R' ) THEN
17109 istop = npcol - 1
17110 ELSE IF (scope .EQ. 'C') THEN
17111 istop = nprow - 1
17112 ELSE
17113 istop = nprow*npcol - 1
17114 ENDIF
17115 ELSE
17116 setwhat = 0
17117 istart = 1
17118 istop = 1
17119 ENDIF
17120 DO 60 ima = 1, nmat
17121 m = m0(ima)
17122 n = n0(ima)
17123 ldasrc = ldas0(ima)
17124 ldadst = ldad0(ima)
17125 ldi = ldi0(ima)
17126 ipre = 2 * m
17127 ipost = ipre
17128 preaptr = 1
17129 aptr = preaptr + ipre
17130
17131 DO 50 ide = 1, ndest
17132 testnum = testnum + 1
17133 rdest2 = rdest0(ide)
17134 cdest2 = cdest0(ide)
17135
17136
17137
17138
17139 allrcv = ( (rdest2.EQ.-1) .OR. (cdest2.EQ.-1) )
17140 IF( allrcv ) THEN
17141 rdest = nprow - 1
17142 cdest = npcol - 1
17143 IF (topscohrnt.EQ.0) THEN
17144 itr1 = 0
17145 itr2 = 0
17146 ELSE IF (topscohrnt.EQ.1) THEN
17147 itr1 = 1
17148 itr2 = 1
17149 ELSE
17150 itr1 = 0
17151 itr2 = 1
17152 END IF
17153 ELSE
17154 rdest = rdest2
17155 cdest = cdest2
17156 itc1 = 0
17157 itc2 = 0
17158 END IF
17159 IF( rdest.GE.p0(igr) .OR. cdest.GE.q0(igr) ) THEN
17160 nskip = nskip + 1
17161 GOTO 50
17162 END IF
17163
17164 IF( myrow.EQ.rdest .AND. mycol.EQ.cdest ) THEN
17165 lda = ldadst
17166 ELSE
17167 lda = ldasrc
17168 END IF
17169 valptr = aptr + ipost + n * lda
17170 IF( verb .GT. 1 ) THEN
17171 IF( iam .EQ. 0 ) THEN
17172 WRITE(outnum, 6000)
17173 $ testnum, 'RUNNING', scope, top, m, n,
17174 $ ldasrc, ldadst, ldi, rdest2, cdest2,
17175 $ nprow, npcol
17176 END IF
17177 END IF
17178
17179
17180
17181 testok = .true.
17182 IF( ingrid ) THEN
17183 IF( (myrow.EQ.rdest .AND. scope.EQ.'R') .OR.
17184 $ (mycol.EQ.cdest .AND. scope.EQ.'C') .OR.
17185 $ (scope .EQ. 'A') ) THEN
17186
17187 k = nerr
17188 DO 40 itr = itr1, itr2
17189 CALL blacs_set(context, 15, itr)
17190 DO 35 itc = itc1, itc2
17191 CALL blacs_set(context, 16, itc)
17192 DO 30 j = istart, istop
17193 IF( j.EQ.0) GOTO 30
17194 IF( setwhat.NE.0 )
17195 $ CALL blacs_set(context, setwhat, j)
17196
17197
17198
17199
17200 CALL cinitmat(
'G',
'-', m, n, mem(preaptr),
17201 $ lda, ipre, ipost,
17202 $ checkval, testnum,
17203 $ myrow, mycol )
17204
17205
17206
17207 IF( ldi .NE. -1 ) THEN
17208 DO 15 i = 1, n*ldi + ipre + ipost
17209 rmem(i) = icheckval
17210 cmem(i) = icheckval
17211 15 CONTINUE
17212 raptr = 1 + ipre
17213 captr = 1 + ipre
17214 ELSE
17215 DO 20 i = 1, ipre+ipost
17216 rmem(i) = icheckval
17217 cmem(i) = icheckval
17218 20 CONTINUE
17219 raptr = 1
17220 captr = 1
17221 END IF
17222
17223 CALL cgamx2d(context, scope, top, m, n,
17224 $ mem(aptr), lda, rmem(raptr),
17225 $ cmem(captr), ldi,
17226 $ rdest2, cdest2)
17227
17228
17229
17230
17231 IF( (myrow.EQ.rdest .AND. mycol.EQ.cdest)
17232 $ .OR. allrcv ) THEN
17234 $ mem(preaptr), lda, rdest,
17235 $ cdest, myrow, mycol,
17236 $ ipre, ipost, checkval,
17237 $ testnum, maxerr, nerr,
17238 $ mem(erriptr),mem(errdptr))
17239 CALL cchkamx(scope, context, m, n,
17240 $ mem(aptr), lda,
17241 $ rmem(raptr), cmem(captr),
17242 $ ldi, testnum, maxerr,nerr,
17243 $ mem(erriptr),mem(errdptr),
17244 $ iseed, mem(valptr))
17245 CALL crcchk(ipre, ipost, icheckval,
17246 $ m, n, rmem, cmem, ldi,
17247 $ myrow, mycol, testnum,
17248 $ maxerr, nerr,
17249 $ mem(erriptr), mem(errdptr))
17250 END IF
17251 30 CONTINUE
17252 CALL blacs_set(context, 16, 0)
17253 35 CONTINUE
17254 CALL blacs_set(context, 15, 0)
17255 40 CONTINUE
17256 testok = ( k .EQ. nerr )
17257 END IF
17258 END IF
17259
17260 IF( verb .GT. 1 ) THEN
17261 i = nerr
17263 $ mem(erriptr), mem(errdptr), iseed)
17264 IF( iam .EQ. 0 ) THEN
17265 IF( testok .AND. nerr.EQ.i ) THEN
17266 WRITE(outnum,6000)testnum,'PASSED ',
17267 $ scope, top, m, n, ldasrc,
17268 $ ldadst, ldi, rdest2, cdest2,
17269 $ nprow, npcol
17270 ELSE
17271 nfail = nfail + 1
17272 WRITE(outnum,6000)testnum,'FAILED ',
17273 $ scope, top, m, n, ldasrc,
17274 $ ldadst, ldi, rdest2, cdest2,
17275 $ nprow, npcol
17276 END IF
17277 END IF
17278
17279
17280
17281 nerr = 0
17282 END IF
17283 50 CONTINUE
17284 60 CONTINUE
17285 70 CONTINUE
17286 80 CONTINUE
17287 90 CONTINUE
17288
17289 IF( verb .LT. 2 ) THEN
17290 nfail = testnum
17291 CALL cbtcheckin( nfail, outnum, maxerr, nerr, mem(erriptr),
17292 $ mem(errdptr), iseed )
17293 END IF
17294 IF( iam .EQ. 0 ) THEN
17295 IF( verb .GT. 1 ) WRITE(outnum,*) ' '
17296 IF( nfail+nskip .EQ. 0 ) THEN
17297 WRITE(outnum, 7000 ) testnum
17298 ELSE
17299 WRITE(outnum, 8000 ) testnum, testnum-nskip-nfail,
17300 $ nskip, nfail
17301 END IF
17302 END IF
17303
17304
17305
17306 testok =
allpass( (nfail.EQ.0) )
17307
17308 1000 FORMAT('COMPLEX AMX TESTS: BEGIN.' )
17309 2000 FORMAT(1x,a7,3x,10i6)
17310 3000 FORMAT(1x,a7,3x,5x,a1,5x,a1,5x,a1,5x,a1,5x,a1,5x,a1,5x,a1,5x,a1,
17311 $ 5x,a1,5x,a1)
17312 4000 FORMAT(' TEST# STATUS SCOPE TOP M N LDAS LDAD LDI ',
17313 $ 'RDEST CDEST P Q')
17314 5000 FORMAT(' ----- ------- ----- --- ----- ----- ----- ----- ----- ',
17315 $ '----- ----- ---- ----')
17316 6000 FORMAT(i6,1x,a7,5x,a1,3x,a1,7i6,2i5)
17317 7000 FORMAT('COMPLEX AMX TESTS: PASSED ALL',
17318 $ i5, ' TESTS.')
17319 8000 FORMAT('COMPLEX AMX TESTS:',i5,' TESTS;',i5,' PASSED,',
17320 $ i5,' SKIPPED,',i5,' FAILED.')
17321
17322 RETURN
17323
17324
17325
subroutine crcchk(ipre, ipost, padval, m, n, ra, ca, ldi, myrow, mycol, testnum, maxerr, nerr, erribuf, errdbuf)
subroutine cchkpad(uplo, diag, m, n, mem, lda, rsrc, csrc, myrow, mycol, ipre, ipost, checkval, testnum, maxerr, nerr, erribuf, errdbuf)
logical function allpass(thistest)
subroutine cinitmat(uplo, diag, m, n, mem, lda, ipre, ipost, checkval, testnum, myrow, mycol)
subroutine cchkamx(scope, ictxt, m, n, a, lda, ra, ca, ldi, testnum, maxerr, nerr, erribuf, errdbuf, iseed, vals)
subroutine cbtcheckin(nftests, outnum, maxerr, nerr, ierr, cval, tfailed)
integer function ibtnprocs()
integer function ibtmyproc()
integer function ibtsizeof(type)