49 #ifndef vtkMPIController_h
50 #define vtkMPIController_h
52 #include "vtkParallelMPIModule.h"
84 virtual void Initialize(
int* vtkNotUsed(argc),
char*** vtkNotUsed(argv),
85 int initializedExternally);
99 virtual void Finalize(
int finalizedExternally);
125 static char* ErrorString(
int err);
155 (data ,length, remoteProcessId, tag, req); }
159 (data, length, remoteProcessId, tag, req); }
163 (data, length, remoteProcessId, tag, req); }
167 (data, length, remoteProcessId, tag, req);}
171 (data, length, remoteProcessId, tag, req); }
175 (data, length, remoteProcessId, tag, req); }
176 #ifdef VTK_USE_64BIT_IDS
180 (data, length, remoteProcessId, tag, req); }
194 (data, length, remoteProcessId, tag, req); }
196 int remoteProcessId,
int tag,
199 (data, length, remoteProcessId, tag, req); }
203 (data, length, remoteProcessId, tag, req); }
207 (data, length, remoteProcessId, tag, req); }
211 (data, length, remoteProcessId, tag, req); }
215 (data, length, remoteProcessId, tag, req); }
216 #ifdef VTK_USE_64BIT_IDS
217 int NoBlockReceive(
vtkIdType* data,
int length,
int remoteProcessId,
220 (data, length, remoteProcessId, tag, req); }
235 source, tag, flag, actualSource); }
239 source, tag, flag, actualSource, type, size); }
243 source, tag, flag, actualSource, type, size); }
247 source, tag, flag, actualSource, type, size); }
251 source, tag, flag, actualSource, type, size); }
255 source, tag, flag, actualSource, type, size); }
304 static const char* GetProcessorName();
322 void InitializeRMICommunicator();
330 void* arg,
int argLength,
int rmiTag,
bool propagate);
339 friend class vtkMPIOutputWindow;
344 static char ProcessorName[];
int NoBlockSend(const double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockSend(const unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockSend(const unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int WaitAll(const int count, vtkMPICommunicator::Request requests[])
Given the request objects of a set of non-blocking operations (send and/or receive) this method block...
int WaitAny(const int count, vtkMPICommunicator::Request requests[], int &idx)
Blocks until one of the specified requests in the given request array completes.
virtual void Finalize()=0
This method is for cleaning up.
Class for creating user defined MPI communicators.
int Iprobe(int source, int tag, int *flag, int *actualSource, const char *type, int *size)
virtual void TriggerRMIInternal(int remoteProcessId, void *arg, int argLength, int rmiTag, bool propagate)
Implementation for TriggerRMI() provides subclasses an opportunity to modify the behaviour eg...
virtual void MultipleMethodExecute()=0
Execute the MultipleMethods (as define by calling SetMultipleMethod for each of the required this->Nu...
static int UseSsendForRMI
When set, TriggerRMI uses Ssend instead of Send.
int NoBlockReceive(unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
static void SetUseSsendForRMI(int use_send)
When set to 1, TriggerRMI uses Ssend() instead of Send() calls.
dynamic, self-adjusting array of int
int NoBlockSend(const int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
virtual void Initialize(int *vtkNotUsed(argc), char ***vtkNotUsed(argv))=0
This method is for setting up the processes.
int NoBlockReceive(unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
a simple class to control print indentation
A subgroup of processes from a communicator.
Process communication using MPI.
static vtkMPICommunicator * WorldRMICommunicator
int NoBlockReceive(float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
virtual void Initialize(int *argc, char ***argv)
This method is for setting up the processes.
int Iprobe(int source, int tag, int *flag, int *actualSource, double *type, int *size)
virtual void CreateOutputWindow()=0
This method can be used to tell the controller to create a special output window in which all message...
int NoBlockSend(const char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
int Iprobe(int source, int tag, int *flag, int *actualSource, unsigned long *type, int *size)
int NoBlockReceive(double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
virtual void Finalize()
This method is for cleaning up and has to be called before the end of the program if MPI was initiali...
int NoBlockReceive(char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
int Iprobe(int source, int tag, int *flag, int *actualSource, float *type, int *size)
static int GetUseSsendForRMI()
int NoBlockReceive(int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
int NoBlockSend(const float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int Iprobe(int source, int tag, int *flag, int *actualSource, int *type, int *size)
virtual void SingleMethodExecute()=0
Execute the SingleMethod (as define by SetSingleMethod) using this->NumberOfProcesses processes...
virtual vtkMultiProcessController * PartitionController(int localColor, int localKey)
Partitions this controller based on a coloring.
virtual vtkMultiProcessController * CreateSubController(vtkProcessGroup *group)
Creates a new controller with the processes specified by the given group.
int Iprobe(int source, int tag, int *flag, int *actualSource)
Nonblocking test for a message.
Multiprocessing communication superclass.