VTK  9.3.20240419
vtkAMRFlashReaderInternal.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
11 #ifndef vtkAMRFlashReaderInternal_h
12 #define vtkAMRFlashReaderInternal_h
13 
14 #include <cassert>
15 #include <cstring>
16 #include <map>
17 #include <string>
18 #include <vector>
19 
20 #include "vtkByteSwap.h"
21 #include "vtkCellData.h"
22 #include "vtkDataArray.h"
23 #include "vtkDataSet.h"
24 #include "vtkDoubleArray.h"
25 #include "vtkIntArray.h"
26 #include "vtkObject.h"
27 #include "vtkSetGet.h"
28 
29 #define H5_USE_16_API
30 #include "vtk_hdf5.h"
31 
32 //==============================================================================
33 // I N T E R N A L F L A S H R E A D E R
34 //==============================================================================
35 
36 #define FLASH_READER_MAX_DIMS 3
37 #define FLASH_READER_LEAF_BLOCK 1
38 #define FLASH_READER_FLASH3_FFV8 8
39 #define FLASH_READER_FLASH3_FFV9 9
40 
41 VTK_ABI_NAMESPACE_BEGIN
43 {
44  char Name[20]; // name of the integer scalar
45  int Value; // value of the integer scalar
47 
49 {
50  char Name[20]; // name of the real scalar
51  double Value; // value of the real scalar
53 
55 {
56  int NumberOfBlocks; // number of all blocks
57  int NumberOfTimeSteps; // number of time steps
58  int NumberOfXDivisions; // number of divisions per block along x axis
59  int NumberOfYDivisions; // number of divisions per block along y axis
60  int NumberOfZDivisions; // number of divisions per block along z axis
61  double Time; // the time of this step
62  double TimeStep; // time interval
63  double RedShift;
65 
66 typedef struct tagFlashReaderBlock
67 {
68  int Index; // Id of the block
69  int Level; // LOD level
70  int Type; // a leaf block?
71  int ParentId; // Id of the parent block
72  int ChildrenIds[8]; // Ids of the children blocks
73  int NeighborIds[6]; // Ids of the neighboring blocks
74  int ProcessorId; // Id of the processor
75  int MinGlobalDivisionIds[3]; // first (global) division index
76  int MaxGlobalDivisionIds[3]; // last (global) division index
77  double Center[3]; // center of the block
78  double MinBounds[3]; // lower left of the bounding box
79  double MaxBounds[3]; // upper right of the bounding box
81 
83 {
85  char SetupCall[400];
86  char FileCreationTime[80];
87  char FlashVersion[80];
88  char BuildData[80];
89  char BuildDirectory[80];
90  char build_machine[80];
91  char CFlags[400];
92  char FFlags[400];
93  char SetupTimeStamp[80];
94  char BuildTimeStamp[80];
96 
98 {
99  std::string sepaName = variable;
100 
101  if (sepaName.length() > 9 && sepaName.substr(0, 9) == "particle_")
102  {
103  sepaName = std::string("Particles/") + sepaName.substr(9);
104  }
105  else
106  {
107  sepaName = std::string("Particles/") + sepaName;
108  }
109 
110  return sepaName;
111 }
112 
113 // ----------------------------------------------------------------------------
114 // Class vtkFlashReaderInternal (begin)
115 // ----------------------------------------------------------------------------
116 
118 {
119 public:
122 
123  int NumberOfBlocks; // number of ALL blocks
124  int NumberOfLevels; // number of levels
125  int FileFormatVersion; // version of file format
126  int NumberOfParticles; // number of particles
127  int NumberOfLeafBlocks; // number of leaf blocks
128  int NumberOfDimensions; // number of dimensions
129  int NumberOfProcessors; // number of processors
130  int HaveProcessorsInfo; // processor Ids available?
131  int BlockGridDimensions[3]; // number of grid points
132  int BlockCellDimensions[3]; // number of divisions
133  int NumberOfChildrenPerBlock; // number of children per block
134  int NumberOfNeighborsPerBlock; // number of neighbors per block
135 
136  char* FileName; // Flash data file name
137  hid_t FileIndex; // file handle
138  double MinBounds[3]; // lower left of the bounding-box
139  double MaxBounds[3]; // upper right of the bounding box
142 
143  // blocks
144  std::vector<FlashReaderBlock> Blocks;
145  std::vector<int> LeafBlocks;
146  std::vector<std::string> AttributeNames;
147 
148  // particles
150  std::vector<hid_t> ParticleAttributeTypes;
151  std::vector<std::string> ParticleAttributeNames;
152  std::map<std::string, int> ParticleAttributeNamesToIds;
153 
154  int GetCycle();
155  double GetTime();
156 
157  void Init();
158  void SetFileName(VTK_FILEPATH char* fileName) { this->FileName = fileName; }
159  const char* GetParticleName(char* variableName)
160  {
161  static std::string particleName;
162  particleName = GetSeparatedParticleName(std::string(variableName));
163  return particleName.c_str();
164  }
165 
166  void ReadMetaData();
168  void ReadDoubleScalars(hid_t fileIndx);
169  void ReadIntegerScalars(hid_t fileIndx);
171  void ReadSimulationParameters(hid_t fileIndx, bool bTmCycle = false); // time and cycle only
173 
180 
181  void ReadParticlesComponent(hid_t dataIndx, const char* compName, double* dataBuff);
184  void GetBlockAttribute(const char* attribute, int blockIdx, vtkDataSet* pDataSet);
185 };
186 
187 // ----------------------------------------------------------------------------
188 // Class vtkFlashReaderInternal ( end )
189 // ----------------------------------------------------------------------------
190 VTK_ABI_NAMESPACE_END
191 #endif /* vtkAMRFlashReaderInternal_h */
192 // VTK-HeaderTest-Exclude: vtkAMRFlashReaderInternal.h
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
void ReadIntegerScalars(hid_t fileIndx)
void ReadVersionInformation(hid_t fileIndx)
FlashReaderSimulationParameters SimulationParameters
std::map< std::string, int > ParticleAttributeNamesToIds
void ReadParticleAttributesFLASH3()
void GetBlockMinMaxGlobalDivisionIds()
std::vector< FlashReaderBlock > Blocks
FlashReaderSimulationInformation SimulationInformation
void GetBlockAttribute(const char *attribute, int blockIdx, vtkDataSet *pDataSet)
std::vector< std::string > AttributeNames
void ReadDoubleScalars(hid_t fileIndx)
void ReadParticlesComponent(hid_t dataIndx, const char *compName, double *dataBuff)
std::vector< std::string > ParticleAttributeNames
const char * GetParticleName(char *variableName)
void ReadSimulationParameters(hid_t fileIndx, bool bTmCycle=false)
std::vector< hid_t > ParticleAttributeTypes
void SetFileName(VTK_FILEPATH char *fileName)
@ string
Definition: vtkX3D.h:490
static std::string GetSeparatedParticleName(const std::string &variable)
struct tagFlashReaderBlock FlashReaderBlock
struct tagFlashReaderSimulationParameters FlashReaderSimulationParameters
struct tagFlashReaderDoubleScalar FlashReaderDoubleScalar
struct tagFlashReaderIntegerScalar FlashReaderIntegerScalar
struct tagFlashReaderSimulationInformation FlashReaderSimulationInformation
int64_t hid_t
Definition: vtkHDFWriter.h:30
#define VTK_FILEPATH