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