blacs-mpi (1.1-31) TESTING/btprim_NX.f

Summary

 TESTING/btprim_NX.f |  319 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 319 insertions(+)

    
download this patch

Patch contents

--- blacs-mpi-1.1.orig/TESTING/btprim_NX.f
+++ blacs-mpi-1.1/TESTING/btprim_NX.f
@@ -0,0 +1,319 @@
+      SUBROUTINE BTSETUP( MEM, MEMLEN, CMEM, CMEMLEN, OUTNUM,
+     $                    TESTSDRV, TESTBSBR, TESTCOMB, TESTAUX,
+     $                    IAM, NNODES )
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*     .. Scalar Arguments ..
+      LOGICAL TESTSDRV, TESTBSBR, TESTCOMB, TESTAUX
+      INTEGER MEMLEN, CMEMLEN, OUTNUM, IAM, NNODES
+*     ..
+*     .. Array Arguments ..
+      INTEGER MEM(MEMLEN)
+      CHARACTER*1 CMEM(CMEMLEN)
+*     ..
+*
+*  Purpose
+*  =======
+*  BTSETUP:  Does nothing on non-PVM platforms
+*
+*  ====================================================================
+*     .. Executable Statements ..
+      RETURN
+      END
+*
+      INTEGER FUNCTION IBTMYPROC()
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*  Purpose
+*  =======
+*  IBTMYPROC: returns a process number between 0 .. NPROCS-1.  On
+*  systems not natively in this numbering scheme, translates to it.
+*
+*  ====================================================================
+*
+*     .. External Functions ..
+      INTEGER  MYNODE
+      EXTERNAL MYNODE
+*     ..
+*     .. Executable Statements ..
+*
+      IBTMYPROC = MYNODE()
+      RETURN
+*
+*     End of IBTMYPROC
+*
+      END
+*
+      INTEGER FUNCTION IBTNPROCS()
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*  Purpose
+*  =======
+*  IBTNPROCS: returns the number of processes in the machine.
+*
+*  ====================================================================
+*     .. External Functions ..
+      INTEGER  NUMNODES
+      EXTERNAL NUMNODES
+*     ..
+*     .. Executable Statements ..
+*
+      IBTNPROCS = NUMNODES()
+*
+      RETURN
+*
+*     End of IBTNPROCS
+*
+      END
+*
+      SUBROUTINE BTSEND(DTYPE, N, BUFF, DEST, MSGID)
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*     .. Scalar Arguments ..
+      INTEGER N, DTYPE, DEST, MSGID
+*     ..
+*     .. Array Arguments ..
+      REAL BUFF(*)
+*     ..
+*
+*     PURPOSE
+*     =======
+*     BTSEND: Communication primitive used to send messages independent
+*     of the BLACS.  May safely be either locally or globally blocking.
+*
+*     Arguments
+*     =========
+*     DTYPE    (input) INTEGER
+*              Indicates what data type BUFF is (same as PVM):
+*                1  =  RAW BYTES
+*                3  =  INTEGER
+*                4  =  SINGLE PRECISION REAL
+*                6  =  DOUBLE PRECISION REAL
+*                5  =  SINGLE PRECISION COMPLEX
+*                7  =  DOUBLE PRECISION COMPLEX
+*
+*     N        (input) INTEGER
+*              The number of elements of type DTYPE in BUFF.
+*
+*     BUFF     (input) accepted as INTEGER array
+*              The array to be communicated.  Its true data type is
+*              indicated by DTYPE.
+*
+*     DEST      (input) INTEGER
+*               The destination of the message.
+*
+*     MSGID     (input) INTEGER
+*               The message ID (AKA message tag or type).
+*
+* =====================================================================
+*     .. External Functions ..
+      INTEGER  IBTSIZEOF
+      EXTERNAL IBTSIZEOF
+*     ..
+*     .. Local Scalars ..
+      INTEGER LENGTH
+      INTEGER ISIZE, SSIZE, DSIZE, CSIZE, ZSIZE
+*     ..
+*     .. Save statement ..
+      SAVE  ISIZE, SSIZE, DSIZE, CSIZE, ZSIZE
+*     ..
+*     .. Data statements ..
+      DATA  ISIZE /-50/
+*     ..
+*     .. Executable Statements ..
+*
+*     On first call, initialize size variables
+*
+      IF( ISIZE .LT. 0 ) THEN
+         ISIZE = IBTSIZEOF('I')
+         SSIZE = IBTSIZEOF('S')
+         DSIZE = IBTSIZEOF('D')
+         CSIZE = IBTSIZEOF('C')
+         ZSIZE = IBTSIZEOF('Z')
+      END IF
+*
+*     Figure length of buffer
+*
+      IF( DTYPE .EQ. 1 ) THEN
+         LENGTH = N
+      ELSE IF( DTYPE .EQ. 3 ) THEN
+         LENGTH = N * ISIZE
+      ELSE IF( DTYPE .EQ. 4 ) THEN
+         LENGTH = N * SSIZE
+      ELSE IF( DTYPE .EQ. 5 ) THEN
+         LENGTH = N * CSIZE
+      ELSE IF( DTYPE .EQ. 6 ) THEN
+         LENGTH = N * DSIZE
+      ELSE IF( DTYPE .EQ. 7 ) THEN
+         LENGTH = N * ZSIZE
+      END IF
+*
+*     Send the message
+*
+      CALL CSEND(MSGID, BUFF, LENGTH, DEST, 0)
+*
+      RETURN
+*
+*     End BTSEND
+*
+      END
+*
+      SUBROUTINE BTRECV(DTYPE, N, BUFF, SRC, MSGID)
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*
+*     .. Scalar Arguments ..
+      INTEGER N, DTYPE, SRC, MSGID
+*     ..
+*     .. Array Arguments ..
+      REAL BUFF(*)
+*     ..
+*
+*     PURPOSE
+*     =======
+*     BTRECV: Globally blocking receive.
+*
+*     Arguments
+*     =========
+*     DTYPE    (input) INTEGER
+*              Indicates what data type BUFF is:
+*                1  =  RAW BYTES
+*                3  =  INTEGER
+*                4  =  SINGLE PRECISION REAL
+*                6  =  DOUBLE PRECISION REAL
+*                5  =  SINGLE PRECISION COMPLEX
+*                7  =  DOUBLE PRECISION COMPLEX
+*
+*     N        (input) INTEGER
+*              The number of elements of type DTYPE in BUFF.
+*
+*     BUFF     (output) INTEGER
+*              The buffer to receive into.
+*
+*     SRC      (input) INTEGER
+*              The source of the message.
+*
+*     MSGID    (input) INTEGER
+*              The message ID.
+*
+* =====================================================================
+*
+*     .. External Functions ..
+      INTEGER  IBTSIZEOF
+      EXTERNAL IBTSIZEOF
+*     ..
+*     .. Local Scalars ..
+      INTEGER LENGTH
+      INTEGER ISIZE, SSIZE, DSIZE, CSIZE, ZSIZE
+*     ..
+*     .. Save statement ..
+      SAVE  ISIZE, SSIZE, DSIZE, CSIZE, ZSIZE
+*     ..
+*     .. Data statements ..
+      DATA  ISIZE /-50/
+*     ..
+*     .. Executable Statements ..
+*
+*     On first call, initialize size variables
+*
+      IF( ISIZE .LT. 0 ) THEN
+         ISIZE = IBTSIZEOF('I')
+         SSIZE = IBTSIZEOF('S')
+         DSIZE = IBTSIZEOF('D')
+         CSIZE = IBTSIZEOF('C')
+         ZSIZE = IBTSIZEOF('Z')
+      END IF
+*
+*     Figure length of buffer
+*
+      IF( DTYPE .EQ. 1 ) THEN
+         LENGTH = N
+      ELSE IF( DTYPE .EQ. 3 ) THEN
+         LENGTH = N * ISIZE
+      ELSE IF( DTYPE .EQ. 4 ) THEN
+         LENGTH = N * SSIZE
+      ELSE IF( DTYPE .EQ. 5 ) THEN
+         LENGTH = N * CSIZE
+      ELSE IF( DTYPE .EQ. 6 ) THEN
+         LENGTH = N * DSIZE
+      ELSE IF( DTYPE .EQ. 7 ) THEN
+         LENGTH = N * ZSIZE
+      END IF
+*
+*     Receive the message
+*
+      CALL CRECV(MSGID, BUFF, LENGTH)
+*
+      RETURN
+*
+*     End of BTRECV
+*
+      END
+*
+      INTEGER FUNCTION IBTSIZEOF(TYPE)
+*
+*  -- BLACS tester (version 1.0) --
+*  University of Tennessee
+*  December 15, 1994
+*
+*     .. Scalar Arguments ..
+      CHARACTER*1 TYPE
+*     ..
+*
+*  Purpose
+*  =======
+*  IBTSIZEOF: Returns the size, in bytes, of the 5 data types.
+*  If your platform has a different size for DOUBLE PRECISION, you must
+*  change the parameter statement in BLACSTEST as well.
+*
+*  Arguments
+*  =========
+*  TYPE     (input) CHARACTER*1
+*           The data type who's size is to be determined:
+*           'I' : INTEGER
+*           'S' : SINGLE PRECISION REAL
+*           'D' : DOUBLE PRECISION REAL
+*           'C' : SINGLE PRECISION COMPLEX
+*           'Z' : DOUBLE PRECISION COMPLEX
+*
+* =====================================================================
+*
+*     .. External Functions ..
+      LOGICAL  LSAME
+      EXTERNAL LSAME
+*     ..
+*     .. Local Scalars ..
+      INTEGER LENGTH
+*     ..
+*     .. Executable Statements ..
+*
+      IF( LSAME(TYPE, 'I') ) THEN
+         LENGTH = 4
+      ELSE IF( LSAME(TYPE, 'S') ) THEN
+         LENGTH = 4
+      ELSE IF( LSAME(TYPE, 'D') ) THEN
+         LENGTH = 8
+      ELSE IF( LSAME(TYPE, 'C') ) THEN
+         LENGTH = 8
+      ELSE IF( LSAME(TYPE, 'Z') ) THEN
+         LENGTH = 16
+      END IF
+      IBTSIZEOF = LENGTH
+*
+      RETURN
+      END