9872
9873
9874
9875
9876
9877
9878
9879 CHARACTER*1 UPLO, DIAG
9880 INTEGER M, N, LDA, RSRC, CSRC, MYROW, MYCOL, IPRE, IPOST
9881 INTEGER TESTNUM, MAXERR, NERR
9882 COMPLEX CHECKVAL
9883
9884
9885 INTEGER ERRIBUF(6, MAXERR)
9886 COMPLEX MEM(*), ERRDBUF(2, MAXERR)
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
9934
9935
9936
9937
9938
9939
9940
9941
9942
9943
9944
9945
9946
9947
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9965
9966
9967
9968
9969
9970
9971
9972
9973 INTEGER ERR_PRE, ERR_POST, ERR_GAP, ERR_TRI, ERR_MAT
9974 parameter( err_pre = 1, err_post = 2, err_gap = 3, err_tri = 4 )
9975 parameter( err_mat = 5 )
9976
9977
9978 INTEGER IBTNPROCS
9980
9981
9982 LOGICAL ISTRAP
9983 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
9984 INTEGER NPROCS
9985
9986
9987
9989 src = rsrc * nprocs + csrc
9990 dest = myrow * nprocs + mycol
9991
9992
9993
9994 IF( ipre .GT. 0 ) THEN
9995 DO 10 i = 1, ipre
9996 IF( mem(i) .NE. checkval ) THEN
9997 nerr = nerr + 1
9998 IF( nerr .LE. maxerr ) THEN
9999 erribuf(1, nerr) = testnum
10000 erribuf(2, nerr) = src
10001 erribuf(3, nerr) = dest
10002 erribuf(4, nerr) = i
10003 erribuf(5, nerr) = ipre - i + 1
10004 erribuf(6, nerr) = err_pre
10005 errdbuf(1, nerr) = mem(i)
10006 errdbuf(2, nerr) = checkval
10007 END IF
10008 END IF
10009 10 CONTINUE
10010 END IF
10011
10012
10013
10014 IF( ipost .GT. 0 ) THEN
10015 j = ipre + lda*n + 1
10016 DO 20 i = j, j+ipost-1
10017 IF( mem(i) .NE. checkval ) THEN
10018 nerr = nerr + 1
10019 IF( nerr .LE. maxerr ) THEN
10020 erribuf(1, nerr) = testnum
10021 erribuf(2, nerr) = src
10022 erribuf(3, nerr) = dest
10023 erribuf(4, nerr) = i - j + 1
10024 erribuf(5, nerr) = j
10025 erribuf(6, nerr) = err_post
10026 errdbuf(1, nerr) = mem(i)
10027 errdbuf(2, nerr) = checkval
10028 END IF
10029 END IF
10030 20 CONTINUE
10031 END IF
10032
10033
10034
10035 IF( lda .GT. m ) THEN
10036 DO 40 j = 1, n
10037 DO 30 i = m+1, lda
10038 k = ipre + (j-1)*lda + i
10039 IF( mem(k) .NE. checkval) THEN
10040 nerr = nerr + 1
10041 IF( nerr .LE. maxerr ) THEN
10042 erribuf(1, nerr) = testnum
10043 erribuf(2, nerr) = src
10044 erribuf(3, nerr) = dest
10045 erribuf(4, nerr) = i
10046 erribuf(5, nerr) = j
10047 erribuf(6, nerr) = err_gap
10048 errdbuf(1, nerr) = mem(k)
10049 errdbuf(2, nerr) = checkval
10050 END IF
10051 END IF
10052 30 CONTINUE
10053 40 CONTINUE
10054 END IF
10055
10056
10057
10058 istrap = .false.
10059 IF( uplo .EQ. 'U' ) THEN
10060 istrap = .true.
10061 IF( m .LE. n ) THEN
10062 irst = 2
10063 irnd = m
10064 icst = 1
10065 icnd = m - 1
10066 ELSEIF( m .GT. n ) THEN
10067 irst = ( m-n ) + 2
10068 irnd = m
10069 icst = 1
10070 icnd = n - 1
10071 ENDIF
10072 IF( diag .EQ. 'U' ) THEN
10073 irst = irst - 1
10074 icnd = icnd + 1
10075 ENDIF
10076 ELSE IF( uplo .EQ. 'L' ) THEN
10077 istrap = .true.
10078 IF( m .LE. n ) THEN
10079 irst = 1
10080 irnd = 1
10081 icst = ( n-m ) + 2
10082 icnd = n
10083 ELSEIF( m .GT. n ) THEN
10084 irst = 1
10085 irnd = 1
10086 icst = 2
10087 icnd = n
10088 ENDIF
10089 IF( diag .EQ. 'U' ) THEN
10090 icst = icst - 1
10091 ENDIF
10092 ENDIF
10093
10094
10095
10096 IF( istrap ) THEN
10097 DO 100 j = icst, icnd
10098 DO 105 i = irst, irnd
10099 IF( mem( ipre + (j-1)*lda + i ) .NE. checkval ) THEN
10100 nerr = nerr + 1
10101 IF( nerr .LE. maxerr ) THEN
10102 erribuf(1, nerr) = testnum
10103 erribuf(2, nerr) = src
10104 erribuf(3, nerr) = dest
10105 erribuf(4, nerr) = i
10106 erribuf(5, nerr) = j
10107 erribuf(6, nerr) = err_tri
10108 errdbuf(1, nerr) = mem( ipre + (j-1)*lda + i )
10109 errdbuf(2, nerr) = checkval
10110 END IF
10111 END IF
10112 105 CONTINUE
10113
10114
10115
10116 IF( uplo .EQ. 'U' ) THEN
10117 irst = irst + 1
10118 ELSE
10119 irnd = irnd + 1
10120 ENDIF
10121 100 CONTINUE
10122 END IF
10123
10124 RETURN
10125
10126
10127
integer function ibtnprocs()