1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
// -*- c++ -*-
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPSLACReader.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.
=========================================================================*/
/*-------------------------------------------------------------------------
Copyright 2008 Sandia Corporation.
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
the U.S. Government retains certain rights in this software.
-------------------------------------------------------------------------*/
/**
* @class vtkPSLACReader
*
*
*
* Extends the vtkSLACReader to read in partitioned pieces. Due to the nature
* of the data layout, this reader only works in a data parallel mode where
* each process in a parallel job simultaneously attempts to read the piece
* corresponding to the local process id.
*
*/
#ifndef vtkPSLACReader_h
#define vtkPSLACReader_h
#include "vtkIOParallelNetCDFModule.h" // For export macro
#include "vtkSLACReader.h"
VTK_ABI_NAMESPACE_BEGIN
class vtkMultiProcessController;
class VTKIOPARALLELNETCDF_EXPORT vtkPSLACReader : public vtkSLACReader
{
public:
vtkTypeMacro(vtkPSLACReader, vtkSLACReader);
static vtkPSLACReader* New();
void PrintSelf(ostream& os, vtkIndent indent) override;
///@{
/**
* The controller used to communicate partition data. The number of pieces
* requested must agree with the number of processes, the piece requested must
* agree with the local process id, and all process must invoke
* ProcessRequests of this filter simultaneously.
*/
vtkGetObjectMacro(Controller, vtkMultiProcessController);
virtual void SetController(vtkMultiProcessController*);
///@}
protected:
vtkPSLACReader();
~vtkPSLACReader() override;
vtkMultiProcessController* Controller;
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
int CheckTetrahedraWinding(int meshFD) override;
int ReadConnectivity(
int meshFD, vtkMultiBlockDataSet* surfaceOutput, vtkMultiBlockDataSet* volumeOutput) override;
int ReadCoordinates(int meshFD, vtkMultiBlockDataSet* output) override;
int ReadMidpointCoordinates(
int meshFD, vtkMultiBlockDataSet* output, MidpointCoordinateMap& map) override;
int ReadMidpointData(int meshFD, vtkMultiBlockDataSet* output, MidpointIdMap& map) override;
int RestoreMeshCache(vtkMultiBlockDataSet* surfaceOutput, vtkMultiBlockDataSet* volumeOutput,
vtkMultiBlockDataSet* compositeOutput) override;
int ReadFieldData(const int* modeFDArray, int numModeFDs, vtkMultiBlockDataSet* output) override;
int ReadTetrahedronInteriorArray(int meshFD, vtkIdTypeArray* connectivity) override;
int ReadTetrahedronExteriorArray(int meshFD, vtkIdTypeArray* connectivity) override;
int MeshUpToDate() override;
/**
* Reads point data arrays. Called by ReadCoordinates and ReadFieldData.
*/
vtkSmartPointer<vtkDataArray> ReadPointDataArray(int ncFD, int varId) override;
class vtkInternal;
vtkInternal* PInternal;
///@{
/**
* The number of pieces and the requested piece to load. Synonymous with
* the number of processes and the local process id.
*/
int NumberOfPieces;
int RequestedPiece;
///@}
/**
* The number of points defined in the mesh file.
*/
vtkIdType NumberOfGlobalPoints;
/**
* The number of midpoints defined in the mesh file
*/
vtkIdType NumberOfGlobalMidpoints;
///@{
/**
* The start/end points read by the given process.
*/
vtkIdType StartPointRead(int process)
{
return process * (this->NumberOfGlobalPoints / this->NumberOfPieces + 1);
}
vtkIdType EndPointRead(int process)
{
vtkIdType result = this->StartPointRead(process + 1);
if (result > this->NumberOfGlobalPoints)
result = this->NumberOfGlobalPoints;
return result;
}
///@}
///@{
/**
* Piece information from the last call.
*/
int NumberOfPiecesCache;
int RequestedPieceCache;
///@}
private:
vtkPSLACReader(const vtkPSLACReader&) = delete;
void operator=(const vtkPSLACReader&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif // vtkPSLACReader_h
|