Epetra Development
Epetra_MpiDistributor Class Reference

MPI implementation of Epetra_Distributor. More...

#include <Epetra_MpiDistributor.h>

Inheritance diagram for Epetra_MpiDistributor:
Inheritance graph
[legend]
Collaboration diagram for Epetra_MpiDistributor:
Collaboration graph
[legend]

List of all members.

Public Member Functions

Constructors/Destructor
 Epetra_MpiDistributor (const Epetra_MpiComm &Comm)
 Default constructor.
 Epetra_MpiDistributor (const Epetra_MpiDistributor &Distributor)
 Copy constructor.
Epetra_DistributorClone ()
 Clone method.
Epetra_DistributorReverseClone ()
 Create and extract the reverse version of the distributor.
virtual ~Epetra_MpiDistributor ()
 Destructor (declared virtual for memory safety).
Gather/Scatter Constructors
int CreateFromSends (const int &NumExportIDs, const int *ExportPIDs, bool Deterministic, int &NumRemoteIDs)
 Create a communication plan from send list.
int CreateFromRecvs (const int &NumRemoteIDs, const int *RemoteGIDs, const int *RemotePIDs, bool Deterministic, int &NumExportIDs, int *&ExportGIDs, int *&ExportPIDs)
 Create a communication plan from receive list.
int CreateFromRecvs (const int &NumRemoteIDs, const long long *RemoteGIDs, const int *RemotePIDs, bool Deterministic, int &NumExportIDs, long long *&ExportGIDs, int *&ExportPIDs)
int CreateFromSendsAndRecvs (const int &NumExportIDs, const int *ExportPIDs, const int &NumRemoteIDs, const int *RemoteGIDs, const int *RemotePIDs, bool Deterministic)
 Create a communication plan from send list and a recv list.
int CreateFromSendsAndRecvs (const int &NumExportIDs, const int *ExportPIDs, const int &NumRemoteIDs, const long long *RemoteGIDs, const int *RemotePIDs, bool Deterministic)
Execute Gather/Scatter Operations
int Do (char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 Execute plan on buffer of export objects in a single step.
int DoReverse (char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 Execute reverse of plan on buffer of export objects in a single step.
int DoPosts (char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 Post buffer of export objects (can do other local work before executing Waits)
int DoWaits ()
 Wait on a set of posts.
int DoReversePosts (char *export_objs, int obj_size, int &len_import_objs, char *&import_objs)
 Do reverse post of buffer of export objects (can do other local work before executing Waits)
int DoReverseWaits ()
 Wait on a reverse set of posts.
Execute Gather/Scatter Operations (Non-constant size objects)
int Do (char *export_objs, int obj_size, int *&sizes, int &len_import_objs, char *&import_objs)
 Execute plan on buffer of export objects in a single step (object size may vary)
int DoReverse (char *export_objs, int obj_size, int *&sizes, int &len_import_objs, char *&import_objs)
 Execute reverse of plan on buffer of export objects in a single step (object size may vary)
int DoPosts (char *export_objs, int obj_size, int *&sizes, int &len_import_objs, char *&import_objs)
 Post buffer of export objects (can do other local work before executing Waits)
int DoReversePosts (char *export_objs, int obj_size, int *&sizes, int &len_import_objs, char *&import_objs)
 Do reverse post of buffer of export objects (can do other local work before executing Waits)
Attribute Accessor Methods
int NumReceives () const
 The number of procs from which we will receive data.
int NumSends () const
 The number of procs to which we will send data.
int MaxSendLength () const
 Maximum number of values that this proc is sending to another single proc.
int TotalReceiveLength () const
 Total number of values that this proc is receiving from other procs.
const int * ProcsFrom () const
 A list of procs sending values to this proc.
const int * ProcsTo () const
 A list of procs to which this proc is sending values.
const int * LengthsFrom () const
 Number of values we're receiving from each proc.
const int * LengthsTo () const
 Number of values we're sending to each proc.
Print object to an output stream
void Print (std::ostream &os) const

Detailed Description

MPI implementation of Epetra_Distributor.

This class is an MPI implementation of Epetra_Distributor. It encapsulates the general information and services needed for other Epetra classes to perform gather/scatter operations on a parallel computer. An Epetra_MpiDistributor instance is actually produced by calling a method in the Epetra_MpiComm class.


Member Function Documentation

int Epetra_MpiDistributor::CreateFromRecvs ( const int &  NumRemoteIDs,
const int *  RemoteGIDs,
const int *  RemotePIDs,
bool  Deterministic,
int &  NumExportIDs,
int *&  ExportGIDs,
int *&  ExportPIDs 
) [virtual]

Create a communication plan from receive list.

Given a list of remote data IDs and corresponding process IDs from which to receive data, construct a communication plan for efficiently scattering data to these processes.

Returns:
The number and list of data IDs being sent by me.
Parameters:
NumRemoteIDs[in] Number of data IDs the calling process will be receiving.
RemoteGIDs[in] List of data IDs that the calling process wants to receive.
RemotePIDs[in] List of IDs of the processes that will send the remote data IDs to the calling process.
Deterministic[in] Currently has no effect.
NumExportIDs[out] Number of data IDs that need to be sent from the calling process.
ExportGIDs[out] List of data IDs that the calling process will send out.
ExportPIDs[out] List of IDs of the processes that will receive the data IDs sent by the calling process.
Note:
This method allocates the output arrays using new. The caller is responsible for deallocating them after use.

Implements Epetra_Distributor.

int Epetra_MpiDistributor::CreateFromSends ( const int &  NumExportIDs,
const int *  ExportPIDs,
bool  Deterministic,
int &  NumRemoteIDs 
) [virtual]

Create a communication plan from send list.

Given a list of process IDs to which to send the given number of data IDs, construct a communication plan for efficiently scattering data to these processes.

Returns:
The number of data IDs being sent to me.
Parameters:
NumExportIDs[in] Number of data IDs that need to be sent from the calling process.
ExportPIDs[in] List of process IDs that will get the exported data IDs.
Deterministic[in] Currently has no effect.
NumRemoteIDs[out] Number of data IDs the calling process will be receiving.

Implements Epetra_Distributor.

int Epetra_MpiDistributor::CreateFromSendsAndRecvs ( const int &  NumExportIDs,
const int *  ExportPIDs,
const int &  NumRemoteIDs,
const int *  RemoteGIDs,
const int *  RemotePIDs,
bool  Deterministic 
)

Create a communication plan from send list and a recv list.

Given a list of process IDs to which to send the given number of data IDs, and a list of remote data IDs and corresponding process IDs from which to receive data, construct a communication plan for efficiently scattering data to these processes.

Needless to say, knowing both of these at the same time is a pretty rare occurance. But if it happens, this routine will avoid a lot of communication that CreateFromSends or CreateFromRecvs would have to do.

Returns:
zero if this worked.
Parameters:
NumExportIDs[in] Number of data IDs that need to be sent from the calling process.
ExportPIDs[in] List of process IDs that will get the exported data IDs.
NumRemoteIDs[in] Number of data IDs the calling process will be receiving.
RemoteGIDs[in] List of data IDs that the calling process wants to receive.
RemotePIDs[in] List of IDs of the processes that will send the remote data IDs to the calling process.
Deterministic[in] Currently has no effect.
const int* Epetra_MpiDistributor::LengthsFrom ( ) const [inline]

Number of values we're receiving from each proc.

We will receive LengthsFrom[i] values from proc ProcsFrom[i].

const int* Epetra_MpiDistributor::LengthsTo ( ) const [inline]

Number of values we're sending to each proc.

We will send LengthsTo[i] values to procs ProcsTo[i].

Epetra_Distributor* Epetra_MpiDistributor::ReverseClone ( ) [virtual]

Create and extract the reverse version of the distributor.

This is not a const method since a reverse distributor might need to be created. This works like Clone, returning a new object the user must deallocate.

Implements Epetra_Distributor.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Enumerations Enumerator