routines/structures (except MPI_Comm) begin with 'hypre_'. This will help to prevent name conflicts with other codes that use the same trick.
478 lines
11 KiB
C
478 lines
11 KiB
C
/*BHEADER**********************************************************************
|
|
* (c) 1998 The Regents of the University of California
|
|
*
|
|
* See the file COPYRIGHT_and_DISCLAIMER for a complete copyright
|
|
* notice, contact person, and disclaimer.
|
|
*
|
|
* $Revision$
|
|
*********************************************************************EHEADER*/
|
|
/******************************************************************************
|
|
*
|
|
* Fake mpi stubs to generate serial codes without mpi
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include "utilities.h"
|
|
|
|
#ifdef HYPRE_SEQUENTIAL
|
|
|
|
int
|
|
hypre_MPI_Init( int *argc,
|
|
char ***argv )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Finalize( )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Abort( hypre_MPI_Comm comm,
|
|
int errorcode )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
double
|
|
hypre_MPI_Wtime( )
|
|
{
|
|
return(0.0);
|
|
}
|
|
|
|
double
|
|
hypre_MPI_Wtick( )
|
|
{
|
|
return(0.0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Barrier( hypre_MPI_Comm comm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_create( hypre_MPI_Comm comm,
|
|
hypre_MPI_Group group,
|
|
hypre_MPI_Comm *newcomm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_dup( hypre_MPI_Comm comm,
|
|
hypre_MPI_Comm *newcomm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_size( hypre_MPI_Comm comm,
|
|
int *size )
|
|
{
|
|
*size = 1;
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_rank( hypre_MPI_Comm comm,
|
|
int *rank )
|
|
{
|
|
*rank = 0;
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_free( hypre_MPI_Comm *comm )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Comm_group( hypre_MPI_Comm comm,
|
|
hypre_MPI_Group *group )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Group_incl( hypre_MPI_Group group,
|
|
int n,
|
|
int *ranks,
|
|
hypre_MPI_Group *newgroup )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Group_free( hypre_MPI_Group *group )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Address( void *location,
|
|
hypre_MPI_Aint *address )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Get_count( hypre_MPI_Status *status,
|
|
hypre_MPI_Datatype datatype,
|
|
int *count )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Alltoall( void *sendbuf,
|
|
int sendcount,
|
|
hypre_MPI_Datatype sendtype,
|
|
void *recvbuf,
|
|
int recvcount,
|
|
hypre_MPI_Datatype recvtype,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Allgather( void *sendbuf,
|
|
int sendcount,
|
|
hypre_MPI_Datatype sendtype,
|
|
void *recvbuf,
|
|
int recvcount,
|
|
hypre_MPI_Datatype recvtype,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
int i;
|
|
|
|
switch (sendtype)
|
|
{
|
|
case hypre_MPI_INT:
|
|
{
|
|
int *crecvbuf = (int *)recvbuf;
|
|
int *csendbuf = (int *)sendbuf;
|
|
for (i = 0; i < sendcount; i++)
|
|
{
|
|
crecvbuf[i] = csendbuf[i];
|
|
}
|
|
}
|
|
break;
|
|
|
|
case hypre_MPI_DOUBLE:
|
|
{
|
|
double *crecvbuf = (double *)recvbuf;
|
|
double *csendbuf = (double *)sendbuf;
|
|
for (i = 0; i < sendcount; i++)
|
|
{
|
|
crecvbuf[i] = csendbuf[i];
|
|
}
|
|
}
|
|
break;
|
|
|
|
case hypre_MPI_CHAR:
|
|
{
|
|
char *crecvbuf = (char *)recvbuf;
|
|
char *csendbuf = (char *)sendbuf;
|
|
for (i = 0; i < sendcount; i++)
|
|
{
|
|
crecvbuf[i] = csendbuf[i];
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Allgatherv( void *sendbuf,
|
|
int sendcount,
|
|
hypre_MPI_Datatype sendtype,
|
|
void *recvbuf,
|
|
int *recvcounts,
|
|
int *displs,
|
|
hypre_MPI_Datatype recvtype,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return ( hypre_MPI_Allgather(sendbuf, sendcount, sendtype,
|
|
recvbuf, *recvcounts, recvtype, comm) );
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Gather( void *sendbuf,
|
|
int sendcount,
|
|
hypre_MPI_Datatype sendtype,
|
|
void *recvbuf,
|
|
int recvcount,
|
|
hypre_MPI_Datatype recvtype,
|
|
int root,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return ( hypre_MPI_Allgather(sendbuf, sendcount, sendtype,
|
|
recvbuf, recvcount, recvtype, comm) );
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Scatter( void *sendbuf,
|
|
int sendcount,
|
|
hypre_MPI_Datatype sendtype,
|
|
void *recvbuf,
|
|
int recvcount,
|
|
hypre_MPI_Datatype recvtype,
|
|
int root,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return ( hypre_MPI_Allgather(sendbuf, sendcount, sendtype,
|
|
recvbuf, recvcount, recvtype, comm) );
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Bcast( void *buffer,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int root,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Send( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int dest,
|
|
int tag,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Recv( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int source,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Status *status )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Isend( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int dest,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Request *request )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Irecv( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int source,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Request *request )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Send_init( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int dest,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Request *request )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Recv_init( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int dest,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Request *request )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Irsend( void *buf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
int dest,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Request *request )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Startall( int count,
|
|
hypre_MPI_Request *array_of_requests )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Probe( int source,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
hypre_MPI_Status *status )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Iprobe( int source,
|
|
int tag,
|
|
hypre_MPI_Comm comm,
|
|
int *flag,
|
|
hypre_MPI_Status *status )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Wait( hypre_MPI_Request *request,
|
|
hypre_MPI_Status *status )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Waitall( int count,
|
|
hypre_MPI_Request *array_of_requests,
|
|
hypre_MPI_Status *array_of_statuses )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Waitany( int count,
|
|
hypre_MPI_Request *array_of_requests,
|
|
int *index,
|
|
hypre_MPI_Status *status )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Allreduce( void *sendbuf,
|
|
void *recvbuf,
|
|
int count,
|
|
hypre_MPI_Datatype datatype,
|
|
hypre_MPI_Op op,
|
|
hypre_MPI_Comm comm )
|
|
{
|
|
switch (datatype)
|
|
{
|
|
case hypre_MPI_INT:
|
|
{
|
|
int *crecvbuf = (int *)recvbuf;
|
|
int *csendbuf = (int *)sendbuf;
|
|
crecvbuf[0] = csendbuf[0];
|
|
}
|
|
break;
|
|
|
|
case hypre_MPI_DOUBLE:
|
|
{
|
|
double *crecvbuf = (double *)recvbuf;
|
|
double *csendbuf = (double *)sendbuf;
|
|
crecvbuf[0] = csendbuf[0];
|
|
}
|
|
break;
|
|
|
|
case hypre_MPI_CHAR:
|
|
{
|
|
char *crecvbuf = (char *)recvbuf;
|
|
char *csendbuf = (char *)sendbuf;
|
|
crecvbuf[0] = csendbuf[0];
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Request_free( hypre_MPI_Request *request )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_contiguous( int count,
|
|
hypre_MPI_Datatype oldtype,
|
|
hypre_MPI_Datatype *newtype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_vector( int count,
|
|
int blocklength,
|
|
int stride,
|
|
hypre_MPI_Datatype oldtype,
|
|
hypre_MPI_Datatype *newtype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_hvector( int count,
|
|
int blocklength,
|
|
hypre_MPI_Aint stride,
|
|
hypre_MPI_Datatype oldtype,
|
|
hypre_MPI_Datatype *newtype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_struct( int count,
|
|
int *array_of_blocklengths,
|
|
hypre_MPI_Aint *array_of_displacements,
|
|
hypre_MPI_Datatype *array_of_types,
|
|
hypre_MPI_Datatype *newtype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_commit( hypre_MPI_Datatype *datatype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
int
|
|
hypre_MPI_Type_free( hypre_MPI_Datatype *datatype )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
#else
|
|
|
|
/* this is used only to eliminate compiler warnings */
|
|
int hypre_empty;
|
|
|
|
#endif
|