18#if defined(AUTOPAS_INCLUDE_MPI)
29#if defined(AUTOPAS_INCLUDE_MPI)
33#define AUTOPAS_MPI_COMM_NULL MPI_COMM_NULL
35#define AUTOPAS_MPI_COMM_WORLD MPI_COMM_WORLD
39#define AUTOPAS_MPI_BYTE MPI_BYTE
41#define AUTOPAS_MPI_CXX_BOOL MPI_CXX_BOOL
43#define AUTOPAS_MPI_CHAR MPI_CHAR
45#define AUTOPAS_MPI_INT MPI_INT
47#define AUTOPAS_MPI_LONG_INT MPI_LONG_INT
49#define AUTOPAS_MPI_UNSIGNED_INT MPI_UNSIGNED
51#define AUTOPAS_MPI_LONG MPI_LONG
53#define AUTOPAS_MPI_UNSIGNED_LONG MPI_UNSIGNED_LONG
55#define AUTOPAS_MPI_DOUBLE MPI_DOUBLE
59#define AUTOPAS_MPI_MAX MPI_MAX
61#define AUTOPAS_MPI_MIN MPI_MIN
63#define AUTOPAS_MPI_SUM MPI_SUM
65#define AUTOPAS_MPI_PROD MPI_PROD
67#define AUTOPAS_MPI_LAND MPI_LAND
69#define AUTOPAS_MPI_BAND MPI_BAND
71#define AUTOPAS_MPI_LOR MPI_LOR
73#define AUTOPAS_MPI_BOR MPI_BOR
75#define AUTOPAS_MPI_LXOR MPI_LXOR
77#define AUTOPAS_MPI_BXOR MPI_BXOR
79#define AUTOPAS_MPI_MINLOC MPI_MINLOC
81#define AUTOPAS_MPI_MAXLOC MPI_MAXLOC
83#define AUTOPAS_MPI_REPLACE MPI_REPLACE
85#define AUTOPAS_MPI_NO_OP MPI_NO_OP
89#define AUTOPAS_MPI_IN_PLACE MPI_IN_PLACE
93#define AUTOPAS_MPI_STATUS_IGNORE MPI_STATUS_IGNORE
97#define AUTOPAS_MPI_REQUEST_NULL MPI_REQUEST_NULL
100#define AUTOPAS_MPI_MAX_ERROR_STRING MPI_MAX_ERROR_STRING
105using AutoPas_MPI_Status = MPI_Status;
118#define AUTOPAS_MPI_COMM_NULL autopas::AutoPas_MPI_Comm::COMM_NULL
120#define AUTOPAS_MPI_COMM_WORLD autopas::AutoPas_MPI_Comm::COMM_WORLD
128 CXX_BOOL =
sizeof(bool),
130 UNSIGNED_CHAR =
sizeof(
unsigned char),
131 UNSIGNED_SHORT =
sizeof(
unsigned short),
133 UNSIGNED_INT =
sizeof(
unsigned int),
134 UNSIGNED_LONG =
sizeof(
unsigned long),
135 UNSIGNED_LONG_LONG =
sizeof(
unsigned long long),
136 LONG =
sizeof(double),
137 DOUBLE =
sizeof(
double),
138 LONG_INT =
sizeof(long) +
sizeof(
int),
142#define AUTOPAS_MPI_BYTE autopas::AutoPas_MPI_Datatype::BYTE
144#define AUTOPAS_MPI_CXX_BOOL autopas::AutoPas_MPI_Datatype::CXX_BOOL
146#define AUTOPAS_MPI_CHAR autopas::AutoPas_MPI_Datatype::CHAR
148#define AUTOPAS_MPI_INT autopas::AutoPas_MPI_Datatype::INT
150#define AUTOPAS_MPI_LONG_INT autopas::AutoPas_MPI_Datatype::LONG_INT
152#define AUTOPAS_MPI_UNSIGNED_INT autopas::AutoPas_MPI_Datatype::UNSIGNED_INT
154#define AUTOPAS_MPI_LONG autopas::AutoPas_MPI_Datatype::LONG
156#define AUTOPAS_MPI_UNSIGNED_LONG autopas::AutoPas_MPI_Datatype::UNSIGNED_LONG
158#define AUTOPAS_MPI_DOUBLE autopas::AutoPas_MPI_Datatype::DOUBLE
163enum AutoPas_MPI_Op { MAX, MIN, SUM, PROD, LAND, BAND, LOR, BOR, LXOR, BXOR, MINLOC, MAXLOC, REPLACE, NO_OP };
166#define AUTOPAS_MPI_MAX autopas::AutoPas_MPI_Op::MAX
168#define AUTOPAS_MPI_MIN autopas::AutoPas_MPI_Op::MIN
170#define AUTOPAS_MPI_SUM autopas::AutoPas_MPI_Op::SUM
172#define AUTOPAS_MPI_PROD autopas::AutoPas_MPI_Op::PROD
174#define AUTOPAS_MPI_LAND autopas::AutoPas_MPI_Op::LAND
176#define AUTOPAS_MPI_BAND autopas::AutoPas_MPI_Op::BAND
178#define AUTOPAS_MPI_LOR autopas::AutoPas_MPI_Op::LOR
180#define AUTOPAS_MPI_BOR autopas::AutoPas_MPI_Op::BOR
182#define AUTOPAS_MPI_LXOR autopas::AutoPas_MPI_Op::LXOR
184#define AUTOPAS_MPI_BXOR autopas::AutoPas_MPI_Op::BXOR
186#define AUTOPAS_MPI_MINLOC autopas::AutoPas_MPI_Op::MINLOC
188#define AUTOPAS_MPI_MAXLOC autopas::AutoPas_MPI_Op::MAXLOC
190#define AUTOPAS_MPI_REPLACE autopas::AutoPas_MPI_Op::REPLACE
192#define AUTOPAS_MPI_NO_OP autopas::AutoPas_MPI_Op::NO_OP
212#define AUTOPAS_MPI_STATUS_IGNORE nullptr
223#define AUTOPAS_MPI_REQUEST_NULL autopas::AutoPas_MPI_Request::REQUEST_NULL
229 AUTOPAS_MPI_SUCCESS = 0,
230 AUTOPAS_MPI_ERR_BUFFER,
231 AUTOPAS_MPI_ERR_COUNT,
232 AUTOPAS_MPI_ERR_TYPE,
234 AUTOPAS_MPI_ERR_COMM,
235 AUTOPAS_MPI_ERR_RANK,
236 AUTOPAS_MPI_ERR_ROOT,
237 AUTOPAS_MPI_ERR_GROUP,
239 AUTOPAS_MPI_ERR_TOPOLOGY,
240 AUTOPAS_MPI_ERR_DIMS,
242 AUTOPAS_MPI_ERR_UNKNOWN,
243 AUTOPAS_MPI_ERR_TRUNCATE,
244 AUTOPAS_MPI_ERR_OTHER,
245 AUTOPAS_MPI_ERR_INTERN,
246 AUTOPAS_MPI_ERR_IN_STATUS,
247 AUTOPAS_MPI_ERR_PENDING,
248 AUTOPAS_MPI_ERR_REQUEST,
249 AUTOPAS_MPI_ERR_LASTCODE,
252#define AUTOPAS_MPI_MAX_ERROR_STRING 256
254#define AUTOPAS_MPI_IN_PLACE ((void *)1)
562 AutoPas_MPI_Status *array_of_statuses);
594 void *buffer_recv,
const int *count_recv,
const int *displs,
622#if defined(AUTOPAS_INCLUDE_MPI)
624inline int AutoPas_MPI_Init(
int *argc,
char ***argv) {
return MPI_Init(argc, argv); }
631 return MPI_Error_string(errorcode,
string, resultlen);
639 return MPI_Comm_dup(comm, newComm);
645 return MPI_Comm_split(comm, color, key, newcomm);
650 return MPI_Send(buf, count, datatype, dest, tag, comm);
655 return MPI_Recv(buf, count, datatype, source, tag, comm, status);
659 return MPI_Bcast(buffer, count, datatype, root, comm);
664 return MPI_Ibcast(buffer, count, datatype, root, comm, request);
669 return MPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
674 return MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm);
679 return MPI_Iallreduce(sendbuf, recvbuf, count, datatype, op, comm, request);
685 return MPI_Ibarrier(comm, request);
689 return MPI_Test(request, flag, status);
693 return MPI_Wait(request, status);
700 return MPI_Cart_create(comm, nDims, dims, periods, reorder, comm_cart);
704 return MPI_Cart_get(comm, maxdims, dims, periods, coords);
708 return MPI_Cart_coords(comm, rank, maxdims, coords);
712 return MPI_Cart_rank(comm, coords, rank);
715inline int AutoPas_MPI_Dims_create(
int nnodes,
int ndims,
int dims[]) {
return MPI_Dims_create(nnodes, ndims, dims); }
719 return MPI_Isend(buf, count, datatype, dest, tag, comm, request);
724 return MPI_Irecv(buf, count, datatype, source, tag, comm, request);
728 return MPI_Probe(source, tag, comm, status);
732 return MPI_Get_count(status, datatype, count);
736 AutoPas_MPI_Status *array_of_statuses) {
737 return MPI_Waitall(count, array_of_requests, array_of_statuses);
743 return MPI_Gather(buffer_send, count_send, datatype_send, buffer_recv, count_recv, datatype_recv, root, comm);
747 void *buffer_recv,
const int *count_recv,
const int *displs,
749 return MPI_Gatherv(buffer_send, count_send, datatype_send, buffer_recv, count_recv, displs, datatype_recv, root,
756 return MPI_Allgather(buffer_send, count_send, datatype_send, buffer_recv, count_recv, datatype_recv, comm);
767 return AUTOPAS_MPI_SUCCESS;
771 static const std::map<int, const char *> errorStrings = {
772 {AUTOPAS_MPI_SUCCESS,
"MPI_SUCCESS: Successful return code"},
773 {AUTOPAS_MPI_ERR_BUFFER,
"MPI_ERR_BUFFER: Invalid buffer pointer"},
774 {AUTOPAS_MPI_ERR_COUNT,
"MPI_ERR_COUNT: Invalid count argument"},
775 {AUTOPAS_MPI_ERR_TYPE,
"MPI_ERR_TYPE: Invalid datatype argument"},
776 {AUTOPAS_MPI_ERR_TAG,
"MPI_ERR_TAG: Invalid tag argument"},
777 {AUTOPAS_MPI_ERR_COMM,
"MPI_ERR_COMM: Invalid communicator"},
778 {AUTOPAS_MPI_ERR_RANK,
"MPI_ERR_RANK: Invalid rank"},
779 {AUTOPAS_MPI_ERR_ROOT,
"MPI_ERR_ROOT: Invalid root"},
780 {AUTOPAS_MPI_ERR_GROUP,
"MPI_ERR_GROUP: Null group passed to function"},
781 {AUTOPAS_MPI_ERR_OP,
"MPI_ERR_OP: Invalid operation"},
782 {AUTOPAS_MPI_ERR_TOPOLOGY,
"MPI_ERR_TOPOLOGY: Invalid topology"},
783 {AUTOPAS_MPI_ERR_DIMS,
"MPI_ERR_DIMS: Illegal dimension argument"},
784 {AUTOPAS_MPI_ERR_ARG,
"MPI_ERR_ARG: Invalid argument"},
785 {AUTOPAS_MPI_ERR_UNKNOWN,
"MPI_ERR_UNKNOWN: Unknown error"},
786 {AUTOPAS_MPI_ERR_TRUNCATE,
"MPI_ERR_TRUNCATE: message truncated on receive"},
787 {AUTOPAS_MPI_ERR_OTHER,
"MPI_ERR_OTHER: Other error; use Error_string"},
788 {AUTOPAS_MPI_ERR_INTERN,
"MPI_ERR_INTERN: internal error code"},
789 {AUTOPAS_MPI_ERR_IN_STATUS,
"MPI_ERR_IN_STATUS: Look in status for error value"},
790 {AUTOPAS_MPI_ERR_PENDING,
"MPI_ERR_PENDING: Pending request"},
791 {AUTOPAS_MPI_ERR_REQUEST,
"MPI_ERR_REQUEST: illegal mpi_request handle"},
792 {AUTOPAS_MPI_ERR_LASTCODE,
"MPI_ERR_LASTCODE: Last error code -- always at end"},
796 return AUTOPAS_MPI_SUCCESS;
800 if (
nullptr == size) {
801 return AUTOPAS_MPI_ERR_ARG;
804 return AUTOPAS_MPI_SUCCESS;
808 if (
nullptr == rank) {
809 return AUTOPAS_MPI_ERR_ARG;
812 return AUTOPAS_MPI_SUCCESS;
817 return AUTOPAS_MPI_SUCCESS;
822 return AUTOPAS_MPI_SUCCESS;
827 return AUTOPAS_MPI_SUCCESS;
834 return AUTOPAS_MPI_ERR_RANK;
839 return AUTOPAS_MPI_ERR_RANK;
841 return AUTOPAS_MPI_SUCCESS;
848 *request = REQUEST_NULL;
849 return AUTOPAS_MPI_ERR_RANK;
851 *request = COMPLETED_REQUEST;
852 return AUTOPAS_MPI_SUCCESS;
859 memcpy(recvbuf, sendbuf, datatype *
static_cast<size_t>(count));
861 return AUTOPAS_MPI_SUCCESS;
871 *request = COMPLETED_REQUEST;
878 *request = COMPLETED_REQUEST;
879 return AUTOPAS_MPI_SUCCESS;
883 *request = REQUEST_NULL;
885 return AUTOPAS_MPI_SUCCESS;
889 *request = REQUEST_NULL;
890 return AUTOPAS_MPI_SUCCESS;
894 if (*request != COMPLETED_REQUEST) {
895 return AUTOPAS_MPI_ERR_REQUEST;
897 *request = REQUEST_NULL;
898 return AUTOPAS_MPI_SUCCESS;
907 return AUTOPAS_MPI_ERR_ROOT;
911 for (
long i = 0; i < (count_recv / count_send); i++)
913 memcpy(
static_cast<char *
>(buffer_recv) + (i * count_send *
sizeof(datatype_send)), buffer_send,
914 count_send *
sizeof(datatype_send));
916 return AUTOPAS_MPI_SUCCESS;
920 void *buffer_recv,
const int *count_recv,
const int *displs,
924 static_cast<char *
>(buffer_recv) +
static_cast<std::ptrdiff_t
>(displs[0] * datatype_recv),
925 count_recv[0], datatype_recv, root, comm);
931 return AutoPas_MPI_Gather(buffer_send, count_send, datatype_send, buffer_recv, count_recv, datatype_recv, 0, comm);
936 *new_communicator = old_communicator;
937 return AUTOPAS_MPI_SUCCESS;
943 return AUTOPAS_MPI_SUCCESS;
947 return AUTOPAS_MPI_SUCCESS;
951 for (
int i = 0; i < maxdims; ++i) {
954 return AUTOPAS_MPI_SUCCESS;
959 return AUTOPAS_MPI_SUCCESS;
964 for (
int i = 0; i < ndims; ++i) {
967 return AUTOPAS_MPI_SUCCESS;
972 return AUTOPAS_MPI_SUCCESS;
977 return AUTOPAS_MPI_SUCCESS;
981 return AUTOPAS_MPI_SUCCESS;
986 return AUTOPAS_MPI_SUCCESS;
991 return AUTOPAS_MPI_SUCCESS;
#define AUTOPAS_MPI_IN_PLACE
Indicator for Collectives to happen in-place.
Definition: WrapMPI.h:254
#define AUTOPAS_MPI_COMM_NULL
Wrapper for MPI_COMM_NULL.
Definition: WrapMPI.h:118
#define AUTOPAS_MPI_MAX_ERROR_STRING
Dummy for MPI_MAX_ERROR_STRING.
Definition: WrapMPI.h:252
#define AUTOPAS_MPI_COMM_WORLD
Wrapper for MPI_COMM_WORLD.
Definition: WrapMPI.h:120
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32
int AutoPas_MPI_Probe(int source, int tag, AutoPas_MPI_Comm comm, AutoPas_MPI_Status *status)
Wrapper for MPI_Probe.
Definition: WrapMPI.h:980
int AutoPas_MPI_Request_free(AutoPas_MPI_Request *request)
Wrapper for MPI_Request_free.
Definition: WrapMPI.h:893
int AutoPas_MPI_Test(AutoPas_MPI_Request *request, int *flag, AutoPas_MPI_Status *status)
Wrapper for MPI_Test.
Definition: WrapMPI.h:882
int AutoPas_MPI_Ibcast(void *buffer, int count, AutoPas_MPI_Datatype datatype, int root, AutoPas_MPI_Comm comm, AutoPas_MPI_Request *request)
Wrapper for MPI_Ibcast.
Definition: WrapMPI.h:845
int AutoPas_MPI_Cart_get(AutoPas_MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[])
Wrapper for MPI_Cart_get.
Definition: WrapMPI.h:946
int AutoPas_MPI_Finalized(int *flag)
Wrapper for MPI_Finalized.
Definition: WrapMPI.h:765
int AutoPas_MPI_Error_string(int errorcode, char *string, int *resultlen)
Wrapper for MPI_Error_string.
Definition: WrapMPI.h:770
int AutoPas_MPI_Isend(const void *buf, int count, AutoPas_MPI_Datatype datatype, int dest, int tag, AutoPas_MPI_Comm comm, AutoPas_MPI_Request *request)
Wrapper for MPI_Isend.
Definition: WrapMPI.h:970
int AutoPas_MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, AutoPas_MPI_Datatype datatype, AutoPas_MPI_Op op, AutoPas_MPI_Comm comm, AutoPas_MPI_Request *request)
Wrapper for MPI_Iallreduce.
Definition: WrapMPI.h:869
int AutoPas_MPI_Gather(const void *buffer_send, int count_send, AutoPas_MPI_Datatype datatype_send, void *buffer_recv, int count_recv, AutoPas_MPI_Datatype datatype_recv, int root, AutoPas_MPI_Comm comm)
Wrapper for MPI_Gather.
Definition: WrapMPI.h:902
int AutoPas_MPI_Wait(AutoPas_MPI_Request *request, AutoPas_MPI_Status *status)
Wrapper for MPI_Wait.
Definition: WrapMPI.h:888
int AutoPas_MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, AutoPas_MPI_Datatype datatype, AutoPas_MPI_Op op, AutoPas_MPI_Comm comm)
Wrapper for MPI_Allreduce.
Definition: WrapMPI.h:864
int AutoPas_MPI_Cart_rank(AutoPas_MPI_Comm comm, const int coords[], int *rank)
Wrapper for MPI_Cart_rank Determines process rank in communicator given Cartesian location.
Definition: WrapMPI.h:957
int AutoPas_MPI_Irecv(void *buf, int count, AutoPas_MPI_Datatype datatype, int source, int tag, AutoPas_MPI_Comm comm, AutoPas_MPI_Request *request)
Wrapper for MPI_Irecv.
Definition: WrapMPI.h:975
int AutoPas_MPI_Finalize()
Wrapper for MPI_Finalize Also frees the AutoPas communicator, so it needs to be called if AutoPas_MPI...
Definition: WrapMPI.h:763
int AutoPas_MPI_Bcast(void *buffer, int count, AutoPas_MPI_Datatype datatype, int root, AutoPas_MPI_Comm comm)
Wrapper for MPI_Bcast.
Definition: WrapMPI.h:837
int AutoPas_MPI_Send(const void *buf, int count, AutoPas_MPI_Datatype datatype, int dest, int tag, AutoPas_MPI_Comm comm)
Wrapper for MPI_Send.
Definition: WrapMPI.h:825
int AutoPas_MPI_Comm_size(AutoPas_MPI_Comm comm, int *size)
Wrapper for MPI_Comm_size.
Definition: WrapMPI.h:799
int AutoPas_MPI_Cart_create(AutoPas_MPI_Comm comm, int nDims, const int *dims, const int *periods, int reorder, AutoPas_MPI_Comm *comm_cart)
Wrapper for MPI_Cart_create.
Definition: WrapMPI.h:940
int AutoPas_MPI_Allgather(void *buffer_send, int count_send, AutoPas_MPI_Datatype datatype_send, void *buffer_recv, int count_recv, AutoPas_MPI_Datatype datatype_recv, AutoPas_MPI_Comm comm)
Wrapper for MPI_Allgather.
Definition: WrapMPI.h:928
int AutoPas_MPI_Get_count(const AutoPas_MPI_Status *status, AutoPas_MPI_Datatype datatype, int *count)
Wrapper for MPI_Get_count.
Definition: WrapMPI.h:984
AutoPas_MPI_Error
Dummy for MPI_Error.
Definition: WrapMPI.h:228
int AutoPas_MPI_Gatherv(const void *buffer_send, int count_send, AutoPas_MPI_Datatype datatype_send, void *buffer_recv, const int *count_recv, const int *displs, AutoPas_MPI_Datatype datatype_recv, int root, AutoPas_MPI_Comm comm)
Wrapper for MPI_Gatherv.
Definition: WrapMPI.h:919
int AutoPas_MPI_Reduce(const void *sendbuf, void *recvbuf, int count, AutoPas_MPI_Datatype datatype, AutoPas_MPI_Op op, int root, AutoPas_MPI_Comm comm)
Wrapper for MPI_Reduce.
Definition: WrapMPI.h:856
int AutoPas_MPI_Comm_dup(AutoPas_MPI_Comm comm, AutoPas_MPI_Comm *newComm)
Wrapper for MPI_Comm_dup.
Definition: WrapMPI.h:815
int AutoPas_MPI_Ibarrier(AutoPas_MPI_Comm comm, AutoPas_MPI_Request *request)
Wrapper for MPI_Ibarrier.
Definition: WrapMPI.h:877
int AutoPas_MPI_Barrier(AutoPas_MPI_Comm comm)
Wrapper for MPI_Barrier.
Definition: WrapMPI.h:875
int AutoPas_MPI_Init(int *argc, char ***argv)
Wrapper for MPI_Init Also defines the AutoPas communicator, so it needs to be called when AutoPas sho...
Definition: WrapMPI.h:761
AutoPas_MPI_Comm
Dummy for MPI_Comm.
Definition: WrapMPI.h:113
int AutoPas_MPI_Comm_free(AutoPas_MPI_Comm *comm)
Wrapper for MPI_Comm_free.
Definition: WrapMPI.h:820
AutoPas_MPI_Op
Dummy for MPI_Op.
Definition: WrapMPI.h:163
int AutoPas_MPI_Comm_rank(AutoPas_MPI_Comm comm, int *rank)
Wrapper for MPI_Comm_rank.
Definition: WrapMPI.h:807
int AutoPas_MPI_Comm_split(AutoPas_MPI_Comm old_communicator, int color, int key, AutoPas_MPI_Comm *new_communicator)
Wrapper for MPI_Comm_split.
Definition: WrapMPI.h:934
int AutoPas_MPI_Dims_create(int nnodes, int ndims, int dims[])
Wrapper for MPI_Dims_create.
Definition: WrapMPI.h:962
AutoPas_MPI_Request
Dummy for MPI_Request.
Definition: WrapMPI.h:217
AutoPas_MPI_Datatype
Dummy for MPI_Datatype.
Definition: WrapMPI.h:126
int AutoPas_MPI_Cart_coords(AutoPas_MPI_Comm comm, int rank, int maxdims, int coords[])
Wrapper for MPI_Cart_coords Determines process coords in cartesian topology given rank in group.
Definition: WrapMPI.h:950
int AutoPas_MPI_Waitall(int count, AutoPas_MPI_Request array_of_requests[], AutoPas_MPI_Status *array_of_statuses)
Wrapper for MPI_Waitall.
Definition: WrapMPI.h:989
int AutoPas_MPI_Recv(void *buf, int count, AutoPas_MPI_Datatype datatype, int source, int tag, AutoPas_MPI_Comm comm, AutoPas_MPI_Status *status)
Wrapper for MPI_Recv.
Definition: WrapMPI.h:830
Dummy for MPI_Status.
Definition: WrapMPI.h:208
int count
additional field that the MPI standard does not necessitate, but that is often used in implementation...
Definition: WrapMPI.h:209
int AUTOPAS_MPI_ERROR
Dummy for MPI_Status::MPI_ERROR.
Definition: WrapMPI.h:209
int cancelled
additional field that the MPI standard does not necessitate, but that is often used in implementation...
Definition: WrapMPI.h:209
int AUTOPAS_MPI_TAG
Dummy for MPI_Status::MPI_TAG.
Definition: WrapMPI.h:209
int AUTOPAS_MPI_SOURCE
Dummy for MPI_Status::MPI_SOURCE.
Definition: WrapMPI.h:209