You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.0 KiB
C
179 lines
5.0 KiB
C
|
3 weeks ago
|
/*=========================================================================
|
||
|
|
|
||
|
|
Program: Visualization Toolkit
|
||
|
|
Module: vtkXMLPDataWriter.h
|
||
|
|
|
||
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
||
|
|
All rights reserved.
|
||
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
||
|
|
|
||
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
|
|
PURPOSE. See the above copyright notice for more information.
|
||
|
|
|
||
|
|
=========================================================================*/
|
||
|
|
/**
|
||
|
|
* @class vtkXMLPDataWriter
|
||
|
|
* @brief Write data in a parallel XML format.
|
||
|
|
*
|
||
|
|
* vtkXMLPDataWriter is the superclass for all XML parallel data set
|
||
|
|
* writers. It provides functionality needed for writing parallel
|
||
|
|
* formats, such as the selection of which writer writes the summary
|
||
|
|
* file and what range of pieces are assigned to each serial writer.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef vtkXMLPDataWriter_h
|
||
|
|
#define vtkXMLPDataWriter_h
|
||
|
|
|
||
|
|
#include "vtkIOParallelXMLModule.h" // For export macro
|
||
|
|
#include "vtkXMLWriter.h"
|
||
|
|
|
||
|
|
class vtkCallbackCommand;
|
||
|
|
class vtkMultiProcessController;
|
||
|
|
|
||
|
|
class VTKIOPARALLELXML_EXPORT vtkXMLPDataWriter : public vtkXMLWriter
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
vtkTypeMacro(vtkXMLPDataWriter,vtkXMLWriter);
|
||
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Get/Set the number of pieces that are being written in parallel.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(NumberOfPieces, int);
|
||
|
|
vtkGetMacro(NumberOfPieces, int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Get/Set the range of pieces assigned to this writer.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(StartPiece, int);
|
||
|
|
vtkGetMacro(StartPiece, int);
|
||
|
|
vtkSetMacro(EndPiece, int);
|
||
|
|
vtkGetMacro(EndPiece, int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Get/Set the ghost level used for this writer's piece.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(GhostLevel, int);
|
||
|
|
vtkGetMacro(GhostLevel, int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Get/Set whether the writer should write the summary file that
|
||
|
|
* refers to all of the pieces' individual files.
|
||
|
|
* This is on by default. Note that only the first process writes
|
||
|
|
* the summary file.
|
||
|
|
*/
|
||
|
|
virtual void SetWriteSummaryFile(int flag);
|
||
|
|
vtkGetMacro(WriteSummaryFile, int);
|
||
|
|
vtkBooleanMacro(WriteSummaryFile, int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Controller used to communicate data type of blocks.
|
||
|
|
* By default, the global controller is used. If you want another
|
||
|
|
* controller to be used, set it with this.
|
||
|
|
*/
|
||
|
|
virtual void SetController(vtkMultiProcessController*);
|
||
|
|
vtkGetObjectMacro(Controller, vtkMultiProcessController);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Overridden to handle passing the CONTINUE_EXECUTING() flags to the
|
||
|
|
* executive.
|
||
|
|
*/
|
||
|
|
virtual int ProcessRequest(vtkInformation* request,
|
||
|
|
vtkInformationVector** inputVector, vtkInformationVector* outputVector);
|
||
|
|
|
||
|
|
protected:
|
||
|
|
vtkXMLPDataWriter();
|
||
|
|
~vtkXMLPDataWriter();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Overridden to make appropriate piece request from upstream.
|
||
|
|
*/
|
||
|
|
virtual int RequestUpdateExtent(vtkInformation *request,
|
||
|
|
vtkInformationVector **inputVector, vtkInformationVector *outputVector);
|
||
|
|
|
||
|
|
// Override writing method from superclass.
|
||
|
|
virtual int WriteInternal();
|
||
|
|
|
||
|
|
// Subclasses can override this method to collect information between ranks
|
||
|
|
// before writing the summary file. This method is called on all ranks while
|
||
|
|
// summary file is only written on 1 rank (rank 0).
|
||
|
|
virtual void PrepareSummaryFile();
|
||
|
|
|
||
|
|
virtual vtkXMLWriter* CreatePieceWriter(int index)=0;
|
||
|
|
|
||
|
|
virtual void WritePrimaryElementAttributes(ostream &os, vtkIndent indent);
|
||
|
|
int WriteData();
|
||
|
|
virtual void WritePData(vtkIndent indent);
|
||
|
|
virtual void WritePPieceAttributes(int index);
|
||
|
|
|
||
|
|
char* CreatePieceFileName(int index, const char* path=0);
|
||
|
|
void SplitFileName();
|
||
|
|
virtual int WritePiece(int index);
|
||
|
|
|
||
|
|
// Callback registered with the ProgressObserver.
|
||
|
|
static void ProgressCallbackFunction(vtkObject*, unsigned long, void*,
|
||
|
|
void*);
|
||
|
|
// Progress callback from internal writer.
|
||
|
|
virtual void ProgressCallback(vtkAlgorithm* w);
|
||
|
|
|
||
|
|
int StartPiece;
|
||
|
|
int EndPiece;
|
||
|
|
int NumberOfPieces;
|
||
|
|
int GhostLevel;
|
||
|
|
int WriteSummaryFile;
|
||
|
|
|
||
|
|
char* PathName;
|
||
|
|
char* FileNameBase;
|
||
|
|
char* FileNameExtension;
|
||
|
|
char* PieceFileNameExtension;
|
||
|
|
|
||
|
|
// The observer to report progress from the internal writer.
|
||
|
|
vtkCallbackCommand* ProgressObserver;
|
||
|
|
|
||
|
|
vtkMultiProcessController* Controller;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Valid at end of WriteInternal to indicate if we're going to continue
|
||
|
|
* execution.
|
||
|
|
*/
|
||
|
|
vtkGetMacro(ContinuingExecution, bool);
|
||
|
|
|
||
|
|
private:
|
||
|
|
vtkXMLPDataWriter(const vtkXMLPDataWriter&) VTK_DELETE_FUNCTION;
|
||
|
|
void operator=(const vtkXMLPDataWriter&) VTK_DELETE_FUNCTION;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Method used to delete all written files.
|
||
|
|
*/
|
||
|
|
void DeleteFiles();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Initializes PieceFileNameExtension.
|
||
|
|
*/
|
||
|
|
void SetupPieceFileNameExtension();
|
||
|
|
|
||
|
|
// Indicates the piece currently being written.
|
||
|
|
int CurrentPiece;
|
||
|
|
|
||
|
|
// Set in WriteInternal() to request continued execution from the executive to
|
||
|
|
// write more pieces.
|
||
|
|
bool ContinuingExecution;
|
||
|
|
|
||
|
|
// Flags used to keep track of which pieces were written out.
|
||
|
|
unsigned char *PieceWrittenFlags;
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif
|