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 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFidesReader.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 vtkFidesReader
* @brief Read ADIOS2 streams using Fides data model
*
* vtkFidesReader is a data source that reads ADIOS2 files or data
* streams (SST engine, inline engine etc.). The data model in these
* data streams is defined by the Fides library:
* (https://gitlab.kitware.com/vtk/fides/)
* See the Fides documentation for the details of the schema used to
* represent VTK/VTK-m data models.
* The reader can create partitioned datasets containing
* native VTK dataset or VTK VTK-m datasets.
* Time and time streaming is supported. Note that the interface for
* time streaming is different. It requires calling PrepareNextStep()
* and Update() for each new step.
* Partitioned (in ADIOS2 terminology blocks) data is supported.
*
*/
#ifndef vtkFidesReader_h
#define vtkFidesReader_h
#include "vtkAlgorithm.h"
#include "vtkIOFidesModule.h" // For export macro
#include <memory> // for std::unique_ptr
#include <string> // for std::string
VTK_ABI_NAMESPACE_BEGIN
class vtkDataArraySelection;
class vtkInformationIntegerKey;
class VTKIOFIDES_EXPORT vtkFidesReader : public vtkAlgorithm
{
public:
/**
* When using streaming mode instead of random access,
* PrepareNextStep receives a step status from Fides/ADIOS
*/
enum StepStatus
{
OK,
NotReady,
EndOfStream
};
vtkTypeMacro(vtkFidesReader, vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Construct a new reader instance.
*/
static vtkFidesReader* New();
/**
* Test whether or not a given file should even be attempted for use with this
* reader.
*/
int CanReadFile(VTK_FILEPATH const std::string& name);
/**
* Set the filename to be read
*/
void SetFileName(VTK_FILEPATH const std::string& fname);
///@{
/**
* Given a json filename, parse and internally store a data
* model. Has to be called before any data input can take place.
* See the Fides documentation for the description of the schema.
*/
void ParseDataModel(VTK_FILEPATH const std::string& fname);
void ParseDataModel();
///@}
/**
* Set the path for a Fides data source. This can be a file, an
* SST stream or an inline data source. The name of the data source
* corresponds to what is in the data model.
*/
void SetDataSourcePath(const std::string& name, VTK_FILEPATH const std::string& path);
/**
* Set the ADIOS2::IO object to be used for setting up the Inline engine reader.
* This should not be used for any other engine type.
* ioAddress is a string containing the address of the IO object, which Fides
* will cast to a IO pointer.
*/
void SetDataSourceIO(const std::string& name, const std::string& ioAddress);
/**
* Implements various pipeline passes.
*/
int ProcessRequest(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
/**
* This method has to be called before each step when streaming.
* It will move to the next step and initialize any meta-data
* necessary. The loading of the next step is done in the update
* pipeline pass. Note that this internally calls Modified() on
* the reader to force the next update to cause an execution.
*/
void PrepareNextStep();
/**
* Get the StepStatus of the next step reported by Fides.
* See enum vtkFidesReader::StepStatus for potential return values.
* This is updated in PrepareNextStep() and set back to
* NotReady after reading a step.
*/
int GetNextStepStatus();
/**
* Gets the time (from the specified ADIOS variable) of the current step.
* Should only be used in streaming mode.
*/
double GetTimeOfCurrentStep();
///@{
/**
* Methods to determine whether to output a set of vtkmDataSets
* or native VTK datasets. If the pipeline following the reader
* is mainly VTK filters (as opposed to VTK-m accelerated VTK
* filters), set this to on. False by default.
*/
vtkBooleanMacro(ConvertToVTK, bool);
vtkSetMacro(ConvertToVTK, bool);
vtkGetMacro(ConvertToVTK, bool);
///@}
/**
* Object to perform point array selection before update.
*/
vtkGetObjectMacro(PointDataArraySelection, vtkDataArraySelection);
/**
* Object to perform cell array selection before update.
*/
vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
protected:
vtkFidesReader();
~vtkFidesReader() override;
struct vtkFidesReaderImpl;
std::unique_ptr<vtkFidesReaderImpl> Impl;
std::string FileName;
bool ConvertToVTK;
bool StreamSteps;
StepStatus NextStepStatus;
virtual int RequestDataObject(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
virtual int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
int FillOutputPortInformation(int port, vtkInformation* info) override;
vtkDataArraySelection* PointDataArraySelection;
vtkDataArraySelection* CellDataArraySelection;
static vtkInformationIntegerKey* NUMBER_OF_BLOCKS();
int ADIOSAttributeCheck(const std::string& name);
private:
vtkFidesReader(const vtkFidesReader&) = delete;
void operator=(const vtkFidesReader&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|