ParaView
vtkMPIMoveData.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMPIMoveData.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
26 #ifndef vtkMPIMoveData_h
27 #define vtkMPIMoveData_h
28 
29 #include "vtkPVClientServerCoreRenderingModule.h" //needed for exports
30 #include "vtkPassInputTypeAlgorithm.h"
31 
32 class vtkMultiProcessController;
33 class vtkSocketController;
35 class vtkDataSet;
36 class vtkIndent;
37 
38 class VTKPVCLIENTSERVERCORERENDERING_EXPORT vtkMPIMoveData : public vtkPassInputTypeAlgorithm
39 {
40 public:
41  static vtkMPIMoveData* New();
42  vtkTypeMacro(vtkMPIMoveData, vtkPassInputTypeAlgorithm);
43  void PrintSelf(ostream& os, vtkIndent indent);
44 
49  virtual void InitializeForCommunicationForParaView();
50 
52 
66  void SetController(vtkMultiProcessController* controller);
67  void SetMPIMToNSocketConnection(vtkMPIMToNSocketConnection* sc);
68  void SetClientDataServerSocketController(vtkMultiProcessController*);
69  vtkGetObjectMacro(ClientDataServerSocketController, vtkMultiProcessController);
71 
73 
77  void SetServerToClient() { this->Server = vtkMPIMoveData::CLIENT; }
80  vtkSetClampMacro(Server, int, vtkMPIMoveData::CLIENT, vtkMPIMoveData::RENDER_SERVER);
81  vtkGetMacro(Server, int);
83 
88  void SetMoveModeToCollect() { this->MoveMode = vtkMPIMoveData::COLLECT; }
89  void SetMoveModeToClone() { this->MoveMode = vtkMPIMoveData::CLONE; }
90  vtkSetClampMacro(
92 
94 
102  vtkSetMacro(OutputDataType, int);
103  vtkGetMacro(OutputDataType, int);
105 
107 
112  static void SetUseZLibCompression(bool b);
113  static bool GetUseZLibCompression();
115 
122  bool GetOutputGeneratedOnProcess();
123 
125 
130  vtkSetMacro(SkipDataServerGatherToZero, bool);
131  vtkGetMacro(SkipDataServerGatherToZero, bool);
133 
135  {
136  PASS_THROUGH = 0,
137  COLLECT = 1,
138  CLONE = 2,
139  COLLECT_AND_PASS_THROUGH = 3
140  };
141 
142 protected:
143  vtkMPIMoveData();
144  ~vtkMPIMoveData();
145 
146  virtual int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
147  vtkInformationVector* outputVector);
148  virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
149  vtkInformationVector* outputVector);
150  virtual int FillInputPortInformation(int port, vtkInformation* info);
151 
152  vtkMultiProcessController* Controller;
153  vtkMultiProcessController* ClientDataServerSocketController;
155 
156  void DataServerAllToN(vtkDataObject* inData, vtkDataObject* outData, int n);
157  void DataServerGatherAll(vtkDataObject* input, vtkDataObject* output);
158  void DataServerGatherToZero(vtkDataObject* input, vtkDataObject* output);
159  void DataServerSendToRenderServer(vtkDataObject* output);
160  void RenderServerReceiveFromDataServer(vtkDataObject* output);
161  void DataServerZeroSendToRenderServerZero(vtkDataObject* data);
162  void RenderServerZeroReceiveFromDataServerZero(vtkDataObject* data);
163  void RenderServerZeroBroadcast(vtkDataObject* data);
164  void DataServerSendToClient(vtkDataObject* output);
165  void ClientReceiveFromDataServer(vtkDataObject* output);
166 
168  vtkIdType* BufferLengths;
169  vtkIdType* BufferOffsets;
170  char* Buffers;
171  vtkIdType BufferTotalLength;
172 
173  void ClearBuffer();
174  void MarshalDataToBuffer(vtkDataObject* data);
175  void ReconstructDataFromBuffer(vtkDataObject* data);
176 
177  int MoveMode;
178  int Server;
179 
181 
182  enum Servers
183  {
184  CLIENT = 0,
185  DATA_SERVER = 1,
186  RENDER_SERVER = 2
187  };
188 
190 
191 private:
192  int UpdateNumberOfPieces;
193  int UpdatePiece;
194 
195  vtkMPIMoveData(const vtkMPIMoveData&) VTK_DELETE_FUNCTION;
196  void operator=(const vtkMPIMoveData&) VTK_DELETE_FUNCTION;
197 
198  static bool UseZLibCompression;
199 };
200 
201 #endif
vtkIdType * BufferOffsets
void SetMoveModeToCollect()
vtkMultiProcessController * ClientDataServerSocketController
vtkMPIMToNSocketConnection * MPIMToNSocketConnection
bool SkipDataServerGatherToZero
vtkIdType * BufferLengths
void SetServerToDataServer()
Tell the object on which client/server it resides.
vtkIdType BufferTotalLength
class to create socket connections between two servers
vtkMultiProcessController * Controller
Moves/redistributes data between processes.
void SetServerToClient()
Tell the object on which client/server it resides.
void SetServerToRenderServer()
Tell the object on which client/server it resides.
void SetMoveModeToClone()
void SetMoveModeToPassThrough()
Specify how the data is to be redistributed.