37#ifndef vtkMPIController_h 
   38#define vtkMPIController_h 
   41#include "vtkParallelMPIModule.h"  
   47VTK_ABI_NAMESPACE_BEGIN
 
   72    int* vtkNotUsed(argc), 
char*** vtkNotUsed(argv), 
int initializedExternally) 
override;
 
   86  void Finalize(
int finalizedExternally) 
override;
 
  143      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  145  int NoBlockSend(
const unsigned long* data, 
int length, 
int remoteProcessId, 
int tag,
 
  149      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  155      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  157  int NoBlockSend(
const unsigned char* data, 
int length, 
int remoteProcessId, 
int tag,
 
  161      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  167      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  173      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  175  int NoBlockSend(
const vtkTypeInt64* data, 
int length, 
int remoteProcessId, 
int tag,
 
  179      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  181  int NoBlockSend(
const int* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  185      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  187  int NoBlockSend(
const unsigned long* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  191      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  193  int NoBlockSend(
const char* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  197      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  199  int NoBlockSend(
const unsigned char* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  203      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  205  int NoBlockSend(
const float* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  209      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  211  int NoBlockSend(
const double* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  215      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  217  int NoBlockSend(
const vtkTypeInt64* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  221      ->NoBlockSend(data, length, remoteProcessId, tag, req);
 
  228  int NoBlockSend(
const void* data, vtkTypeInt64 length, MPI_Datatype mpiType, 
int remoteProcessId,
 
  232      ->NoBlockSend(data, length, mpiType, remoteProcessId, tag, req);
 
  248      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  254      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  260      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  266      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  272      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  278      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  284      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  290      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  292  int NoBlockReceive(
unsigned long* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  296      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  302      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  304  int NoBlockReceive(
unsigned char* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  308      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  310  int NoBlockReceive(
float* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  314      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  316  int NoBlockReceive(
double* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  320      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  322  int NoBlockReceive(vtkTypeInt64* data, vtkTypeInt64 length, 
int remoteProcessId, 
int tag,
 
  326      ->NoBlockReceive(data, length, remoteProcessId, tag, req);
 
  345  int Iprobe(
int source, 
int tag, 
int* flag, 
int* actualSource, 
int* type, 
int* size)
 
  348      ->Iprobe(
source, tag, flag, actualSource, type, size);
 
  350  int Iprobe(
int source, 
int tag, 
int* flag, 
int* actualSource, 
unsigned long* type, 
int* size)
 
  353      ->Iprobe(
source, tag, flag, actualSource, type, size);
 
  355  int Iprobe(
int source, 
int tag, 
int* flag, 
int* actualSource, 
const char* type, 
int* size)
 
  358      ->Iprobe(
source, tag, flag, actualSource, type, size);
 
  360  int Iprobe(
int source, 
int tag, 
int* flag, 
int* actualSource, 
float* type, 
int* size)
 
  363      ->Iprobe(
source, tag, flag, actualSource, type, size);
 
  365  int Iprobe(
int source, 
int tag, 
int* flag, 
int* actualSource, 
double* type, 
int* size)
 
  368      ->Iprobe(
source, tag, flag, actualSource, type, size);
 
  391  int Probe(
int source, 
int tag, 
int* actualSource, 
int* type, 
int* size)
 
  395  int Probe(
int source, 
int tag, 
int* actualSource, 
unsigned long* type, 
int* size)
 
  399  int Probe(
int source, 
int tag, 
int* actualSource, 
const char* type, 
int* size)
 
  403  int Probe(
int source, 
int tag, 
int* actualSource, 
float* type, 
int* size)
 
  407  int Probe(
int source, 
int tag, 
int* actualSource, 
double* type, 
int* size)
 
  493    int remoteProcessId, 
void* arg, 
int argLength, 
int rmiTag, 
bool propagate) 
override;
 
  502  friend class vtkMPIOutputWindow;
 
  507  static char ProcessorName[];
 
a simple class to control print indentation
 
dynamic, self-adjusting array of int
 
Class for creating user defined MPI communicators.
 
Process communication using MPI.
 
int Iprobe(int source, int tag, int *flag, int *actualSource, int *type, int *size)
Nonblocking test for a message.
 
int Probe(int source, int tag, int *actualSource, int *type, int *size)
Blocking test for a message.
 
int NoBlockReceive(char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int NoBlockSend(const double *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
~vtkMPIController() override
 
bool TestSome(int count, vtkMPICommunicator::Request requests[], vtkIntArray *completed)
Return true iff one or more of the communicator request objects is complete.
 
int WaitAll(int count, vtkMPICommunicator::Request requests[])
Given the request objects of a set of non-blocking operations (send and/or receive) this method block...
 
int NoBlockSend(const int *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockSend(const unsigned long *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockReceive(double *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int Probe(int source, int tag, int *actualSource, float *type, int *size)
Blocking test for a message.
 
void InitializeCommunicator(vtkMPICommunicator *comm)
 
int Probe(int source, int tag, int *actualSource, double *type, int *size)
Blocking test for a message.
 
int NoBlockSend(const char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
bool CanProbe() override
This controller does have probing capability.
 
int Iprobe(int source, int tag, int *flag, int *actualSource, double *type, int *size)
Nonblocking test for a message.
 
int WaitAny(int count, vtkMPICommunicator::Request requests[], int &idx)
Blocks until one of the specified requests in the given request array completes.
 
int NoBlockSend(const vtkTypeInt64 *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int Probe(int source, int tag, int *actualSource, unsigned long *type, int *size)
Blocking test for a message.
 
bool TestAll(int count, vtkMPICommunicator::Request requests[])
Returns true iff all of the communication request objects are complete.
 
void Finalize() override
This method is for cleaning up and has to be called before the end of the program if MPI was initiali...
 
int NoBlockSend(const unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int Probe(int source, int tag, int *actualSource) override
Blocking test for a message.
 
int NoBlockReceive(char *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int Iprobe(int source, int tag, int *flag, int *actualSource, const char *type, int *size)
Nonblocking test for a message.
 
bool TestAny(int count, vtkMPICommunicator::Request requests[], int &idx)
Returns true iff at least one of the communication request objects is complete.
 
void CreateOutputWindow() override
This method can be used to tell the controller to create a special output window in which all message...
 
int NoBlockReceive(unsigned long *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int NoBlockReceive(float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int Probe(int source, int tag, int *actualSource, const char *type, int *size)
Blocking test for a message.
 
int NoBlockSend(const unsigned char *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
static int UseSsendForRMI
When set, TriggerRMI uses Ssend instead of Send.
 
static vtkMPICommunicator * WorldRMICommunicator
 
void SetCommunicator(vtkMPICommunicator *comm)
MPIController uses this communicator in all sends and receives.
 
int NoBlockSend(const float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockReceive(unsigned char *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
void Initialize(int *argc, char ***argv) override
This method is for setting up the processes.
 
vtkMPIController * CreateSubController(vtkProcessGroup *group) override
Creates a new controller with the processes specified by the given group.
 
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
 
int NoBlockSend(const void *data, vtkTypeInt64 length, MPI_Datatype mpiType, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
Variant that permits dynamic type sends, like those create by MPI_Type_create_subarray.
 
int Iprobe(int source, int tag, int *flag, int *actualSource, float *type, int *size)
Nonblocking test for a message.
 
void Initialize(int *vtkNotUsed(argc), char ***vtkNotUsed(argv), int initializedExternally) override
This method is for setting up the processes.
 
vtkMPIController * PartitionController(int localColor, int localKey) override
Partitions this controller based on a coloring.
 
void Finalize(int finalizedExternally) override
This method is for cleaning up.
 
int NoBlockReceive(double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int NoBlockReceive(int *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
static const char * GetProcessorName()
 
int NoBlockReceive(unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int WaitSome(int count, vtkMPICommunicator::Request requests[], vtkIntArray *completed)
Blocks until one or more of the specified requests in the given request request array completes.
 
static char * ErrorString(int err)
Given an MPI error code, return a string which contains an error message.
 
void SingleMethodExecute() override
Execute the SingleMethod (as define by SetSingleMethod) using this->NumberOfProcesses processes.
 
int NoBlockReceive(vtkTypeInt64 *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
static vtkMPIController * New()
 
int NoBlockSend(const int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
static void SetUseSsendForRMI(int use_send)
When set to 1, TriggerRMI uses Ssend() instead of Send() calls.
 
int NoBlockReceive(int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int NoBlockSend(const float *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockReceive(unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
int Iprobe(int source, int tag, int *flag, int *actualSource)
Nonblocking test for a message.
 
void TriggerRMIInternal(int remoteProcessId, void *arg, int argLength, int rmiTag, bool propagate) override
Implementation for TriggerRMI() provides subclasses an opportunity to modify the behaviour eg.
 
int NoBlockSend(const double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockSend(const vtkTypeInt64 *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockSend(const char *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
int NoBlockReceive(vtkTypeInt64 *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
virtual void Initialize()
Same as Initialize(0, 0, 1).
 
static int GetUseSsendForRMI()
 
int NoBlockSend(const unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
 
void MultipleMethodExecute() override
Execute the MultipleMethods (as define by calling SetMultipleMethod for each of the required this->Nu...
 
int Iprobe(int source, int tag, int *flag, int *actualSource, unsigned long *type, int *size)
Nonblocking test for a message.
 
void InitializeRMICommunicator()
 
int NoBlockReceive(float *data, vtkTypeInt64 length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
 
Multiprocessing communication superclass.
 
A subgroup of processes from a communicator.
 
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
 
#define VTK_SIZEHINT(...)