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