Nektar++
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Nektar::LibUtilities::Comm Class Referenceabstract

Base communications class. More...

#include <Comm.h>

Inheritance diagram for Nektar::LibUtilities::Comm:
[legend]

Public Member Functions

 Comm (int narg, char *arg[])
 
virtual ~Comm ()
 
void Finalise ()
 
int GetSize () const
 Returns number of processes.
 
int GetRank ()
 
const std::string & GetType () const
 
bool TreatAsRankZero ()
 
bool IsSerial ()
 
bool IsParallelInTime ()
 
std::tuple< int, int, int > GetVersion ()
 
void Block ()
 Block execution until all processes reach this point.
 
NekDouble Wtime ()
 Return the time in seconds.
 
template<class T >
void Send (int pProc, T &pData)
 
template<class T >
void Recv (int pProc, T &pData)
 
template<class T >
void SendRecv (int pSendProc, T &pSendData, int pRecvProc, T &pRecvData)
 
template<class T >
void AllReduce (T &pData, enum ReduceOperator pOp)
 
template<class T >
void AlltoAll (T &pSendData, T &pRecvData)
 
template<class T1 , class T2 >
void AlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap)
 
template<class T >
void AllGather (T &pSendData, T &pRecvData)
 
template<class T >
void AllGatherv (T &pSendData, T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap)
 
template<class T >
void AllGatherv (T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap)
 
template<class T >
void Bcast (T &pData, int pRoot)
 
template<class T >
Gather (int rootProc, T &val)
 
template<class T >
Scatter (int rootProc, T &pData)
 
template<class T >
void DistGraphCreateAdjacent (T &sources, T &sourceweights, int reorder)
 
template<class T1 , class T2 >
void NeighborAlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap)
 
template<class T >
void Irsend (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void Isend (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void SendInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void Irecv (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
template<class T >
void RecvInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc)
 
void StartAll (const CommRequestSharedPtr &request)
 
void WaitAll (const CommRequestSharedPtr &request)
 
CommRequestSharedPtr CreateRequest (int num)
 
CommSharedPtr CommCreateIf (int flag)
 If the flag is non-zero create a new communicator.
 
void SplitComm (int pRows, int pColumns, int pTime=0)
 Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row.
 
CommSharedPtr GetRowComm ()
 Retrieve the row communicator to which this process belongs.
 
CommSharedPtr GetColumnComm ()
 Retrieve the column communicator to which this process belongs.
 
CommSharedPtr GetTimeComm ()
 Retrieve the time communicator to which this process belongs.
 
CommSharedPtr GetSpaceComm ()
 Retrieve the space communicator to which this process belongs.
 
bool RemoveExistingFiles ()
 
std::pair< CommSharedPtr, CommSharedPtrSplitCommNode ()
 

Protected Member Functions

 Comm ()
 
virtual void v_Finalise ()=0
 
virtual int v_GetRank ()=0
 
virtual bool v_TreatAsRankZero ()=0
 
virtual bool v_IsSerial ()=0
 
virtual std::tuple< int, int, int > v_GetVersion ()=0
 
virtual void v_Block ()=0
 
virtual NekDouble v_Wtime ()=0
 
virtual void v_Send (const void *buf, int count, CommDataType dt, int dest)=0
 
virtual void v_Recv (void *buf, int count, CommDataType dt, int source)=0
 
virtual void v_SendRecv (const void *sendbuf, int sendcount, CommDataType sendtype, int dest, void *recvbuf, int recvcount, CommDataType recvtype, int source)=0
 
virtual void v_AllReduce (void *buf, int count, CommDataType dt, enum ReduceOperator pOp)=0
 
virtual void v_AlltoAll (const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0
 
virtual void v_AlltoAllv (const void *sendbuf, const int *sendcounts, const int *senddispls, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0
 
virtual void v_AllGather (const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0
 
virtual void v_AllGatherv (const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0
 
virtual void v_AllGatherv (void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0
 
virtual void v_Bcast (void *buffer, int count, CommDataType dt, int root)=0
 
virtual void v_Gather (const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0
 
virtual void v_Scatter (const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0
 
virtual void v_DistGraphCreateAdjacent (int indegree, const int *sources, const int *sourceweights, int reorder)=0
 
virtual void v_NeighborAlltoAllv (const void *sendbuf, const int *sendcounts, const int *senddispls, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0
 
virtual void v_Irsend (const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0
 
virtual void v_Isend (const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0
 
virtual void v_SendInit (const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0
 
virtual void v_Irecv (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0
 
virtual void v_RecvInit (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0
 
virtual void v_StartAll (CommRequestSharedPtr request)=0
 
virtual void v_WaitAll (CommRequestSharedPtr request)=0
 
virtual CommRequestSharedPtr v_CreateRequest (int num)=0
 
virtual void v_SplitComm (int pRows, int pColumns, int pTime)=0
 
virtual CommSharedPtr v_CommCreateIf (int flag)=0
 
virtual std::pair< CommSharedPtr, CommSharedPtrv_SplitCommNode ()
 

Protected Attributes

int m_size
 Number of processes.
 
std::string m_type
 Type of communication.
 
CommSharedPtr m_commRow
 Row communicator.
 
CommSharedPtr m_commColumn
 Column communicator.
 
CommSharedPtr m_commTime
 
CommSharedPtr m_commSpace
 

Detailed Description

Base communications class.

Definition at line 87 of file Comm.h.

Constructor & Destructor Documentation

◆ Comm() [1/2]

Nektar::LibUtilities::Comm::Comm ( int  narg,
char *  arg[] 
)

Definition at line 39 of file Communication/Comm.cpp.

40{
41}

◆ ~Comm()

Nektar::LibUtilities::Comm::~Comm ( )
virtual

Definition at line 53 of file Communication/Comm.cpp.

54{
55}

◆ Comm() [2/2]

Nektar::LibUtilities::Comm::Comm ( )
protected

Definition at line 46 of file Communication/Comm.cpp.

47{
48}

Member Function Documentation

◆ AllGather()

template<class T >
void Nektar::LibUtilities::Comm::AllGather ( T &  pSendData,
T &  pRecvData 
)

Definition at line 430 of file Comm.h.

431{
432 BOOST_STATIC_ASSERT_MSG(
434 "AllGather only valid with Array or vector arguments.");
435
436 int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
437 int recvSize = sendSize;
438
439 pRecvData = T(recvSize * GetSize());
440
443 CommDataTypeTraits<T>::GetPointer(pRecvData), recvSize,
445}
int GetSize() const
Returns number of processes.
Definition Comm.h:269
virtual void v_AllGather(const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AllGather().

◆ AllGatherv() [1/2]

template<class T >
void Nektar::LibUtilities::Comm::AllGatherv ( T &  pRecvData,
Array< OneD, int > &  pRecvDataSizeMap,
Array< OneD, int > &  pRecvDataOffsetMap 
)

Definition at line 472 of file Comm.h.

474{
475 BOOST_STATIC_ASSERT_MSG(
477 "AllGatherv only valid with Array or vector arguments.");
478
480 pRecvDataSizeMap.data(), pRecvDataOffsetMap.data(),
482}
virtual void v_AllGatherv(const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0

References v_AllGatherv().

◆ AllGatherv() [2/2]

template<class T >
void Nektar::LibUtilities::Comm::AllGatherv ( T &  pSendData,
T &  pRecvData,
Array< OneD, int > &  pRecvDataSizeMap,
Array< OneD, int > &  pRecvDataOffsetMap 
)

Definition at line 451 of file Comm.h.

454{
455 BOOST_STATIC_ASSERT_MSG(
457 "AllGatherv only valid with Array or vector arguments.");
458
459 int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
460
464 pRecvDataSizeMap.data(), pRecvDataOffsetMap.data(),
466}

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_AllGatherv().

◆ AllReduce()

template<class T >
void Nektar::LibUtilities::Comm::AllReduce ( T &  pData,
enum ReduceOperator  pOp 
)

Definition at line 375 of file Comm.h.

376{
380}
virtual void v_AllReduce(void *buf, int count, CommDataType dt, enum ReduceOperator pOp)=0

References v_AllReduce().

◆ AlltoAll()

template<class T >
void Nektar::LibUtilities::Comm::AlltoAll ( T &  pSendData,
T &  pRecvData 
)

Definition at line 385 of file Comm.h.

386{
388 "AlltoAll only valid with Array or vector arguments.");
389 int sendSize = CommDataTypeTraits<T>::GetCount(pSendData);
390 int recvSize = CommDataTypeTraits<T>::GetCount(pRecvData);
391 ASSERTL0(sendSize == recvSize,
392 "Send and Recv arrays have incompatible sizes in AlltoAll");
393
394 int count = sendSize / GetSize();
395 ASSERTL0(count * GetSize() == sendSize,
396 "Array size incompatible with size of communicator");
397
400 CommDataTypeTraits<T>::GetPointer(pRecvData), count,
402}
#define ASSERTL0(condition, msg)
virtual void v_AlltoAll(const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0

References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AlltoAll().

◆ AlltoAllv()

template<class T1 , class T2 >
void Nektar::LibUtilities::Comm::AlltoAllv ( T1 &  pSendData,
T2 &  pSendDataSizeMap,
T2 &  pSendDataOffsetMap,
T1 &  pRecvData,
T2 &  pRecvDataSizeMap,
T2 &  pRecvDataOffsetMap 
)

Definition at line 408 of file Comm.h.

411{
413 "AlltoAllv only valid with Array or vector arguments.");
414 static_assert(std::is_same_v<T2, std::vector<int>> ||
415 std::is_same_v<T2, Array<OneD, int>>,
416 "Alltoallv size and offset maps should be integer vectors.");
418 (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataSizeMap),
419 (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataOffsetMap),
422 (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataSizeMap),
423 (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataOffsetMap),
425}
virtual void v_AlltoAllv(const void *sendbuf, const int *sendcounts, const int *senddispls, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0

References v_AlltoAllv().

◆ Bcast()

template<class T >
void Nektar::LibUtilities::Comm::Bcast ( T &  pData,
int  pRoot 
)

Definition at line 487 of file Comm.h.

488{
492}
virtual void v_Bcast(void *buffer, int count, CommDataType dt, int root)=0

References v_Bcast().

◆ Block()

void Nektar::LibUtilities::Comm::Block ( )
inline

Block execution until all processes reach this point.

Definition at line 325 of file Comm.h.

326{
327 v_Block();
328}
virtual void v_Block()=0

References v_Block().

◆ CommCreateIf()

CommSharedPtr Nektar::LibUtilities::Comm::CommCreateIf ( int  flag)
inline

If the flag is non-zero create a new communicator.

Definition at line 728 of file Comm.h.

729{
730 return v_CommCreateIf(flag);
731}
virtual CommSharedPtr v_CommCreateIf(int flag)=0

References v_CommCreateIf().

◆ CreateRequest()

CommRequestSharedPtr Nektar::LibUtilities::Comm::CreateRequest ( int  num)
inline

Creates a number of CommRequests.

Parameters
numNumber of requests to generate in the communication request object
Returns
Communication request object

Definition at line 720 of file Comm.h.

721{
722 return v_CreateRequest(num);
723}
virtual CommRequestSharedPtr v_CreateRequest(int num)=0

References v_CreateRequest().

◆ DistGraphCreateAdjacent()

template<class T >
void Nektar::LibUtilities::Comm::DistGraphCreateAdjacent ( T &  sources,
T &  sourceweights,
int  reorder 
)

This replaces the current MPI communicator with a new one that also holds the distributed graph topology information. If reordering is enabled using this might break code where process/rank numbers are assumed to remain constant. This also assumes that the graph is bi-directional, so all sources are also destinations with equal weighting.

Parameters
sourcesRanks of processes for which the calling process is the destination/source
sourceweightsWeights of the corresponding edges into the calling process
reorderRanks may be reordered (true) or not (false)

Definition at line 550 of file Comm.h.

551{
552 static_assert(
554 "DistGraphCreateAdjacent only valid with Array or vector arguments.");
555
557 CommDataTypeTraits<T>::GetCount(sourceweights),
558 "Sources and weights array sizes don't match");
559
560 int indegree = CommDataTypeTraits<T>::GetCount(sources);
561
563 indegree, (const int *)CommDataTypeTraits<T>::GetPointer(sources),
564 (const int *)CommDataTypeTraits<T>::GetPointer(sourceweights), reorder);
565}
virtual void v_DistGraphCreateAdjacent(int indegree, const int *sources, const int *sourceweights, int reorder)=0

References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_DistGraphCreateAdjacent().

◆ Finalise()

void Nektar::LibUtilities::Comm::Finalise ( )
inline

Definition at line 261 of file Comm.h.

262{
263 v_Finalise();
264}
virtual void v_Finalise()=0

References v_Finalise().

◆ Gather()

template<class T >
T Nektar::LibUtilities::Comm::Gather ( int  rootProc,
T &  val 
)

Concatenate all the input arrays, in rank order, onto the process with rank == rootProc

Definition at line 498 of file Comm.h.

499{
501 "Gather only valid with Array or vector arguments.");
502 bool amRoot = (GetRank() == rootProc);
503 unsigned nEl = CommDataTypeTraits<T>::GetCount(val);
504
505 unsigned nOut = amRoot ? GetSize() * nEl : 0;
506 T ans(nOut);
507 void *recvbuf = amRoot ? CommDataTypeTraits<T>::GetPointer(ans) : nullptr;
508
512 return ans;
513}
virtual void v_Gather(const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Gather().

◆ GetColumnComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetColumnComm ( )
inline

Retrieve the column communicator to which this process belongs.

Definition at line 762 of file Comm.h.

763{
764 if (!m_commColumn.get())
765 {
766 return shared_from_this();
767 }
768 else
769 {
770 return m_commColumn;
771 }
772}
CommSharedPtr m_commColumn
Column communicator.
Definition Comm.h:178

References m_commColumn.

◆ GetRank()

int Nektar::LibUtilities::Comm::GetRank ( )
inline

Definition at line 277 of file Comm.h.

278{
279 return v_GetRank();
280}
virtual int v_GetRank()=0

References v_GetRank().

Referenced by export_Comm(), Gather(), and Scatter().

◆ GetRowComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetRowComm ( )
inline

Retrieve the row communicator to which this process belongs.

Definition at line 746 of file Comm.h.

747{
748 if (!m_commRow.get())
749 {
750 return shared_from_this();
751 }
752 else
753 {
754 return m_commRow;
755 }
756}
CommSharedPtr m_commRow
Row communicator.
Definition Comm.h:177

References m_commRow.

◆ GetSize()

int Nektar::LibUtilities::Comm::GetSize ( ) const
inline

Returns number of processes.

Definition at line 269 of file Comm.h.

270{
271 return m_size;
272}
int m_size
Number of processes.
Definition Comm.h:175

References m_size.

Referenced by AllGather(), AlltoAll(), export_Comm(), Gather(), Scatter(), and Nektar::LibUtilities::CommMpi::v_AllReduce().

◆ GetSpaceComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetSpaceComm ( )
inline

Retrieve the space communicator to which this process belongs.

Definition at line 794 of file Comm.h.

795{
796 if (!m_commSpace.get())
797 {
798 return shared_from_this();
799 }
800 else
801 {
802 return m_commSpace;
803 }
804}
CommSharedPtr m_commSpace
Definition Comm.h:180

References m_commSpace.

◆ GetTimeComm()

CommSharedPtr Nektar::LibUtilities::Comm::GetTimeComm ( )
inline

Retrieve the time communicator to which this process belongs.

Definition at line 778 of file Comm.h.

779{
780 if (!m_commTime.get())
781 {
782 return shared_from_this();
783 }
784 else
785 {
786 return m_commTime;
787 }
788}
CommSharedPtr m_commTime
Definition Comm.h:179

References m_commTime.

◆ GetType()

const std::string & Nektar::LibUtilities::Comm::GetType ( ) const
inline

Definition at line 285 of file Comm.h.

286{
287 return m_type;
288}
std::string m_type
Type of communication.
Definition Comm.h:176

References m_type.

Referenced by export_Comm().

◆ GetVersion()

std::tuple< int, int, int > Nektar::LibUtilities::Comm::GetVersion ( )
inline
Returns
tuple of {major, minor, patch} version numbers

Definition at line 317 of file Comm.h.

318{
319 return v_GetVersion();
320}
virtual std::tuple< int, int, int > v_GetVersion()=0

References v_GetVersion().

◆ Irecv()

template<class T >
void Nektar::LibUtilities::Comm::Irecv ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Begins a nonblocking receive

Parameters
pProcRank of source
pDataArray/vector to place incoming data in to
countNumber of elements to receive in to pData
requestCommunication request object
locLocation in request to use

Definition at line 669 of file Comm.h.

671{
673 CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
674}
virtual void v_Irecv(void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0

References v_Irecv().

◆ Irsend()

template<class T >
void Nektar::LibUtilities::Comm::Irsend ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Starts a ready-mode nonblocking send

Parameters
pProcRank of destination
pDataArray/vector to send
countNumber of elements to send in pData
requestCommunication request object
locLocation in request to use

Definition at line 618 of file Comm.h.

620{
622 CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
623}
virtual void v_Irsend(const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0

References v_Irsend().

◆ Isend()

template<class T >
void Nektar::LibUtilities::Comm::Isend ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Starts a nonblocking send

Parameters
pProcRank of destination
pDataArray/vector to send
countNumber of elements to send in pData
requestCommunication request object
locLocation in request to use

Definition at line 635 of file Comm.h.

637{
639 CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
640}
virtual void v_Isend(const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0

References v_Isend().

◆ IsParallelInTime()

bool Nektar::LibUtilities::Comm::IsParallelInTime ( )
inline

Definition at line 309 of file Comm.h.

310{
311 return m_commTime.get();
312}

References m_commTime.

◆ IsSerial()

bool Nektar::LibUtilities::Comm::IsSerial ( )
inline

Definition at line 301 of file Comm.h.

302{
303 return v_IsSerial();
304}
virtual bool v_IsSerial()=0

References v_IsSerial().

◆ NeighborAlltoAllv()

template<class T1 , class T2 >
void Nektar::LibUtilities::Comm::NeighborAlltoAllv ( T1 &  pSendData,
T2 &  pSendDataSizeMap,
T2 &  pSendDataOffsetMap,
T1 &  pRecvData,
T2 &  pRecvDataSizeMap,
T2 &  pRecvDataOffsetMap 
)

Sends data to neighboring processes in a virtual topology communicator. All processes send different amounts of data to, and receive different amounts of data from, all neighbors

Parameters
pSendDataArray/vector to send to neighbors
pSendDataSizeMapArray/vector where entry i specifies the number of elements to send to neighbor i
pSendDataOffsetMapArray/vector where entry i specifies the displacement (offset from pSendData) from which to send data to neighbor i
pRecvDataArray/vector to place incoming data in to
pRecvDataSizeMapArray/vector where entry i specifies the number of elements to receive from neighbor i
pRecvDataOffsetMapArray/vector where entry i specifies the displacement (offset from pRecvData) from which to receive data from neighbor i

Definition at line 586 of file Comm.h.

589{
590 static_assert(
592 "NeighbourAlltoAllv only valid with Array or vector arguments.");
593 static_assert(
594 std::is_same_v<T2, std::vector<int>> ||
595 std::is_same_v<T2, Array<OneD, int>>,
596 "NeighborAllToAllv size and offset maps should be integer vectors.");
599 (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataSizeMap),
600 (int *)CommDataTypeTraits<T2>::GetPointer(pSendDataOffsetMap),
603 (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataSizeMap),
604 (int *)CommDataTypeTraits<T2>::GetPointer(pRecvDataOffsetMap),
606}
virtual void v_NeighborAlltoAllv(const void *sendbuf, const int *sendcounts, const int *senddispls, CommDataType sendtype, void *recvbuf, const int *recvcounts, const int *recvdispls, CommDataType recvtype)=0

References v_NeighborAlltoAllv().

◆ Recv()

template<class T >
void Nektar::LibUtilities::Comm::Recv ( int  pProc,
T &  pData 
)

Definition at line 351 of file Comm.h.

352{
356}
virtual void v_Recv(void *buf, int count, CommDataType dt, int source)=0

References v_Recv().

◆ RecvInit()

template<class T >
void Nektar::LibUtilities::Comm::RecvInit ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Create a persistent request for a receive

Parameters
pProcRank of source
pDataArray/vector to place incoming data in to
countNumber of elements to receive in to pData
requestCommunication request object
locLocation in request to use

Definition at line 686 of file Comm.h.

688{
690 CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
691}
virtual void v_RecvInit(void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0

References v_RecvInit().

◆ RemoveExistingFiles()

bool Nektar::LibUtilities::Comm::RemoveExistingFiles ( )
inline

Definition at line 809 of file Comm.h.

810{
811 return true;
812}

◆ Scatter()

template<class T >
T Nektar::LibUtilities::Comm::Scatter ( int  rootProc,
T &  pData 
)

Scatter pData across ranks in chunks of len(pData)/num_ranks

Definition at line 518 of file Comm.h.

519{
521 "Scatter only valid with Array or vector arguments.");
522
523 bool amRoot = (GetRank() == rootProc);
524 unsigned nEl = CommDataTypeTraits<T>::GetCount(pData) / GetSize();
525
526 const void *sendbuf =
527 amRoot ? CommDataTypeTraits<T>::GetPointer(pData) : nullptr;
528 T ans(nEl);
529
533 return ans;
534}
virtual void v_Scatter(const void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0

References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Scatter().

◆ Send()

template<class T >
void Nektar::LibUtilities::Comm::Send ( int  pProc,
T &  pData 
)

Definition at line 341 of file Comm.h.

342{
346}
virtual void v_Send(const void *buf, int count, CommDataType dt, int dest)=0

References v_Send().

◆ SendInit()

template<class T >
void Nektar::LibUtilities::Comm::SendInit ( int  pProc,
T &  pData,
int  count,
const CommRequestSharedPtr request,
int  loc 
)

Creates a persistent request for a send

Parameters
pProcRank of destination
pDataArray/vector to send
countNumber of elements to send in pData
requestCommunication request object
locLocation in request to use

Definition at line 652 of file Comm.h.

654{
656 CommDataTypeTraits<T>::GetDataType(), pProc, request, loc);
657}
virtual void v_SendInit(const void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0

References v_SendInit().

◆ SendRecv()

template<class T >
void Nektar::LibUtilities::Comm::SendRecv ( int  pSendProc,
T &  pSendData,
int  pRecvProc,
T &  pRecvData 
)

Definition at line 362 of file Comm.h.

363{
370}
virtual void v_SendRecv(const void *sendbuf, int sendcount, CommDataType sendtype, int dest, void *recvbuf, int recvcount, CommDataType recvtype, int source)=0

References v_SendRecv().

◆ SplitComm()

void Nektar::LibUtilities::Comm::SplitComm ( int  pRows,
int  pColumns,
int  pTime = 0 
)
inline

Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row.

Definition at line 738 of file Comm.h.

739{
740 v_SplitComm(pRows, pColumns, pTime);
741}
virtual void v_SplitComm(int pRows, int pColumns, int pTime)=0

References v_SplitComm().

◆ SplitCommNode()

std::pair< CommSharedPtr, CommSharedPtr > Nektar::LibUtilities::Comm::SplitCommNode ( )
inline

Definition at line 817 of file Comm.h.

818{
819 return v_SplitCommNode();
820}
virtual std::pair< CommSharedPtr, CommSharedPtr > v_SplitCommNode()

References v_SplitCommNode().

◆ StartAll()

void Nektar::LibUtilities::Comm::StartAll ( const CommRequestSharedPtr request)
inline

Starts a collection of persistent requests

Parameters
requestCommunication request object

Definition at line 698 of file Comm.h.

699{
700 v_StartAll(request);
701}
virtual void v_StartAll(CommRequestSharedPtr request)=0

References v_StartAll().

◆ TreatAsRankZero()

bool Nektar::LibUtilities::Comm::TreatAsRankZero ( )
inline

Definition at line 293 of file Comm.h.

294{
295 return v_TreatAsRankZero();
296}
virtual bool v_TreatAsRankZero()=0

References v_TreatAsRankZero().

◆ v_AllGather()

virtual void Nektar::LibUtilities::Comm::v_AllGather ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllGatherv() [1/2]

virtual void Nektar::LibUtilities::Comm::v_AllGatherv ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
const int *  recvcounts,
const int *  recvdispls,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllGatherv() [2/2]

virtual void Nektar::LibUtilities::Comm::v_AllGatherv ( void recvbuf,
const int *  recvcounts,
const int *  recvdispls,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AllReduce()

virtual void Nektar::LibUtilities::Comm::v_AllReduce ( void buf,
int  count,
CommDataType  dt,
enum ReduceOperator  pOp 
)
protectedpure virtual

◆ v_AlltoAll()

virtual void Nektar::LibUtilities::Comm::v_AlltoAll ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_AlltoAllv()

virtual void Nektar::LibUtilities::Comm::v_AlltoAllv ( const void sendbuf,
const int *  sendcounts,
const int *  senddispls,
CommDataType  sendtype,
void recvbuf,
const int *  recvcounts,
const int *  recvdispls,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_Bcast()

virtual void Nektar::LibUtilities::Comm::v_Bcast ( void buffer,
int  count,
CommDataType  dt,
int  root 
)
protectedpure virtual

◆ v_Block()

virtual void Nektar::LibUtilities::Comm::v_Block ( )
protectedpure virtual

◆ v_CommCreateIf()

virtual CommSharedPtr Nektar::LibUtilities::Comm::v_CommCreateIf ( int  flag)
protectedpure virtual

◆ v_CreateRequest()

virtual CommRequestSharedPtr Nektar::LibUtilities::Comm::v_CreateRequest ( int  num)
protectedpure virtual

◆ v_DistGraphCreateAdjacent()

virtual void Nektar::LibUtilities::Comm::v_DistGraphCreateAdjacent ( int  indegree,
const int *  sources,
const int *  sourceweights,
int  reorder 
)
protectedpure virtual

◆ v_Finalise()

virtual void Nektar::LibUtilities::Comm::v_Finalise ( )
protectedpure virtual

◆ v_Gather()

virtual void Nektar::LibUtilities::Comm::v_Gather ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  root 
)
protectedpure virtual

◆ v_GetRank()

virtual int Nektar::LibUtilities::Comm::v_GetRank ( )
protectedpure virtual

◆ v_GetVersion()

virtual std::tuple< int, int, int > Nektar::LibUtilities::Comm::v_GetVersion ( )
protectedpure virtual

◆ v_Irecv()

virtual void Nektar::LibUtilities::Comm::v_Irecv ( void buf,
int  count,
CommDataType  dt,
int  source,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_Irsend()

virtual void Nektar::LibUtilities::Comm::v_Irsend ( const void buf,
int  count,
CommDataType  dt,
int  dest,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_Isend()

virtual void Nektar::LibUtilities::Comm::v_Isend ( const void buf,
int  count,
CommDataType  dt,
int  dest,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_IsSerial()

virtual bool Nektar::LibUtilities::Comm::v_IsSerial ( )
protectedpure virtual

◆ v_NeighborAlltoAllv()

virtual void Nektar::LibUtilities::Comm::v_NeighborAlltoAllv ( const void sendbuf,
const int *  sendcounts,
const int *  senddispls,
CommDataType  sendtype,
void recvbuf,
const int *  recvcounts,
const int *  recvdispls,
CommDataType  recvtype 
)
protectedpure virtual

◆ v_Recv()

virtual void Nektar::LibUtilities::Comm::v_Recv ( void buf,
int  count,
CommDataType  dt,
int  source 
)
protectedpure virtual

◆ v_RecvInit()

virtual void Nektar::LibUtilities::Comm::v_RecvInit ( void buf,
int  count,
CommDataType  dt,
int  source,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_Scatter()

virtual void Nektar::LibUtilities::Comm::v_Scatter ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  root 
)
protectedpure virtual

◆ v_Send()

virtual void Nektar::LibUtilities::Comm::v_Send ( const void buf,
int  count,
CommDataType  dt,
int  dest 
)
protectedpure virtual

◆ v_SendInit()

virtual void Nektar::LibUtilities::Comm::v_SendInit ( const void buf,
int  count,
CommDataType  dt,
int  dest,
CommRequestSharedPtr  request,
int  loc 
)
protectedpure virtual

◆ v_SendRecv()

virtual void Nektar::LibUtilities::Comm::v_SendRecv ( const void sendbuf,
int  sendcount,
CommDataType  sendtype,
int  dest,
void recvbuf,
int  recvcount,
CommDataType  recvtype,
int  source 
)
protectedpure virtual

◆ v_SplitComm()

virtual void Nektar::LibUtilities::Comm::v_SplitComm ( int  pRows,
int  pColumns,
int  pTime 
)
protectedpure virtual

◆ v_SplitCommNode()

std::pair< CommSharedPtr, CommSharedPtr > Nektar::LibUtilities::Comm::v_SplitCommNode ( )
protectedvirtual

Reimplemented in Nektar::LibUtilities::CommMpi.

Definition at line 69 of file Communication/Comm.cpp.

70{
71 return std::make_pair(CommSharedPtr(), CommSharedPtr());
72}
std::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition Comm.h:55

Referenced by SplitCommNode().

◆ v_StartAll()

virtual void Nektar::LibUtilities::Comm::v_StartAll ( CommRequestSharedPtr  request)
protectedpure virtual

◆ v_TreatAsRankZero()

virtual bool Nektar::LibUtilities::Comm::v_TreatAsRankZero ( )
protectedpure virtual

◆ v_WaitAll()

virtual void Nektar::LibUtilities::Comm::v_WaitAll ( CommRequestSharedPtr  request)
protectedpure virtual

◆ v_Wtime()

virtual NekDouble Nektar::LibUtilities::Comm::v_Wtime ( )
protectedpure virtual

◆ WaitAll()

void Nektar::LibUtilities::Comm::WaitAll ( const CommRequestSharedPtr request)
inline

Waits for all CommRequests in the request object to complete.

Parameters
requestCommunication request object

Definition at line 708 of file Comm.h.

709{
710 v_WaitAll(request);
711}
virtual void v_WaitAll(CommRequestSharedPtr request)=0

References v_WaitAll().

◆ Wtime()

double Nektar::LibUtilities::Comm::Wtime ( )
inline

Return the time in seconds.

Definition at line 333 of file Comm.h.

334{
335 return v_Wtime();
336}
virtual NekDouble v_Wtime()=0

References v_Wtime().

Member Data Documentation

◆ m_commColumn

CommSharedPtr Nektar::LibUtilities::Comm::m_commColumn
protected

◆ m_commRow

CommSharedPtr Nektar::LibUtilities::Comm::m_commRow
protected

◆ m_commSpace

CommSharedPtr Nektar::LibUtilities::Comm::m_commSpace
protected

Definition at line 180 of file Comm.h.

Referenced by GetSpaceComm(), and Nektar::LibUtilities::CommMpi::v_SplitComm().

◆ m_commTime

CommSharedPtr Nektar::LibUtilities::Comm::m_commTime
protected

◆ m_size

int Nektar::LibUtilities::Comm::m_size
protected

◆ m_type

std::string Nektar::LibUtilities::Comm::m_type
protected