From 06fdcff8388130128cd77425be4fe055b9fa8549 Mon Sep 17 00:00:00 2001 From: schnetter Date: Mon, 5 Apr 2004 12:06:48 +0000 Subject: Correct the MPI replacement routines. Compiles, but untested. git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/Slab/trunk@28 2e825fa2-fb71-486d-8b7f-a5ff3f0f6cb8 --- src/slab.c | 59 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/src/slab.c b/src/slab.c index 17d0b74..b461b82 100644 --- a/src/slab.c +++ b/src/slab.c @@ -172,19 +172,25 @@ static MPI_Datatype MPI_COMPLEX32; #ifndef CCTK_MPI typedef int MPI_Comm; -typedef int MPI_Datatype; - -#define MPI_BYTE CCTK_VARIABLE_BYTE -#define MPI_INT1 CCTK_VARIABLE_INT1 -#define MPI_INT2 CCTK_VARIABLE_INT2 -#define MPI_INT4 CCTK_VARIABLE_INT4 -#define MPI_INT8 CCTK_VARIABLE_INT8 -#define MPI_REAL4 CCTK_VARIABLE_REAL4 -#define MPI_REAL8 CCTK_VARIABLE_REAL8 -#define MPI_REAL16 CCTK_VARIABLE_REAL16 -#define MPI_COMPLEX8 CCTK_VARIABLE_COMPLEX8 -#define MPI_COMPLEX16 CCTK_VARIABLE_COMPLEX16 -#define MPI_COMPLEX32 CCTK_VARIABLE_COMPLEX32 + +typedef enum { + MPI_BYTE = CCTK_VARIABLE_BYTE, + MPI_INT = CCTK_VARIABLE_INT, + MPI_INT1 = CCTK_VARIABLE_INT1, + MPI_INT2 = CCTK_VARIABLE_INT2, + MPI_INT4 = CCTK_VARIABLE_INT4, + MPI_INT8 = CCTK_VARIABLE_INT8, + MPI_REAL = CCTK_VARIABLE_REAL, + MPI_REAL4 = CCTK_VARIABLE_REAL4, + MPI_REAL8 = CCTK_VARIABLE_REAL8, + MPI_REAL16 = CCTK_VARIABLE_REAL16, + MPI_COMPLEX = CCTK_VARIABLE_COMPLEX, + MPI_COMPLEX8 = CCTK_VARIABLE_COMPLEX8, + MPI_COMPLEX16 = CCTK_VARIABLE_COMPLEX16, + MPI_COMPLEX32 = CCTK_VARIABLE_COMPLEX32 +} MPI_Datatype; + +typedef enum { MPI_MIN, MPI_MAX } MPI_Op; static int MPI_Barrier (MPI_Comm comm) @@ -193,14 +199,14 @@ MPI_Barrier (MPI_Comm comm) } static int -MPI_Comm_Size (MPI_Comm comm, int * size) +MPI_Comm_size (MPI_Comm comm, int * size) { *size = 1; return 0; } static int -MPI_Comm_Rank (MPI_Comm comm, int * rank) +MPI_Comm_rank (MPI_Comm comm, int * rank) { *rank = 0; return 0; @@ -215,9 +221,10 @@ MPI_Allgather (void * sendbuf, int sendcnt, int sendtype, assert (sendbuf); assert (recvbuf); assert (sendcnt == recvcnt); + assert (recvcnt >= 0); assert (sendtype == recvtype); recvsize = CCTK_VarTypeSize (recvtype); - assert (size > 0); + assert (recvsize > 0); memcpy (recvbuf, sendbuf, recvcnt * recvsize); return 0; } @@ -231,9 +238,10 @@ MPI_Alltoall (void * sendbuf, int sendcnt, int sendtype, assert (sendbuf); assert (recvbuf); assert (sendcnt == recvcnt); + assert (recvcnt >= 0); assert (sendtype == recvtype); recvsize = CCTK_VarTypeSize (recvtype); - assert (size > 0); + assert (recvsize > 0); memcpy (recvbuf, sendbuf, recvcnt * recvsize); return 0; } @@ -249,17 +257,32 @@ MPI_Alltoallv (void * sendbuf, int * sendcnt, int * sendoff, int sendtype, assert (sendcnt); assert (recvcnt); assert (*sendcnt == *recvcnt); + assert (*recvcnt >= 0); assert (sendoff); assert (recvoff); assert (*sendoff == 0); assert (*recvoff == 0); assert (sendtype == recvtype); recvsize = CCTK_VarTypeSize (recvtype); - assert (size > 0); + assert (recvsize > 0); memcpy (recvbuf, sendbuf, *recvcnt * recvsize); return 0; } +static int +MPI_Allreduce (void * sendbuf, void * recvbuf, int count, + MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) +{ + int recvsize; + assert (sendbuf); + assert (recvbuf); + assert (count >= 0); + recvsize = CCTK_VarTypeSize (datatype); + assert (recvsize > 0); + memcpy (recvbuf, sendbuf, count * recvsize); + return 0; +} + #endif -- cgit v1.2.3