8810
8811
8812
8813
8814
8815
8816
8817 CHARACTER*1 UPLO, DIAG
8818 INTEGER M, N, LDA, RSRC, CSRC, MYROW, MYCOL, IPRE, IPOST
8819 INTEGER TESTNUM, MAXERR, NERR
8820 DOUBLE PRECISION CHECKVAL
8821
8822
8823 INTEGER ERRIBUF(6, MAXERR)
8824 DOUBLE PRECISION MEM(*), ERRDBUF(2, MAXERR)
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911 INTEGER ERR_PRE, ERR_POST, ERR_GAP, ERR_TRI, ERR_MAT
8912 parameter( err_pre = 1, err_post = 2, err_gap = 3, err_tri = 4 )
8913 parameter( err_mat = 5 )
8914
8915
8916 INTEGER IBTNPROCS
8918
8919
8920 LOGICAL ISTRAP
8921 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
8922 INTEGER NPROCS
8923
8924
8925
8927 src = rsrc * nprocs + csrc
8928 dest = myrow * nprocs + mycol
8929
8930
8931
8932 IF( ipre .GT. 0 ) THEN
8933 DO 10 i = 1, ipre
8934 IF( mem(i) .NE. checkval ) THEN
8935 nerr = nerr + 1
8936 IF( nerr .LE. maxerr ) THEN
8937 erribuf(1, nerr) = testnum
8938 erribuf(2, nerr) = src
8939 erribuf(3, nerr) = dest
8940 erribuf(4, nerr) = i
8941 erribuf(5, nerr) = ipre - i + 1
8942 erribuf(6, nerr) = err_pre
8943 errdbuf(1, nerr) = mem(i)
8944 errdbuf(2, nerr) = checkval
8945 END IF
8946 END IF
8947 10 CONTINUE
8948 END IF
8949
8950
8951
8952 IF( ipost .GT. 0 ) THEN
8953 j = ipre + lda*n + 1
8954 DO 20 i = j, j+ipost-1
8955 IF( mem(i) .NE. checkval ) THEN
8956 nerr = nerr + 1
8957 IF( nerr .LE. maxerr ) THEN
8958 erribuf(1, nerr) = testnum
8959 erribuf(2, nerr) = src
8960 erribuf(3, nerr) = dest
8961 erribuf(4, nerr) = i - j + 1
8962 erribuf(5, nerr) = j
8963 erribuf(6, nerr) = err_post
8964 errdbuf(1, nerr) = mem(i)
8965 errdbuf(2, nerr) = checkval
8966 END IF
8967 END IF
8968 20 CONTINUE
8969 END IF
8970
8971
8972
8973 IF( lda .GT. m ) THEN
8974 DO 40 j = 1, n
8975 DO 30 i = m+1, lda
8976 k = ipre + (j-1)*lda + i
8977 IF( mem(k) .NE. checkval) THEN
8978 nerr = nerr + 1
8979 IF( nerr .LE. maxerr ) THEN
8980 erribuf(1, nerr) = testnum
8981 erribuf(2, nerr) = src
8982 erribuf(3, nerr) = dest
8983 erribuf(4, nerr) = i
8984 erribuf(5, nerr) = j
8985 erribuf(6, nerr) = err_gap
8986 errdbuf(1, nerr) = mem(k)
8987 errdbuf(2, nerr) = checkval
8988 END IF
8989 END IF
8990 30 CONTINUE
8991 40 CONTINUE
8992 END IF
8993
8994
8995
8996 istrap = .false.
8997 IF( uplo .EQ. 'U' ) THEN
8998 istrap = .true.
8999 IF( m .LE. n ) THEN
9000 irst = 2
9001 irnd = m
9002 icst = 1
9003 icnd = m - 1
9004 ELSEIF( m .GT. n ) THEN
9005 irst = ( m-n ) + 2
9006 irnd = m
9007 icst = 1
9008 icnd = n - 1
9009 ENDIF
9010 IF( diag .EQ. 'U' ) THEN
9011 irst = irst - 1
9012 icnd = icnd + 1
9013 ENDIF
9014 ELSE IF( uplo .EQ. 'L' ) THEN
9015 istrap = .true.
9016 IF( m .LE. n ) THEN
9017 irst = 1
9018 irnd = 1
9019 icst = ( n-m ) + 2
9020 icnd = n
9021 ELSEIF( m .GT. n ) THEN
9022 irst = 1
9023 irnd = 1
9024 icst = 2
9025 icnd = n
9026 ENDIF
9027 IF( diag .EQ. 'U' ) THEN
9028 icst = icst - 1
9029 ENDIF
9030 ENDIF
9031
9032
9033
9034 IF( istrap ) THEN
9035 DO 100 j = icst, icnd
9036 DO 105 i = irst, irnd
9037 IF( mem( ipre + (j-1)*lda + i ) .NE. checkval ) THEN
9038 nerr = nerr + 1
9039 IF( nerr .LE. maxerr ) THEN
9040 erribuf(1, nerr) = testnum
9041 erribuf(2, nerr) = src
9042 erribuf(3, nerr) = dest
9043 erribuf(4, nerr) = i
9044 erribuf(5, nerr) = j
9045 erribuf(6, nerr) = err_tri
9046 errdbuf(1, nerr) = mem( ipre + (j-1)*lda + i )
9047 errdbuf(2, nerr) = checkval
9048 END IF
9049 END IF
9050 105 CONTINUE
9051
9052
9053
9054 IF( uplo .EQ. 'U' ) THEN
9055 irst = irst + 1
9056 ELSE
9057 irnd = irnd + 1
9058 ENDIF
9059 100 CONTINUE
9060 END IF
9061
9062 RETURN
9063
9064
9065
integer function ibtnprocs()