SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ schkpad()

subroutine schkpad ( character*1  uplo,
character*1  diag,
integer  m,
integer  n,
real, dimension(*)  mem,
integer  lda,
integer  rsrc,
integer  csrc,
integer  myrow,
integer  mycol,
integer  ipre,
integer  ipost,
real  checkval,
integer  testnum,
integer  maxerr,
integer  nerr,
integer, dimension(6, maxerr)  erribuf,
real, dimension(2, maxerr)  errdbuf 
)

Definition at line 7743 of file blacstest.f.

7746*
7747* -- BLACS tester (version 1.0) --
7748* University of Tennessee
7749* December 15, 1994
7750*
7751*
7752* .. Scalar Arguments ..
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* .. Array Arguments ..
7759 INTEGER ERRIBUF(6, MAXERR)
7760 REAL MEM(*), ERRDBUF(2, MAXERR)
7761* ..
7762*
7763* Purpose
7764* =======
7765* SCHKPAD: Check padding put in by PADMAT.
7766* Checks that padding around target matrix has not been overwritten
7767* by the previous point-to-point or broadcast send.
7768*
7769* Arguments
7770* =========
7771* UPLO (input) CHARACTER*1
7772* Is the matrix A 'U'pper or 'L'ower trapezoidal, or 'G'eneral
7773* rectangular?
7774*
7775* DIAG (input) CHARACTER*1
7776* For trapezoidal matrices, is the main diagonal included
7777* ('N') or not ('U')?
7778*
7779* M (input) INTEGER
7780* The number of rows of the matrix A. M >= 0.
7781*
7782* N (input) INTEGER
7783* The number of columns of the matrix A. N >= 0.
7784*
7785* MEM (input) real array, dimension(IPRE+IPOST+LDA*N).
7786* Memory location IPRE elements in front of the matrix A.
7787*
7788* LDA (input) INTEGER
7789* The leading dimension of the array A. LDA >= max(1, M).
7790*
7791* RSRC (input) INTEGER
7792* The process row of the source of the matrix.
7793*
7794* CSRC (input) INTEGER
7795* The process column of the source of the matrix.
7796*
7797* MYROW (input) INTEGER
7798* Row of this process in the process grid.
7799*
7800* MYCOL (input) INTEGER
7801* Column of this process in the process grid.
7802*
7803* IPRE (input) INTEGER
7804* The size of the guard zone before the start of A.
7805*
7806* IPOST (input) INTEGER
7807* The size of guard zone after A.
7808*
7809* CHECKVAL (input) real
7810* The value to pad matrix with.
7811*
7812* TESTNUM (input) INTEGER
7813* The number of the test being checked.
7814*
7815* MAXERR (input) INTEGER
7816* Max number of errors that can be stored in ERRIBUFF or
7817* ERRSBUFF
7818*
7819* NERR (output) INTEGER
7820* The number of errors that have been found.
7821*
7822* ERRIBUF (output) INTEGER array, dimension (6,MAXERRS)
7823* Buffer in which to store integer error information. It will
7824* be built up in the following format for the call to TSEND.
7825* All integer information is recorded in the following 6-tuple
7826* {TESTNUM, SRC, DEST, I, J, WHAT}. These values are figured:
7827* SRC = RSRC * NPROCS + CSRC
7828* DEST = RDEST * NPROCS + CDEST
7829* WHAT
7830* = 1 : Error in pre-padding
7831* = 2 : Error in post-padding
7832* = 3 : Error in LDA-M gap
7833* = 4 : Error in complementory triangle
7834* ELSE: Error in matrix
7835* If there are more errors than can fit in the error buffer,
7836* the error number will indicate the actual number of errors
7837* found, but the buffer will be truncated to the maximum
7838* number of errors which can fit.
7839*
7840* ERRDBUF (output) @(doctype) array, dimension (2, MAXERRS)
7841* Buffer in which to store error data information.
7842* {Incorrect, Predicted}
7843*
7844* ===================================================================
7845*
7846* .. Parameters ..
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* .. External Functions ..
7852 INTEGER IBTNPROCS
7853 EXTERNAL ibtnprocs
7854* ..
7855* .. Local Scalars ..
7856 LOGICAL ISTRAP
7857 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
7858 INTEGER NPROCS
7859* ..
7860* .. Executable Statements ..
7861*
7862 nprocs = ibtnprocs()
7863 src = rsrc * nprocs + csrc
7864 dest = myrow * nprocs + mycol
7865*
7866* Check buffer in front of A
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* Check buffer behind A
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* Check all (LDA-M) gaps
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* Determine limits of trapezoidal matrix
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* Check elements and report any errors
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* Update the limits to allow filling in padding
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* End of SCHKPAD.
8001*
integer function ibtnprocs()
Definition btprim.f:81
Here is the caller graph for this function: