6682
6683
6684
6685
6686
6687
6688
6689 CHARACTER*1 UPLO, DIAG
6690 INTEGER M, N, LDA, RSRC, CSRC, MYROW, MYCOL, IPRE, IPOST
6691 INTEGER TESTNUM, MAXERR, NERR
6692 INTEGER CHECKVAL
6693
6694
6695 INTEGER ERRIBUF(6, MAXERR)
6696 INTEGER MEM(*), ERRDBUF(2, MAXERR)
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783 INTEGER ERR_PRE, ERR_POST, ERR_GAP, ERR_TRI, ERR_MAT
6784 parameter( err_pre = 1, err_post = 2, err_gap = 3, err_tri = 4 )
6785 parameter( err_mat = 5 )
6786
6787
6788 INTEGER IBTNPROCS
6790
6791
6792 LOGICAL ISTRAP
6793 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
6794 INTEGER NPROCS
6795
6796
6797
6799 src = rsrc * nprocs + csrc
6800 dest = myrow * nprocs + mycol
6801
6802
6803
6804 IF( ipre .GT. 0 ) THEN
6805 DO 10 i = 1, ipre
6806 IF( mem(i) .NE. checkval ) THEN
6807 nerr = nerr + 1
6808 IF( nerr .LE. maxerr ) THEN
6809 erribuf(1, nerr) = testnum
6810 erribuf(2, nerr) = src
6811 erribuf(3, nerr) = dest
6812 erribuf(4, nerr) = i
6813 erribuf(5, nerr) = ipre - i + 1
6814 erribuf(6, nerr) = err_pre
6815 errdbuf(1, nerr) = mem(i)
6816 errdbuf(2, nerr) = checkval
6817 END IF
6818 END IF
6819 10 CONTINUE
6820 END IF
6821
6822
6823
6824 IF( ipost .GT. 0 ) THEN
6825 j = ipre + lda*n + 1
6826 DO 20 i = j, j+ipost-1
6827 IF( mem(i) .NE. checkval ) THEN
6828 nerr = nerr + 1
6829 IF( nerr .LE. maxerr ) THEN
6830 erribuf(1, nerr) = testnum
6831 erribuf(2, nerr) = src
6832 erribuf(3, nerr) = dest
6833 erribuf(4, nerr) = i - j + 1
6834 erribuf(5, nerr) = j
6835 erribuf(6, nerr) = err_post
6836 errdbuf(1, nerr) = mem(i)
6837 errdbuf(2, nerr) = checkval
6838 END IF
6839 END IF
6840 20 CONTINUE
6841 END IF
6842
6843
6844
6845 IF( lda .GT. m ) THEN
6846 DO 40 j = 1, n
6847 DO 30 i = m+1, lda
6848 k = ipre + (j-1)*lda + i
6849 IF( mem(k) .NE. checkval) THEN
6850 nerr = nerr + 1
6851 IF( nerr .LE. maxerr ) THEN
6852 erribuf(1, nerr) = testnum
6853 erribuf(2, nerr) = src
6854 erribuf(3, nerr) = dest
6855 erribuf(4, nerr) = i
6856 erribuf(5, nerr) = j
6857 erribuf(6, nerr) = err_gap
6858 errdbuf(1, nerr) = mem(k)
6859 errdbuf(2, nerr) = checkval
6860 END IF
6861 END IF
6862 30 CONTINUE
6863 40 CONTINUE
6864 END IF
6865
6866
6867
6868 istrap = .false.
6869 IF( uplo .EQ. 'U' ) THEN
6870 istrap = .true.
6871 IF( m .LE. n ) THEN
6872 irst = 2
6873 irnd = m
6874 icst = 1
6875 icnd = m - 1
6876 ELSEIF( m .GT. n ) THEN
6877 irst = ( m-n ) + 2
6878 irnd = m
6879 icst = 1
6880 icnd = n - 1
6881 ENDIF
6882 IF( diag .EQ. 'U' ) THEN
6883 irst = irst - 1
6884 icnd = icnd + 1
6885 ENDIF
6886 ELSE IF( uplo .EQ. 'L' ) THEN
6887 istrap = .true.
6888 IF( m .LE. n ) THEN
6889 irst = 1
6890 irnd = 1
6891 icst = ( n-m ) + 2
6892 icnd = n
6893 ELSEIF( m .GT. n ) THEN
6894 irst = 1
6895 irnd = 1
6896 icst = 2
6897 icnd = n
6898 ENDIF
6899 IF( diag .EQ. 'U' ) THEN
6900 icst = icst - 1
6901 ENDIF
6902 ENDIF
6903
6904
6905
6906 IF( istrap ) THEN
6907 DO 100 j = icst, icnd
6908 DO 105 i = irst, irnd
6909 IF( mem( ipre + (j-1)*lda + i ) .NE. checkval ) THEN
6910 nerr = nerr + 1
6911 IF( nerr .LE. maxerr ) THEN
6912 erribuf(1, nerr) = testnum
6913 erribuf(2, nerr) = src
6914 erribuf(3, nerr) = dest
6915 erribuf(4, nerr) = i
6916 erribuf(5, nerr) = j
6917 erribuf(6, nerr) = err_tri
6918 errdbuf(1, nerr) = mem( ipre + (j-1)*lda + i )
6919 errdbuf(2, nerr) = checkval
6920 END IF
6921 END IF
6922 105 CONTINUE
6923
6924
6925
6926 IF( uplo .EQ. 'U' ) THEN
6927 irst = irst + 1
6928 ELSE
6929 irnd = irnd + 1
6930 ENDIF
6931 100 CONTINUE
6932 END IF
6933
6934 RETURN
6935
6936
6937
integer function ibtnprocs()