VTK  9.3.1
VTXSchema.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 
4 /*
5  * VTXSchema.h : abstract class from which all supported adios2 schemas
6  * derive from. Provide common functionality.
7  *
8  * Created on: May 6, 2019
9  * Author: William F Godoy godoywf@ornl.gov
10  */
11 
12 #ifndef VTK_IO_ADIOS2_VTX_SCHEMA_VTXSchema_h
13 #define VTK_IO_ADIOS2_VTX_SCHEMA_VTXSchema_h
14 
15 #include <map>
16 #include <string>
17 
18 #include "vtkMultiBlockDataSet.h"
19 
20 #include <adios2.h>
21 
23 #include "VTX/common/VTXTypes.h"
24 
25 namespace vtx
26 {
27 VTK_ABI_NAMESPACE_BEGIN
31 class VTXSchema
32 {
33 public:
36 
39 
47  std::map<double, size_t> Times;
48 
56  VTXSchema(
57  const std::string& type, const std::string& schema, adios2::IO& io, adios2::Engine& engine);
58 
59  // can't use = default, due to forward class not defined
60  virtual ~VTXSchema();
61 
67  void Fill(vtkMultiBlockDataSet* multiBlock, size_t step = 0);
68 
69 protected:
70  adios2::IO& IO;
71  adios2::Engine& Engine;
72 
73  virtual void Init() = 0;
74  virtual void InitTimes() = 0;
75 
76  virtual void DoFill(vtkMultiBlockDataSet* multiBlock, size_t step) = 0;
77  virtual void ReadPiece(size_t step, size_t pieceID) = 0;
78 
79  void GetTimes(const std::string& variableName = "");
80  void GetDataArray(const std::string& variableName, types::DataArray& dataArray, size_t step = 0);
81 
82 #define declare_type(T) \
83  virtual void SetDimensions( \
84  adios2::Variable<T> variable, const types::DataArray& dataArray, size_t step); \
85  \
86  virtual void SetBlocks(adios2::Variable<T> variable, types::DataArray& dataArray, size_t step);
87 
89 #undef declare_type
90 
91 private:
92  template <class T>
93  void GetDataArrayCommon(adios2::Variable<T> variable, types::DataArray& dataArray, size_t step);
94 
95  template <class T>
96  void GetDataArrayGlobal(adios2::Variable<T> variable, types::DataArray& dataArray, size_t step);
97 
98  template <class T>
99  void GetDataArrayLocal(adios2::Variable<T> variable, types::DataArray& dataArray, size_t step);
100 
101  template <class T>
102  void GetDataValueGlobal(adios2::Variable<T> variable, types::DataArray& dataArray, size_t step);
103 
104  template <class T>
105  void GetTimesCommon(const std::string& variableName);
106 
107  template <class T>
108  void InitDataArray(
109  const std::string& name, size_t elements, size_t components, types::DataArray& dataArray);
110 };
111 
112 VTK_ABI_NAMESPACE_END
113 } // end namespace vtx
114 
115 #endif /* VTK_IO_ADIOS2_VTX_SCHEMA_VTXSchema_h */
void GetDataArray(const std::string &variableName, types::DataArray &dataArray, size_t step=0)
virtual void ReadPiece(size_t step, size_t pieceID)=0
virtual ~VTXSchema()
#define declare_type(T)
Definition: VTXSchema.h:82
std::string Schema
schema contents as a single string
Definition: VTXSchema.h:38
virtual void InitTimes()=0
virtual void DoFill(vtkMultiBlockDataSet *multiBlock, size_t step)=0
#define VTK_IO_ADIOS2_VTX_ARRAY_TYPE(MACRO)
Definition: VTXTypes.h:45
virtual void Init()=0
void Fill(vtkMultiBlockDataSet *multiBlock, size_t step=0)
Fills multiblock data from request steps.
const std::string Type
carries schema type from derived class
Definition: VTXSchema.h:35
Abstract common class to supported ADIOS2 schemas.
Definition: VTXSchema.h:31
adios2::IO & IO
Definition: VTXSchema.h:70
void GetTimes(const std::string &variableName="")
VTXSchema(const std::string &type, const std::string &schema, adios2::IO &io, adios2::Engine &engine)
Generic base constructor.
Composite dataset that organizes datasets into blocks.
adios2::Engine & Engine
Definition: VTXSchema.h:71
std::map< double, size_t > Times
Stored times and corresponding steps.
Definition: VTXSchema.h:47