VTK  9.0.1
vtkADIOS2CoreImageReader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkADIOS2CoreImageReader.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 =========================================================================*/
33 #ifndef vtkADIOS2CoreImageReader_h
34 #define vtkADIOS2CoreImageReader_h
35 
36 #include <map> // For independently time stepped array indexing
37 #include <memory> // For std::unique_ptr
38 #include <string> // For variable name index mapping
39 #include <vector> // For independently time stepped array indexing
40 
41 #include "vtkDataObjectAlgorithm.h"
42 #include "vtkMultiProcessController.h" // For the process controller
43 #include "vtkSetGet.h" // For property get/set macros
44 #include "vtkSmartPointer.h" // For the object cache
45 
46 #include "vtkIOADIOS2Module.h" // For export macro
47 
48 class vtkCellArray;
49 class vtkDataArray;
50 class vtkDataObject;
51 class vtkDataSet;
53 class vtkFieldData;
54 class vtkImageData;
56 class vtkStringArray;
57 
58 //----------------------------------------------------------------------------
59 
60 class VTKIOADIOS2_EXPORT vtkADIOS2CoreImageReader : public vtkDataObjectAlgorithm
61 {
62 public:
63  enum class VarType
64  {
65  PointData,
66  CellData
67  };
68  using Params = std::map<std::string, std::string>;
69  using StringToParams = std::map<std::string, Params>;
70  using InquireVariablesType = std::vector<std::pair<std::string, VarType> >;
73  void PrintSelf(ostream& os, vtkIndent indent) override;
74 
80 
81  virtual int CanReadFile(const char* filename);
82 
84 
87  vtkSetMacro(FileName, std::string);
88  vtkGetMacro(FileName, std::string);
90 
91  void SetFileName(const char* filename);
92 
94 
98  vtkSetVector3Macro(Origin, double);
99  vtkGetVector3Macro(Origin, double);
101 
103 
107  vtkSetVector3Macro(Spacing, double);
108  vtkGetVector3Macro(Spacing, double);
110 
112 
118  vtkSetMacro(DimensionArray, std::string);
119  vtkGetMacro(DimensionArray, std::string);
121 
123 
127  vtkSetMacro(DimensionArrayAsCell, bool);
128  vtkGetMacro(DimensionArrayAsCell, bool);
129  vtkBooleanMacro(DimensionArrayAsCell, bool);
131 
134 
138  vtkSetMacro(TimeStepArray, std::string);
139  vtkGetMacro(TimeStepArray, std::string);
141 
143 
153  const char* GetArrayName(int index);
154 
156 
160  void SetArrayStatus(const char* name, int status);
161  int GetArrayStatus(const char* name);
163 
165 
172  vtkSetMacro(IsColumnMajor, bool);
173  vtkGetMacro(IsColumnMajor, bool);
174  vtkBooleanMacro(IsColumnMajor, bool);
176 
178 
181  void SetActiveScalar(const std::pair<std::string, VarType>& inqVars);
182  std::pair<std::string, VarType>& GetActiveScalar();
183  const std::pair<std::string, VarType>& GetActiveScalar() const;
184 
186 
191 
193 
198 
200 
205 
209  virtual int ProcessRequest(
211 
212 protected:
215 
217 
218  virtual int RequestInformation(
219  vtkInformation* request, vtkInformationVector** input, vtkInformationVector* output) override;
220  virtual int RequestData(
221  vtkInformation* request, vtkInformationVector** input, vtkInformationVector* output) override;
222 
224 
226 
227  // Read available variables and attributes in the file
229 
230  // Convert the array selection into inquire variables.
232 
233  // Init the workDistribution based on the first inquired variable
235 
237 
238  // Gather time steps info from the time step array
240 
241  // Helper function for InitWorkDistribution to calculate how many blocks each process shall read
242  template <typename T>
244 
245  // Helper function for ReadImageBlocks to populate vtk data array from adios variable
246  template <typename T, template <typename...> class U>
248  const std::string& varName, size_t blockIndex);
249 
250  // Helper function to gather time steps from adios time array
251  template <typename T>
253 
255 
258 
261 
262  double Origin[3];
263  double Spacing[3];
264  int Dimension[3];
265 
267 
269 
270  struct vtkADIOS2CoreImageReaderImpl;
271  std::unique_ptr<vtkADIOS2CoreImageReaderImpl> Impl;
272 
273 private:
275  void operator=(const vtkADIOS2CoreImageReader&) = delete;
276 };
277 #endif
vtkADIOS2CoreImageReader::SetActiveScalar
void SetActiveScalar(const std::pair< std::string, VarType > &inqVars)
Get/Set the active scalar on each image block.
vtkADIOS2CoreImageReader::CanReadFile
int CanReadFile(const std::string &name)
Test whether or not a given file should even be attempted for use with this reader.
vtkADIOS2CoreImageReader::CanReadFile
virtual int CanReadFile(const char *filename)
vtkADIOS2CoreImageReader::PopulateDataArrayFromVar
vtkSmartPointer< vtkAbstractArray > PopulateDataArrayFromVar(const std::string &varName, size_t blockIndex)
vtkADIOS2CoreImageReader::GetNumberOfArrays
int GetNumberOfArrays()
Get information about arrays.
vtkADIOS2CoreImageReader::SetArrayStatus
void SetArrayStatus(const char *name, int status)
Set the array that should be read in.
vtkADIOS2CoreImageReader::vtkADIOS2CoreImageReader
vtkADIOS2CoreImageReader()
vtkADIOS2CoreImageReader::DimensionArrayAsCell
bool DimensionArrayAsCell
Definition: vtkADIOS2CoreImageReader.h:256
vtkADIOS2CoreImageReader::StringToParams
std::map< std::string, Params > StringToParams
Definition: vtkADIOS2CoreImageReader.h:69
vtkADIOS2CoreImageReader::DimensionArray
std::string DimensionArray
Definition: vtkADIOS2CoreImageReader.h:259
vtkDataSetAttributes
represent and manipulate attribute data in a dataset
Definition: vtkDataSetAttributes.h:54
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:36
vtkADIOS2CoreImageReader::ReadImageBlocks
void ReadImageBlocks(vtkMultiBlockDataSet *mbds)
vtkADIOS2CoreImageReader::GetAvailableAttributes
StringToParams & GetAvailableAttributes()
Get the available attributes.
vtkDataObjectAlgorithm
Superclass for algorithms that produce only data object as output.
Definition: vtkDataObjectAlgorithm.h:44
vtkADIOS2CoreImageReader::Controller
vtkSmartPointer< vtkMultiProcessController > Controller
Definition: vtkADIOS2CoreImageReader.h:268
vtkMultiProcessController.h
vtkADIOS2CoreImageReader::GetArrayName
const char * GetArrayName(int index)
vtkADIOS2CoreImageReader::SetController
void SetController(vtkMultiProcessController *)
Set the MPI controller.
vtkSmartPointer< vtkAbstractArray >
vtkADIOS2CoreImageReader::Impl
std::unique_ptr< vtkADIOS2CoreImageReaderImpl > Impl
Definition: vtkADIOS2CoreImageReader.h:270
vtkADIOS2CoreImageReader::ConvertArraySelectionToInqVar
void ConvertArraySelectionToInqVar()
vtkADIOS2CoreImageReader::FetchTypeStringFromVarName
std::string FetchTypeStringFromVarName(const std::string &name)
vtkADIOS2CoreImageReader::GetActiveScalar
const std::pair< std::string, VarType > & GetActiveScalar() const
vtkADIOS2CoreImageReader::InitWorkDistribution
bool InitWorkDistribution()
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
vtkADIOS2CoreImageReader::UpdateDimensionFromDimensionArray
void UpdateDimensionFromDimensionArray()
vtkMultiBlockDataSet
Composite dataset that organizes datasets into blocks.
Definition: vtkMultiBlockDataSet.h:46
vtkADIOS2CoreImageReader::RequestData
virtual int RequestData(vtkInformation *request, vtkInformationVector **input, vtkInformationVector *output) override
vtkFieldData
represent and manipulate fields of data
Definition: vtkFieldData.h:54
vtkADIOS2CoreImageReader::IsColumnMajor
bool IsColumnMajor
Definition: vtkADIOS2CoreImageReader.h:257
vtkADIOS2CoreImageReader
Read ADIOS2 bp files.
Definition: vtkADIOS2CoreImageReader.h:61
vtkADIOS2CoreImageReader::RequestTimeStep
double RequestTimeStep
Definition: vtkADIOS2CoreImageReader.h:266
vtkADIOS2CoreImageReader::GetActiveScalar
std::pair< std::string, VarType > & GetActiveScalar()
vtkADIOS2CoreImageReader::CalculateWorkDistribution
void CalculateWorkDistribution(const std::string &varName)
vtkADIOS2CoreImageReader::TimeStepArray
std::string TimeStepArray
Definition: vtkADIOS2CoreImageReader.h:260
vtkADIOS2CoreImageReader::FileName
std::string FileName
Definition: vtkADIOS2CoreImageReader.h:254
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:76
vtkImageData
topologically and geometrically regular array of data
Definition: vtkImageData.h:42
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:34
vtkCellArray
object to represent cell connectivity
Definition: vtkCellArray.h:180
vtkADIOS2CoreImageReader::OpenAndReadMetaData
bool OpenAndReadMetaData()
vtkSmartPointer.h
vtkADIOS2CoreImageReader::Params
std::map< std::string, std::string > Params
Definition: vtkADIOS2CoreImageReader.h:68
vtkX3D::name
@ name
Definition: vtkX3D.h:225
vtkADIOS2CoreImageReader::GetAvilableVariables
StringToParams & GetAvilableVariables()
Get the available variables.
vtkADIOS2CoreImageReader::GetAllDimensionArrays
vtkStringArray * GetAllDimensionArrays()
Get/Set the name of the array to deduce the dimension of vtkImageData.
vtkADIOS2CoreImageReader::GetAvailableAttributes
const StringToParams & GetAvailableAttributes() const
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:57
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:65
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkADIOS2CoreImageReader::RequestDataObjectInternal
int RequestDataObjectInternal(vtkInformationVector *)
vtkADIOS2CoreImageReader::InquireVariablesType
std::vector< std::pair< std::string, VarType > > InquireVariablesType
Definition: vtkADIOS2CoreImageReader.h:70
vtkADIOS2CoreImageReader::~vtkADIOS2CoreImageReader
~vtkADIOS2CoreImageReader() override
vtkADIOS2CoreImageReader::New
static vtkADIOS2CoreImageReader * New(void)
vtkADIOS2CoreImageReader::GetAllTimeStepArrays
vtkStringArray * GetAllTimeStepArrays()
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:37
vtkDataObjectAlgorithm.h
vtkADIOS2CoreImageReader::RequestInformation
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **input, vtkInformationVector *output) override
vtkADIOS2CoreImageReader::GetAvilableVariables
const StringToParams & GetAvilableVariables() const
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:60
vtkADIOS2CoreImageReader::SetFileName
void SetFileName(const char *filename)
vtkX3D::index
@ index
Definition: vtkX3D.h:252
vtkADIOS2CoreImageReader::ProcessRequest
virtual int ProcessRequest(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
The main interface which triggers the reader to start.
vtkADIOS2CoreImageReader::GatherTimeSteps
bool GatherTimeSteps()
vtkADIOS2CoreImageReader::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkADIOS2CoreImageReader::GetArrayStatus
int GetArrayStatus(const char *name)
vtkADIOS2CoreImageReader::GatherTimeStepsFromADIOSTimeArray
void GatherTimeStepsFromADIOSTimeArray()
vtkADIOS2CoreImageReader::VarType
VarType
Definition: vtkADIOS2CoreImageReader.h:64