37#include "../basic_types/datatype_structure.hpp"
48#if defined(__GNUC__) || (defined(__ICC) && (__ICC >= 600))
49#define CURRENT_FUNCTION __PRETTY_FUNCTION__
50#elif defined(__FUNCSIG__)
51#define CURRENT_FUNCTION __FUNCSIG__
52#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600))
53#define CURRENT_FUNCTION __FUNCTION__
54#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)
55#define CURRENT_FUNCTION __func__
56#elif defined(__cplusplus) && (__cplusplus >= 201103)
57#define CURRENT_FUNCTION __func__
59#define CURRENT_FUNCTION "(unknown)"
64#ifdef USE_SINGLE_PRECISION
66#define MPI_DOUBLE MPI_FLOAT
71#if defined CODI_REVERSE_TYPE || defined CODI_FORWARD_TYPE
73#include <medi/medi.hpp>
76#include <codi/tools/mpi/codiMpiTypes.hpp>
81using MediTypes = codi::CoDiMpiTypes<su2double>;
82using MediTool = MediTypes::Tool;
84extern MediTypes* mediTypes;
85#define AMPI_ADOUBLE ((medi::MpiTypeInterface*)mediTypes->MPI_TYPE)
100 using Status = MPI_Status;
103 using Comm = MPI_Comm;
107 static int Rank, Size, MinRankError;
108 static Comm currentComm;
109 static bool winMinRankErrorInUse;
110 static Win winMinRankError;
113 static void CopyData(
const void* sendbuf,
void* recvbuf,
int size,
Datatype datatype,
int recvshift = 0,
116 static void Error(
const std::string& ErrorMsg,
const std::string& FunctionName);
118 static inline int GetRank() {
return Rank; }
120 static inline int GetSize() {
return Size; }
123 currentComm = newComm;
124 MPI_Comm_rank(currentComm, &Rank);
125 MPI_Comm_size(currentComm, &Size);
127 if (winMinRankErrorInUse) MPI_Win_free(&winMinRankError);
129 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
130 winMinRankErrorInUse =
true;
133 static inline Comm GetComm() {
return currentComm; }
135 static inline void Init(
int* argc,
char*** argv) {
136 MPI_Init(argc, argv);
137 MPI_Comm_rank(currentComm, &Rank);
138 MPI_Comm_size(currentComm, &Size);
141 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
142 winMinRankErrorInUse =
true;
145 static inline void Init_thread(
int* argc,
char*** argv,
int required,
int* provided) {
146 MPI_Init_thread(argc, argv, required, provided);
147 MPI_Comm_rank(currentComm, &Rank);
148 MPI_Comm_size(currentComm, &Size);
151 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
152 winMinRankErrorInUse =
true;
155 static inline void Comm_rank(
Comm comm,
int* rank) { MPI_Comm_rank(comm, rank); }
157 static inline void Comm_size(
Comm comm,
int* size) { MPI_Comm_size(comm, size); }
160 if (winMinRankErrorInUse) MPI_Win_free(&winMinRankError);
164 static inline void Barrier(
Comm comm) { MPI_Barrier(comm); }
166 static inline void Abort(
Comm comm,
int error) { MPI_Abort(comm, error); }
168 static inline void Get_count(
const Status* status,
Datatype datatype,
int* count) {
169 MPI_Get_count(status, datatype, count);
172 static inline void Isend(
const void* buf,
int count,
Datatype datatype,
int dest,
int tag,
Comm comm,
174 MPI_Isend(buf, count, datatype, dest, tag, comm, request);
178 MPI_Irecv(buf, count, datatype, dest, tag, comm, request);
181 static inline void Wait(
Request* request, Status* status) { MPI_Wait(request, status); }
185 static inline void Testall(
int count,
Request* array_of_requests,
int* flag, Status* array_of_statuses) {
186 MPI_Testall(count, array_of_requests, flag, array_of_statuses);
189 static inline void Waitall(
int nrequests,
Request* request, Status* status) {
190 MPI_Waitall(nrequests, request, status);
193 static inline void Probe(
int source,
int tag,
Comm comm, Status* status) { MPI_Probe(source, tag, comm, status); }
195 static inline void Send(
const void* buf,
int count,
Datatype datatype,
int dest,
int tag,
Comm comm) {
196 MPI_Send(buf, count, datatype, dest, tag, comm);
199 static inline void Recv(
void* buf,
int count,
Datatype datatype,
int dest,
int tag,
Comm comm, Status* status) {
200 MPI_Recv(buf, count, datatype, dest, tag, comm, status);
203 static inline void Bcast(
void* buf,
int count,
Datatype datatype,
int root,
Comm comm) {
204 MPI_Bcast(buf, count, datatype, root, comm);
207 static inline void Reduce(
const void* sendbuf,
void* recvbuf,
int count,
Datatype datatype,
Op op,
int root,
209 MPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
212 static inline void Allreduce(
const void* sendbuf,
void* recvbuf,
int count,
Datatype datatype,
Op op,
Comm comm) {
213 MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm);
216 static inline void Gather(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
218 MPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
221 static inline void Scatter(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
223 MPI_Scatter(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
226 static inline void Allgather(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
228 MPI_Allgather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, comm);
231 static inline void Allgatherv(
const void* sendbuf,
int sendcount,
Datatype sendtype,
void* recvbuf,
232 const int* recvcounts,
const int* displs,
Datatype recvtype,
Comm comm) {
233 MPI_Allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
236 static inline void Alltoall(
const void* sendbuf,
int sendcount,
Datatype sendtype,
void* recvbuf,
int recvcount,
238 MPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
241 static inline void Alltoallv(
const void* sendbuf,
const int* sendcounts,
const int* sdispls,
Datatype sendtype,
242 void* recvbuf,
const int* recvcounts,
const int* recvdispls,
Datatype recvtype,
244 MPI_Alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, recvdispls, recvtype, comm);
247 static inline void Sendrecv(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
int dest,
int sendtag,
void* recvbuf,
248 int recvcnt,
Datatype recvtype,
int source,
int recvtag,
Comm comm, Status* status) {
249 MPI_Sendrecv(sendbuf, sendcnt, sendtype, dest, sendtag, recvbuf, recvcnt, recvtype, source, recvtag, comm, status);
252 static inline void Reduce_scatter(
const void* sendbuf,
void* recvbuf,
const int* recvcounts,
Datatype datatype,
Op op,
254 MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm);
257 static inline void Waitany(
int nrequests,
Request* request,
int* index, Status* status) {
258 MPI_Waitany(nrequests, request, index, status);
266#if defined CODI_REVERSE_TYPE || defined CODI_FORWARD_TYPE
275 using Request = AMPI_Request;
276 using Status = AMPI_Status;
278 static inline void Init(
int* argc,
char*** argv) {
279 AMPI_Init(argc, argv);
280 mediTypes =
new MediTypes();
281 AMPI_Comm_rank(convertComm(currentComm), &Rank);
282 AMPI_Comm_size(convertComm(currentComm), &Size);
285 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
286 winMinRankErrorInUse =
true;
289 static inline void Init_thread(
int* argc,
char*** argv,
int required,
int* provided) {
290 AMPI_Init_thread(argc, argv, required, provided);
291 mediTypes =
new MediTypes();
292 AMPI_Comm_rank(convertComm(currentComm), &Rank);
293 AMPI_Comm_size(convertComm(currentComm), &Size);
296 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
297 winMinRankErrorInUse =
true;
300 static inline void Init_AMPI(
void) {
302 mediTypes =
new MediTypes();
305 static inline void SetComm(Comm newComm) {
306 currentComm = newComm;
307 AMPI_Comm_rank(convertComm(currentComm), &Rank);
308 AMPI_Comm_size(convertComm(currentComm), &Size);
310 if (winMinRankErrorInUse) MPI_Win_free(&winMinRankError);
312 MPI_Win_create(&MinRankError,
sizeof(
int),
sizeof(
int), MPI_INFO_NULL, currentComm, &winMinRankError);
313 winMinRankErrorInUse =
true;
316 static inline AMPI_Comm convertComm(MPI_Comm comm) {
return comm; }
318 static inline AMPI_Datatype convertDatatype(MPI_Datatype datatype) {
324 return AMPI_UNSIGNED_SHORT;
328 return AMPI_UNSIGNED_LONG;
333 }
else if (datatype ==
MPI_INT) {
341 static inline AMPI_Op convertOp(MPI_Op op) {
343 return medi::AMPI_SUM;
345 return medi::AMPI_PROD;
347 return medi::AMPI_MIN;
349 return medi::AMPI_MAX;
351 return medi::AMPI_BOR;
354 return medi::AMPI_SUM;
358 static inline void Comm_rank(Comm comm,
int* rank) { AMPI_Comm_rank(convertComm(comm), rank); }
360 static inline void Comm_size(Comm comm,
int* size) { AMPI_Comm_size(convertComm(comm), size); }
363 if (winMinRankErrorInUse) MPI_Win_free(&winMinRankError);
369 static inline void Barrier(Comm comm) { AMPI_Barrier(convertComm(comm)); }
371 static inline void Abort(Comm comm,
int error) { AMPI_Abort(convertComm(comm), error); }
373 static inline void Get_count(
const Status* status, Datatype datatype,
int* count) {
374 AMPI_Get_count(status, convertDatatype(datatype), count);
377 static inline void Isend(
const void* buf,
int count, Datatype datatype,
int dest,
int tag, Comm comm,
379 AMPI_Isend(buf, count, convertDatatype(datatype), dest, tag, convertComm(comm), request);
382 static inline void Irecv(
void* buf,
int count, Datatype datatype,
int dest,
int tag, Comm comm, Request* request) {
383 AMPI_Irecv(buf, count, convertDatatype(datatype), dest, tag, convertComm(comm), request);
386 static inline void Wait(
SU2_MPI::Request* request, Status* status) { AMPI_Wait(request, status); }
388 static inline int Request_free(Request* request) {
return AMPI_Request_free(request); }
390 static inline void Testall(
int count, Request* array_of_requests,
int* flag, Status* array_of_statuses) {
391 AMPI_Testall(count, array_of_requests, flag, array_of_statuses);
394 static inline void Waitall(
int nrequests, Request* request, Status* status) {
395 AMPI_Waitall(nrequests, request, status);
398 static inline void Probe(
int source,
int tag, Comm comm, Status* status) {
399 AMPI_Probe(source, tag, convertComm(comm), status);
402 static inline void Send(
const void* buf,
int count, Datatype datatype,
int dest,
int tag, Comm comm) {
403 AMPI_Send(buf, count, convertDatatype(datatype), dest, tag, convertComm(comm));
406 static inline void Recv(
void* buf,
int count, Datatype datatype,
int dest,
int tag, Comm comm, Status* status) {
407 AMPI_Recv(buf, count, convertDatatype(datatype), dest, tag, convertComm(comm), status);
410 static inline void Bcast(
void* buf,
int count, Datatype datatype,
int root, Comm comm) {
411 AMPI_Bcast(buf, count, convertDatatype(datatype), root, convertComm(comm));
414 static inline void Reduce(
const void* sendbuf,
void* recvbuf,
int count, Datatype datatype, Op op,
int root,
416 AMPI_Reduce(sendbuf, recvbuf, count, convertDatatype(datatype), convertOp(op), root, convertComm(comm));
419 static inline void Allreduce(
const void* sendbuf,
void* recvbuf,
int count, Datatype datatype, Op op, Comm comm) {
420 AMPI_Allreduce(sendbuf, recvbuf, count, convertDatatype(datatype), convertOp(op), convertComm(comm));
423 static inline void Gather(
const void* sendbuf,
int sendcnt, Datatype sendtype,
void* recvbuf,
int recvcnt,
424 Datatype recvtype,
int root, Comm comm) {
425 AMPI_Gather(sendbuf, sendcnt, convertDatatype(sendtype), recvbuf, recvcnt, convertDatatype(recvtype), root,
429 static inline void Scatter(
const void* sendbuf,
int sendcnt, Datatype sendtype,
void* recvbuf,
int recvcnt,
430 Datatype recvtype,
int root, Comm comm) {
431 AMPI_Scatter(sendbuf, sendcnt, convertDatatype(sendtype), recvbuf, recvcnt, convertDatatype(recvtype), root,
435 static inline void Allgather(
const void* sendbuf,
int sendcnt, Datatype sendtype,
void* recvbuf,
int recvcnt,
436 Datatype recvtype, Comm comm) {
437 AMPI_Allgather(sendbuf, sendcnt, convertDatatype(sendtype), recvbuf, recvcnt, convertDatatype(recvtype),
441 static inline void Allgatherv(
const void* sendbuf,
int sendcount, Datatype sendtype,
void* recvbuf,
442 const int* recvcounts,
const int* displs, Datatype recvtype, Comm comm) {
443 AMPI_Allgatherv(sendbuf, sendcount, convertDatatype(sendtype), recvbuf, recvcounts, displs,
444 convertDatatype(recvtype), convertComm(comm));
447 static inline void Alltoall(
const void* sendbuf,
int sendcount, Datatype sendtype,
void* recvbuf,
int recvcount,
448 Datatype recvtype, Comm comm) {
449 AMPI_Alltoall(sendbuf, sendcount, convertDatatype(sendtype), recvbuf, recvcount, convertDatatype(recvtype),
453 static inline void Alltoallv(
const void* sendbuf,
const int* sendcounts,
const int* sdispls, Datatype sendtype,
454 void* recvbuf,
const int* recvcounts,
const int* recvdispls, Datatype recvtype,
456 AMPI_Alltoallv(sendbuf, sendcounts, sdispls, convertDatatype(sendtype), recvbuf, recvcounts, recvdispls,
457 convertDatatype(recvtype), comm);
460 static inline void Sendrecv(
const void* sendbuf,
int sendcnt, Datatype sendtype,
int dest,
int sendtag,
void* recvbuf,
461 int recvcnt, Datatype recvtype,
int source,
int recvtag, Comm comm, Status* status) {
462 AMPI_Sendrecv(sendbuf, sendcnt, convertDatatype(sendtype), dest, sendtag, recvbuf, recvcnt,
463 convertDatatype(recvtype), source, recvtag, convertComm(comm), status);
466 static inline void Reduce_scatter(
const void* sendbuf,
void* recvbuf,
const int* recvcounts, Datatype datatype, Op op,
469 MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm);
472 static inline void Waitany(
int nrequests, Request* request,
int* index, Status* status) {
473 AMPI_Waitany(nrequests, request, index, status);
480#define MPI_UNSIGNED_LONG 1
482#define MPI_UNSIGNED_SHORT 3
485#define MPI_ANY_SOURCE 5
494#define MPI_STATUS_IGNORE nullptr
500template <
typename ScalarType>
515 static int Rank, Size;
516 static Comm currentComm;
519 static void CopyData(
const void* sendbuf,
void* recvbuf,
int size,
Datatype datatype,
int recvshift = 0,
522 static void Error(
const std::string& ErrorMsg,
const std::string& FunctionName);
528 static inline void SetComm(
Comm newComm) { currentComm = newComm; }
532 static inline void Init(
int* argc,
char*** argv) {}
534 static inline void Init_thread(
int* argc,
char*** argv,
int required,
int* provided) { *provided = required; }
538 static inline void Abort(
Comm comm,
int error) { exit(EXIT_FAILURE); }
546 static inline void Isend(
const void* buf,
int count,
Datatype datatype,
int dest,
int tag,
Comm comm,
559 static inline void Send(
const void* buf,
int count,
Datatype datatype,
int dest,
int tag,
Comm comm) {}
565 static inline void Reduce(
const void* sendbuf,
void* recvbuf,
int count,
Datatype datatype,
Op op,
int root,
567 CopyData(sendbuf, recvbuf, count, datatype);
571 CopyData(sendbuf, recvbuf, count, datatype);
574 static inline void Gather(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
576 CopyData(sendbuf, recvbuf, sendcnt, sendtype);
579 static inline void Scatter(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
581 CopyData(sendbuf, recvbuf, sendcnt, sendtype);
584 static inline void Allgatherv(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
const int* recvcnt,
586 CopyData(sendbuf, recvbuf, sendcnt, sendtype, displs[0]);
589 static inline void Allgather(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
void* recvbuf,
int recvcnt,
591 CopyData(sendbuf, recvbuf, sendcnt, sendtype);
594 static inline void Sendrecv(
const void* sendbuf,
int sendcnt,
Datatype sendtype,
int dest,
int sendtag,
void* recvbuf,
596 CopyData(sendbuf, recvbuf, sendcnt, sendtype);
601 CopyData(sendbuf, recvbuf, recvcounts[0], datatype);
604 static inline void Alltoall(
const void* sendbuf,
int sendcount,
Datatype sendtype,
void* recvbuf,
int recvcount,
606 CopyData(sendbuf, recvbuf, recvcount, sendtype);
609 static inline void Alltoallv(
const void* sendbuf,
const int* sendcounts,
const int* sdispls,
Datatype sendtype,
610 void* recvbuf,
const int* recvcounts,
const int* recvdispls,
Datatype recvtype,
612 CopyData(sendbuf, recvbuf, recvcounts[0], recvtype, recvdispls[0], sdispls[0]);
631#if defined CODI_REVERSE_TYPE
643#if defined(USE_MIXED_PRECISION) && !defined(USE_SINGLE_PRECISION)
Definition mpi_structure.hpp:501
static void Probe(int source, int tag, Comm comm, Status *status)
Definition mpi_structure.hpp:615
static void Allgatherv(const void *sendbuf, int sendcnt, Datatype sendtype, void *recvbuf, const int *recvcnt, const int *displs, Datatype recvtype, Comm comm)
Definition mpi_structure.hpp:584
static void Sendrecv(const void *sendbuf, int sendcnt, Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcnt, Datatype recvtype, int source, int recvtag, Comm comm, Status *status)
Definition mpi_structure.hpp:594
static void Init_thread(int *argc, char ***argv, int required, int *provided)
Definition mpi_structure.hpp:534
static int GetRank()
Definition mpi_structure.hpp:524
static void Send(const void *buf, int count, Datatype datatype, int dest, int tag, Comm comm)
Definition mpi_structure.hpp:559
static void Comm_size(Comm comm, int *size)
Definition mpi_structure.hpp:542
int Op
Definition mpi_structure.hpp:506
static void Reduce(const void *sendbuf, void *recvbuf, int count, Datatype datatype, Op op, int root, Comm comm)
Definition mpi_structure.hpp:565
static Comm GetComm()
Definition mpi_structure.hpp:530
static void Allreduce(const void *sendbuf, void *recvbuf, int count, Datatype datatype, Op op, Comm comm)
Definition mpi_structure.hpp:570
static void Finalize()
Definition mpi_structure.hpp:544
int Datatype
Definition mpi_structure.hpp:504
static void Bcast(void *buf, int count, Datatype datatype, int root, Comm comm)
Definition mpi_structure.hpp:563
int Request
Definition mpi_structure.hpp:505
static void SetComm(Comm newComm)
Definition mpi_structure.hpp:528
static void Abort(Comm comm, int error)
Definition mpi_structure.hpp:538
static void Error(const std::string &ErrorMsg, const std::string &FunctionName)
Definition mpi_structure.cpp:131
static void Init(int *argc, char ***argv)
Definition mpi_structure.hpp:532
int Comm
Definition mpi_structure.hpp:503
static void Irecv(void *buf, int count, Datatype datatype, int source, int tag, Comm comm, Request *request)
Definition mpi_structure.hpp:549
static void Wait(Request *request, Status *status)
Definition mpi_structure.hpp:551
static int Request_free(Request *request)
Definition mpi_structure.hpp:553
static void Comm_rank(Comm comm, int *rank)
Definition mpi_structure.hpp:540
static int GetSize()
Definition mpi_structure.hpp:526
static void Gather(const void *sendbuf, int sendcnt, Datatype sendtype, void *recvbuf, int recvcnt, Datatype recvtype, int root, Comm comm)
Definition mpi_structure.hpp:574
static void Alltoall(const void *sendbuf, int sendcount, Datatype sendtype, void *recvbuf, int recvcount, Datatype recvtype, Comm comm)
Definition mpi_structure.hpp:604
static void Waitall(int nrequests, Request *request, Status *status)
Definition mpi_structure.hpp:555
static passivedouble Wtime(void)
Definition mpi_structure.hpp:617
static void Isend(const void *buf, int count, Datatype datatype, int dest, int tag, Comm comm, Request *request)
Definition mpi_structure.hpp:546
static void Recv(void *buf, int count, Datatype datatype, int dest, int tag, Comm comm, Status *status)
Definition mpi_structure.hpp:561
static void Scatter(const void *sendbuf, int sendcnt, Datatype sendtype, void *recvbuf, int recvcnt, Datatype recvtype, int root, Comm comm)
Definition mpi_structure.hpp:579
static void Waitany(int nrequests, Request *request, int *index, Status *status)
Definition mpi_structure.hpp:557
static void CopyData(const void *sendbuf, void *recvbuf, int size, Datatype datatype, int recvshift=0, int sendshift=0)
Definition mpi_structure.cpp:144
static void Barrier(Comm comm)
Definition mpi_structure.hpp:536
static void Reduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcounts, Datatype datatype, Op op, Comm comm)
Definition mpi_structure.hpp:599
static void Allgather(const void *sendbuf, int sendcnt, Datatype sendtype, void *recvbuf, int recvcnt, Datatype recvtype, Comm comm)
Definition mpi_structure.hpp:589
static void Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls, Datatype sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, Datatype recvtype, Comm comm)
Definition mpi_structure.hpp:609
double passivedouble
Definition code_config.hpp:129
passivedouble su2mixedfloat
Definition code_config.hpp:189
#define MPI_PROD
Definition mpi_structure.hpp:492
#define MPI_INT
Definition mpi_structure.hpp:491
int SU2_Comm
Definition mpi_structure.hpp:619
#define MPI_MAX
Definition mpi_structure.hpp:490
#define CURRENT_FUNCTION
Definition mpi_structure.hpp:59
#define MPI_UNSIGNED_LONG
Definition mpi_structure.hpp:480
#define MPI_SHORT
Definition mpi_structure.hpp:488
#define MPI_SUM
Definition mpi_structure.hpp:486
#define MPI_MIN
Definition mpi_structure.hpp:489
CBaseMPIWrapper< su2double > SU2_MPI
Definition mpi_structure.hpp:620
#define MPI_DOUBLE
Definition mpi_structure.hpp:484
#define MPI_LONG
Definition mpi_structure.hpp:481
#define MPI_CHAR
Definition mpi_structure.hpp:487
#define MPI_UNSIGNED_SHORT
Definition mpi_structure.hpp:482
#define MPI_BOR
Definition mpi_structure.hpp:493
OpenMP interface header, provides compatibility functions if the code is built without OpenMP support...
passivedouble omp_get_wtime()
Return the wall time.
Definition omp_structure.hpp:95
Definition mpi_structure.hpp:508
int MPI_TAG
Definition mpi_structure.hpp:509
int MPI_SOURCE
Definition mpi_structure.hpp:510
Status()
Definition mpi_structure.hpp:511
Definition mpi_structure.hpp:626
SU2_MPI W
Definition mpi_structure.hpp:627