Parallel/vtkMPIController.h Source File

Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Parallel/vtkMPIController.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkMPIController.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00062 #ifndef __vtkMPIController_h
    00063 #define __vtkMPIController_h
    00064
    00065 #include "vtkMultiProcessController.h"
    00066 // Do not remove this header file. This class contains methods
    00067 // which take arguments defined in  vtkMPICommunicator.h by
    00068 // reference.
    00069 #include "vtkMPICommunicator.h" // Needed for direct access to communicator
    00070
    00071 class VTK_PARALLEL_EXPORT vtkMPIController : public vtkMultiProcessController
    00072 {
    00073
    00074 public:
    00075
    00076   static vtkMPIController *New();
    00077   vtkTypeRevisionMacro(vtkMPIController,vtkMultiProcessController);
    00078   void PrintSelf(ostream& os, vtkIndent indent);
    00079
    00081
    00089   virtual void Initialize(int* argc, char*** argv)
    00090     { this->Initialize(argc, argv, 0); }
    00092
    00093   virtual void Initialize(int* vtkNotUsed(argc), char*** vtkNotUsed(argv),
    00094                           int initializedExternally);
    00095
    00098   virtual void Finalize() { this->Finalize(0); }
    00099
    00100   virtual void Finalize(int finalizedExternally);
    00101
    00104   virtual void SingleMethodExecute();
    00105
    00109   virtual void MultipleMethodExecute();
    00110
    00113   void Barrier();
    00114
    00117   virtual void CreateOutputWindow();
    00118
    00121   static char* ErrorString(int err);
    00122
    00123
    00129   void SetCommunicator(vtkMPICommunicator* comm);
    00130
    00131 //BTX
    00132
    00134
    00139   int NoBlockSend(int* data, int length, int remoteProcessId, int tag,
    00140                   vtkMPICommunicator::Request& req)
    00141     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
    00142         (data ,length, remoteProcessId, tag, req); }
    00143   int NoBlockSend(unsigned long* data, int length, int remoteProcessId,
    00144                   int tag, vtkMPICommunicator::Request& req)
    00145     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
    00146         (data, length, remoteProcessId, tag, req); }
    00147   int NoBlockSend(char* data, int length, int remoteProcessId,
    00148                   int tag, vtkMPICommunicator::Request& req)
    00149     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
    00150         (data, length, remoteProcessId, tag, req); }
    00151   int NoBlockSend(float* data, int length, int remoteProcessId,
    00152                   int tag, vtkMPICommunicator::Request& req)
    00153     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockSend
    00154         (data, length, remoteProcessId, tag, req); }
    00156
    00158
    00162   int NoBlockReceive(int* data, int length, int remoteProcessId,
    00163                      int tag, vtkMPICommunicator::Request& req)
    00164     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
    00165         (data, length, remoteProcessId, tag, req); }
    00166   int NoBlockReceive(unsigned long* data, int length,
    00167                      int remoteProcessId, int tag,
    00168                      vtkMPICommunicator::Request& req)
    00169     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
    00170         (data, length, remoteProcessId, tag, req); }
    00171   int NoBlockReceive(char* data, int length, int remoteProcessId,
    00172                      int tag, vtkMPICommunicator::Request& req)
    00173     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
    00174         (data, length, remoteProcessId, tag, req); }
    00175   int NoBlockReceive(float* data, int length, int remoteProcessId,
    00176                      int tag, vtkMPICommunicator::Request& req)
    00177     { return ((vtkMPICommunicator*)this->Communicator)->NoBlockReceive
    00178         (data, length, remoteProcessId, tag, req); }
    00180
    00181 //ETX
    00182
    00183   static const char* GetProcessorName();
    00184
    00185 protected:
    00186   vtkMPIController();
    00187   ~vtkMPIController();
    00188
    00189   // Given a communicator, obtain size and rank
    00190   // setting NumberOfProcesses and LocalProcessId
    00191   // Should not be called if the current communicator
    00192   // does not include this process
    00193   int InitializeNumberOfProcesses();
    00194
    00195   // Set the communicator to comm and call InitializeNumberOfProcesses()
    00196   void InitializeCommunicator(vtkMPICommunicator* comm);
    00197
    00198   // Duplicate the current communicator, creating RMICommunicator
    00199   void InitializeRMICommunicator();
    00200
    00201   // MPI communicator created when Initialize() called.
    00202   // This is a copy of MPI_COMM_WORLD but uses a new
    00203   // context, i.e. even if the tags are the same, the
    00204   // RMI messages will not interfere with user level
    00205   // messages.
    00206   static vtkMPICommunicator* WorldRMICommunicator;
    00207
    00208   // Initialize only once.
    00209   static int Initialized;
    00210
    00211   static char ProcessorName[];
    00212
    00213 private:
    00214   vtkMPIController(const vtkMPIController&);  // Not implemented.
    00215   void operator=(const vtkMPIController&);  // Not implemented.
    00216 };
    00217
    00218
    00219 #endif
    00220
    00221