7746
7747
7748
7749
7750
7751
7752
7753 CHARACTER*1 UPLO, DIAG
7754 INTEGER M, N, LDA, RSRC, CSRC, MYROW, MYCOL, IPRE, IPOST
7755 INTEGER TESTNUM, MAXERR, NERR
7756 REAL CHECKVAL
7757
7758
7759 INTEGER ERRIBUF(6, MAXERR)
7760 REAL MEM(*), ERRDBUF(2, MAXERR)
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847 INTEGER ERR_PRE, ERR_POST, ERR_GAP, ERR_TRI, ERR_MAT
7848 parameter( err_pre = 1, err_post = 2, err_gap = 3, err_tri = 4 )
7849 parameter( err_mat = 5 )
7850
7851
7852 INTEGER IBTNPROCS
7854
7855
7856 LOGICAL ISTRAP
7857 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
7858 INTEGER NPROCS
7859
7860
7861
7863 src = rsrc * nprocs + csrc
7864 dest = myrow * nprocs + mycol
7865
7866
7867
7868 IF( ipre .GT. 0 ) THEN
7869 DO 10 i = 1, ipre
7870 IF( mem(i) .NE. checkval ) THEN
7871 nerr = nerr + 1
7872 IF( nerr .LE. maxerr ) THEN
7873 erribuf(1, nerr) = testnum
7874 erribuf(2, nerr) = src
7875 erribuf(3, nerr) = dest
7876 erribuf(4, nerr) = i
7877 erribuf(5, nerr) = ipre - i + 1
7878 erribuf(6, nerr) = err_pre
7879 errdbuf(1, nerr) = mem(i)
7880 errdbuf(2, nerr) = checkval
7881 END IF
7882 END IF
7883 10 CONTINUE
7884 END IF
7885
7886
7887
7888 IF( ipost .GT. 0 ) THEN
7889 j = ipre + lda*n + 1
7890 DO 20 i = j, j+ipost-1
7891 IF( mem(i) .NE. checkval ) THEN
7892 nerr = nerr + 1
7893 IF( nerr .LE. maxerr ) THEN
7894 erribuf(1, nerr) = testnum
7895 erribuf(2, nerr) = src
7896 erribuf(3, nerr) = dest
7897 erribuf(4, nerr) = i - j + 1
7898 erribuf(5, nerr) = j
7899 erribuf(6, nerr) = err_post
7900 errdbuf(1, nerr) = mem(i)
7901 errdbuf(2, nerr) = checkval
7902 END IF
7903 END IF
7904 20 CONTINUE
7905 END IF
7906
7907
7908
7909 IF( lda .GT. m ) THEN
7910 DO 40 j = 1, n
7911 DO 30 i = m+1, lda
7912 k = ipre + (j-1)*lda + i
7913 IF( mem(k) .NE. checkval) THEN
7914 nerr = nerr + 1
7915 IF( nerr .LE. maxerr ) THEN
7916 erribuf(1, nerr) = testnum
7917 erribuf(2, nerr) = src
7918 erribuf(3, nerr) = dest
7919 erribuf(4, nerr) = i
7920 erribuf(5, nerr) = j
7921 erribuf(6, nerr) = err_gap
7922 errdbuf(1, nerr) = mem(k)
7923 errdbuf(2, nerr) = checkval
7924 END IF
7925 END IF
7926 30 CONTINUE
7927 40 CONTINUE
7928 END IF
7929
7930
7931
7932 istrap = .false.
7933 IF( uplo .EQ. 'U' ) THEN
7934 istrap = .true.
7935 IF( m .LE. n ) THEN
7936 irst = 2
7937 irnd = m
7938 icst = 1
7939 icnd = m - 1
7940 ELSEIF( m .GT. n ) THEN
7941 irst = ( m-n ) + 2
7942 irnd = m
7943 icst = 1
7944 icnd = n - 1
7945 ENDIF
7946 IF( diag .EQ. 'U' ) THEN
7947 irst = irst - 1
7948 icnd = icnd + 1
7949 ENDIF
7950 ELSE IF( uplo .EQ. 'L' ) THEN
7951 istrap = .true.
7952 IF( m .LE. n ) THEN
7953 irst = 1
7954 irnd = 1
7955 icst = ( n-m ) + 2
7956 icnd = n
7957 ELSEIF( m .GT. n ) THEN
7958 irst = 1
7959 irnd = 1
7960 icst = 2
7961 icnd = n
7962 ENDIF
7963 IF( diag .EQ. 'U' ) THEN
7964 icst = icst - 1
7965 ENDIF
7966 ENDIF
7967
7968
7969
7970 IF( istrap ) THEN
7971 DO 100 j = icst, icnd
7972 DO 105 i = irst, irnd
7973 IF( mem( ipre + (j-1)*lda + i ) .NE. checkval ) THEN
7974 nerr = nerr + 1
7975 IF( nerr .LE. maxerr ) THEN
7976 erribuf(1, nerr) = testnum
7977 erribuf(2, nerr) = src
7978 erribuf(3, nerr) = dest
7979 erribuf(4, nerr) = i
7980 erribuf(5, nerr) = j
7981 erribuf(6, nerr) = err_tri
7982 errdbuf(1, nerr) = mem( ipre + (j-1)*lda + i )
7983 errdbuf(2, nerr) = checkval
7984 END IF
7985 END IF
7986 105 CONTINUE
7987
7988
7989
7990 IF( uplo .EQ. 'U' ) THEN
7991 irst = irst + 1
7992 ELSE
7993 irnd = irnd + 1
7994 ENDIF
7995 100 CONTINUE
7996 END IF
7997
7998 RETURN
7999
8000
8001
integer function ibtnprocs()