00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00048 #ifndef __vtkMPIController_h
00049 #define __vtkMPIController_h
00050
00051 #include "vtkMultiProcessController.h"
00052
00053
00054
00055 #include "vtkMPICommunicator.h"
00056
00057 class VTK_PARALLEL_EXPORT vtkMPIController : public vtkMultiProcessController
00058 {
00059
00060 public:
00061
00062 static vtkMPIController *New();
00063 vtkTypeRevisionMacro(vtkMPIController,vtkMultiProcessController);
00064 void PrintSelf(ostream& os, vtkIndent indent);
00065
00067
00075 virtual void Initialize(int* argc, char*** argv)
00076 { this->Initialize(argc, argv, 0); }
00078
00079 virtual void Initialize(int* vtkNotUsed(argc), char*** vtkNotUsed(argv),
00080 int initializedExternally);
00081
00084 virtual void Finalize() { this->Finalize(0); }
00085
00086 virtual void Finalize(int finalizedExternally);
00087
00090 virtual void SingleMethodExecute();
00091
00095 virtual void MultipleMethodExecute();
00096
00099 void Barrier();
00100
00103 virtual void CreateOutputWindow();
00104
00107 static char* ErrorString(int err);
00108
00109
00115 void SetCommunicator(vtkMPICommunicator* comm);
00116
00117
00118
00120
00125 int NoBlockSend(int* data, int length, int remoteProcessId, int tag,
00126 vtkMPICommunicator::Request& req)
00127 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
00128 (data ,length, remoteProcessId, tag, req); }
00129 int NoBlockSend(unsigned long* data, int length, int remoteProcessId,
00130 int tag, vtkMPICommunicator::Request& req)
00131 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
00132 (data, length, remoteProcessId, tag, req); }
00133 int NoBlockSend(char* data, int length, int remoteProcessId,
00134 int tag, vtkMPICommunicator::Request& req)
00135 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
00136 (data, length, remoteProcessId, tag, req); }
00137 int NoBlockSend(float* data, int length, int remoteProcessId,
00138 int tag, vtkMPICommunicator::Request& req)
00139 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
00140 (data, length, remoteProcessId, tag, req); }
00142
00144
00148 int NoBlockReceive(int* data, int length, int remoteProcessId,
00149 int tag, vtkMPICommunicator::Request& req)
00150 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
00151 (data, length, remoteProcessId, tag, req); }
00152 int NoBlockReceive(unsigned long* data, int length,
00153 int remoteProcessId, int tag,
00154 vtkMPICommunicator::Request& req)
00155 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
00156 (data, length, remoteProcessId, tag, req); }
00157 int NoBlockReceive(char* data, int length, int remoteProcessId,
00158 int tag, vtkMPICommunicator::Request& req)
00159 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
00160 (data, length, remoteProcessId, tag, req); }
00161 int NoBlockReceive(float* data, int length, int remoteProcessId,
00162 int tag, vtkMPICommunicator::Request& req)
00163 { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
00164 (data, length, remoteProcessId, tag, req); }
00166
00167
00168
00169 static const char* GetProcessorName();
00170
00171 protected:
00172 vtkMPIController();
00173 ~vtkMPIController();
00174
00175
00176
00177
00178
00179 int InitializeNumberOfProcesses();
00180
00181
00182 void InitializeCommunicator(vtkMPICommunicator* comm);
00183
00184
00185 void InitializeRMICommunicator();
00186
00187
00188
00189
00190
00191
00192 static vtkMPICommunicator* WorldRMICommunicator;
00193
00194
00195 static int Initialized;
00196
00197 static char ProcessorName[];
00198
00199 private:
00200 vtkMPIController(const vtkMPIController&);
00201 void operator=(const vtkMPIController&);
00202 };
00203
00204
00205 #endif
00206
00207