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

◆ dchkpad()

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

Definition at line 8807 of file blacstest.f.

8810*
8811* -- BLACS tester (version 1.0) --
8812* University of Tennessee
8813* December 15, 1994
8814*
8815*
8816* .. Scalar Arguments ..
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* .. Array Arguments ..
8823 INTEGER ERRIBUF(6, MAXERR)
8824 DOUBLE PRECISION MEM(*), ERRDBUF(2, MAXERR)
8825* ..
8826*
8827* Purpose
8828* =======
8829* DCHKPAD: Check padding put in by PADMAT.
8830* Checks that padding around target matrix has not been overwritten
8831* by the previous point-to-point or broadcast send.
8832*
8833* Arguments
8834* =========
8835* UPLO (input) CHARACTER*1
8836* Is the matrix A 'U'pper or 'L'ower trapezoidal, or 'G'eneral
8837* rectangular?
8838*
8839* DIAG (input) CHARACTER*1
8840* For trapezoidal matrices, is the main diagonal included
8841* ('N') or not ('U')?
8842*
8843* M (input) INTEGER
8844* The number of rows of the matrix A. M >= 0.
8845*
8846* N (input) INTEGER
8847* The number of columns of the matrix A. N >= 0.
8848*
8849* MEM (input) double precision array, dimension(IPRE+IPOST+LDA*N).
8850* Memory location IPRE elements in front of the matrix A.
8851*
8852* LDA (input) INTEGER
8853* The leading dimension of the array A. LDA >= max(1, M).
8854*
8855* RSRC (input) INTEGER
8856* The process row of the source of the matrix.
8857*
8858* CSRC (input) INTEGER
8859* The process column of the source of the matrix.
8860*
8861* MYROW (input) INTEGER
8862* Row of this process in the process grid.
8863*
8864* MYCOL (input) INTEGER
8865* Column of this process in the process grid.
8866*
8867* IPRE (input) INTEGER
8868* The size of the guard zone before the start of A.
8869*
8870* IPOST (input) INTEGER
8871* The size of guard zone after A.
8872*
8873* CHECKVAL (input) double precision
8874* The value to pad matrix with.
8875*
8876* TESTNUM (input) INTEGER
8877* The number of the test being checked.
8878*
8879* MAXERR (input) INTEGER
8880* Max number of errors that can be stored in ERRIBUFF or
8881* ERRDBUFF
8882*
8883* NERR (output) INTEGER
8884* The number of errors that have been found.
8885*
8886* ERRIBUF (output) INTEGER array, dimension (6,MAXERRS)
8887* Buffer in which to store integer error information. It will
8888* be built up in the following format for the call to TSEND.
8889* All integer information is recorded in the following 6-tuple
8890* {TESTNUM, SRC, DEST, I, J, WHAT}. These values are figured:
8891* SRC = RSRC * NPROCS + CSRC
8892* DEST = RDEST * NPROCS + CDEST
8893* WHAT
8894* = 1 : Error in pre-padding
8895* = 2 : Error in post-padding
8896* = 3 : Error in LDA-M gap
8897* = 4 : Error in complementory triangle
8898* ELSE: Error in matrix
8899* If there are more errors than can fit in the error buffer,
8900* the error number will indicate the actual number of errors
8901* found, but the buffer will be truncated to the maximum
8902* number of errors which can fit.
8903*
8904* ERRDBUF (output) @(doctype) array, dimension (2, MAXERRS)
8905* Buffer in which to store error data information.
8906* {Incorrect, Predicted}
8907*
8908* ===================================================================
8909*
8910* .. Parameters ..
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* .. External Functions ..
8916 INTEGER IBTNPROCS
8917 EXTERNAL ibtnprocs
8918* ..
8919* .. Local Scalars ..
8920 LOGICAL ISTRAP
8921 INTEGER I, J, K, IRST, IRND, ICST, ICND, SRC, DEST
8922 INTEGER NPROCS
8923* ..
8924* .. Executable Statements ..
8925*
8926 nprocs = ibtnprocs()
8927 src = rsrc * nprocs + csrc
8928 dest = myrow * nprocs + mycol
8929*
8930* Check buffer in front of A
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* Check buffer behind A
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* Check all (LDA-M) gaps
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* Determine limits of trapezoidal matrix
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* Check elements and report any errors
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* Update the limits to allow filling in padding
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* End of DCHKPAD.
9065*
integer function ibtnprocs()
Definition btprim.f:81
Here is the caller graph for this function: