VTK  9.0.1
vtkAMReXGridReaderInternal.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkAMReXGridReaderInternal.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 vtkAMReXGridReaderInternal_h
26 #define vtkAMReXGridReaderInternal_h
27 #ifndef __VTK_WRAP__
28 
29 #include <string>
30 #include <vector>
31 
32 #include "vtkDataSet.h"
33 
34 class vtkIndent;
35 
36 //==============================================================================
37 // I N T E R N A L A M R e X R E A D E R
38 //==============================================================================
39 
40 // ----------------------------------------------------------------------------
41 // Class RealDecriptor (begin)
42 // ----------------------------------------------------------------------------
43 
44 /*
45  floating point format specification (fmt):
46  - fmt[0] = # of bits per number
47  - fmt[1] = # of bits in exponent
48  - fmt[2] = # of bits in mantissa
49  - fmt[3] = start bit of sign
50  - fmt[4] = start bit of exponent
51  - fmt[5] = start bit of mantissa
52  - fmt[6] = high order mantissa bit (CRAY needs this)
53  - fmt[7] = bias of exponent
54 
55  64 11 52 0 1 12 0 1023 - IEEE Double
56 
57  byte order (ord) handles endianness (and defines size such as float or double)
58  - ord[0] = byte in 1st byte
59  - ord[1] = byte in 2nd byte
60  - ord[2] = byte in 3rd byte
61  - ord[3] = byte in 4th byte
62  - ...
63 */
64 
66 {
67 public:
69  RealDescriptor(const long* format, const int* order, int order_length);
70  const long* format() const&;
71  const std::vector<long>& formatarray() const&;
72  const int* order() const&;
73  const std::vector<int>& orderarray() const&;
74  int numBytes() const;
75  bool operator==(const RealDescriptor& rd) const;
76 
77 private:
78  std::vector<long> fr;
79  std::vector<int> ord;
80 };
81 
82 // ----------------------------------------------------------------------------
83 // Class RealDecriptor ( end )
84 // ----------------------------------------------------------------------------
85 
86 // ----------------------------------------------------------------------------
87 // Class vtkAMReXGridHeader (begin)
88 // ----------------------------------------------------------------------------
89 
91 {
92 public:
95  std::vector<std::string> variableNames;
96  int dim;
97  double time;
99  std::vector<double> problemDomainLoEnd;
100  std::vector<double> problemDomainHiEnd;
101  std::vector<int> refinementRatio;
102  std::vector<std::vector<std::vector<int> > > levelDomains;
103  std::vector<int> levelSteps;
104  std::vector<std::vector<double> > cellSize;
107  std::vector<int> levelSize;
108  std::vector<std::vector<std::vector<std::vector<double> > > > levelCells;
109  std::vector<std::string> levelPrefix;
110  std::vector<std::string> multiFabPrefix;
112 
114 
115  void PrintSelf(std::ostream& os, vtkIndent indent);
116  void PrintSelfGenericHeader(std::ostream& os, vtkIndent indent);
117  bool Parse(const std::string& headerData);
118  bool ParseGenericHeader(const std::string& headerData);
119 };
120 
121 // ----------------------------------------------------------------------------
122 // Class vtkAMReXGridHeader ( end )
123 // ----------------------------------------------------------------------------
124 
125 // ----------------------------------------------------------------------------
126 // Class vtkAMReXGridLevelHeader (begin)
127 // ----------------------------------------------------------------------------
128 
130 {
131  enum Version
132  {
133  Undefined_v1 = 0, // ---- undefined
134  Version_v1 = 1, // ---- auto converting version with headers
135  // ---- for each fab in the data files and
136  // ---- min and max values for each fab in the header
137  NoFabHeader_v1 = 2, // ---- no fab headers, no fab mins or maxes
138  NoFabHeaderMinMax_v1 = 3, // ---- no fab headers,
139  // ---- min and max values for each fab in the header
140  NoFabHeaderFAMinMax_v1 = 4 // ---- no fab headers, no fab mins or maxes,
141  // ---- min and max values for each FabArray in the header
142  };
143  enum Ordering
144  {
145  NormalOrder = 1,
146  ReverseOrder = 2
147  };
148 
149 public:
150  int level;
151  int dim;
153  int levelHow;
158  std::vector<std::vector<std::vector<int> > > levelBoxArrays;
161  std::vector<std::string> levelFABFile;
162  std::vector<long> levelFileOffset;
163  std::vector<std::vector<double> > levelMinimumsFAB;
164  std::vector<std::vector<double> > levelMaximumsFAB;
165  std::vector<double> levelFABArrayMinimum;
166  std::vector<double> levelFABArrayMaximum;
170 
172  void PrintSelf(std::ostream& os, vtkIndent indent);
173  void PrintSelfLevelHeader(std::ostream& os, vtkIndent indent);
174  bool Parse(int _level, int _dim, const std::string& headerData);
175  bool ParseLevelHeader(int _level, int _dim, const std::string& headerData);
176 };
177 
178 // ----------------------------------------------------------------------------
179 // Class vtkAMReXGridLevelHeader ( end )
180 // ----------------------------------------------------------------------------
181 
182 // ----------------------------------------------------------------------------
183 // Class vtkAMReXGridReaderInternal (begin)
184 // ----------------------------------------------------------------------------
185 
187 {
188 public:
191  void DestroyHeader();
192  void DestroyLevelHeader();
193  void PrintSelf(std::ostream& os, vtkIndent indent);
194  void SetFileName(char* fName);
195 
196  void ReadMetaData();
197  bool ReadHeader();
198  bool ReadLevelHeader();
199  int GetNumberOfLevels();
200  int GetBlockLevel(const int blockIdx);
201  int GetNumberOfBlocks();
202  int GetBlockIndexWithinLevel(int blockIdx, int level);
203  void GetBlockAttribute(const char* attribute, int blockIdx, vtkDataSet* pDataSet);
204  int GetOffsetOfAttribute(const char* attribute);
205  void ReadFAB(std::istream& is);
206  int ReadVersion(std::istream& is);
207  void ReadOrder(std::istream& is, std::vector<int>& ar);
208  void PrintOrder(std::vector<int>& ar);
209  void ReadFormat(std::istream& is, std::vector<long>& ar);
210  void PrintFormat(std::vector<long>& ar);
211  RealDescriptor* ReadRealDescriptor(std::istream& is);
212  int ReadBoxArray(std::istream& is, int* boxArray, int* boxArrayDim);
213  void PrintBoxArray(int* boxArray);
214  int ReadNumberOfAttributes(std::istream& is);
215  void ReadBlockAttribute(std::istream& is, int numberOfPoints, int size, char* buffer);
216  void Convert(
217  void* out, const void* in, long nitems, const RealDescriptor& ord, const RealDescriptor& ird);
218  void PermuteOrder(
219  void* out, const void* in, long nitems, const int* outord, const int* inord, int REALSIZE);
220 
225  friend class vtkAMReXGridHeader;
226  std::vector<vtkAMReXGridLevelHeader*> LevelHeader;
228 };
229 
230 // ----------------------------------------------------------------------------
231 // Class vtkAMReXGridReaderInternal ( end )
232 // ----------------------------------------------------------------------------
233 #endif
234 #endif /* vtkAMReXGridReaderInternal_h */
235 // VTK-HeaderTest-Exclude: vtkAMReXGridReaderInternal.h
vtkAMReXGridHeader::refinementRatio
std::vector< int > refinementRatio
Definition: vtkAMReXGridReaderInternal.h:101
vtkAMReXGridHeader::magicZero
int magicZero
Definition: vtkAMReXGridReaderInternal.h:106
vtkAMReXGridHeader::dim
int dim
Definition: vtkAMReXGridReaderInternal.h:96
vtkAMReXGridReaderInternal::vtkAMReXGridReaderInternal
vtkAMReXGridReaderInternal()
vtkAMReXGridReaderInternal::vtkAMReXGridLeveHeader
friend class vtkAMReXGridLeveHeader
Definition: vtkAMReXGridReaderInternal.h:227
vtkAMReXGridHeader::problemDomainLoEnd
std::vector< double > problemDomainLoEnd
Definition: vtkAMReXGridReaderInternal.h:99
vtkAMReXGridHeader::PrintSelf
void PrintSelf(std::ostream &os, vtkIndent indent)
vtkAMReXGridHeader
Definition: vtkAMReXGridReaderInternal.h:90
vtkAMReXGridReaderInternal::Header
vtkAMReXGridHeader * Header
Definition: vtkAMReXGridReaderInternal.h:224
vtkAMReXGridLevelHeader::levelHow
int levelHow
Definition: vtkAMReXGridReaderInternal.h:153
vtkAMReXGridHeader::PrintSelfGenericHeader
void PrintSelfGenericHeader(std::ostream &os, vtkIndent indent)
vtkAMReXGridLevelHeader::levelNumberOfGhostCells
int levelNumberOfGhostCells
Definition: vtkAMReXGridReaderInternal.h:155
vtkAMReXGridHeader::problemDomainHiEnd
std::vector< double > problemDomainHiEnd
Definition: vtkAMReXGridReaderInternal.h:100
vtkAMReXGridReaderInternal::DestroyHeader
void DestroyHeader()
vtkAMReXGridLevelHeader::dim
int dim
Definition: vtkAMReXGridReaderInternal.h:151
vtkAMReXGridHeader::finestLevel
int finestLevel
Definition: vtkAMReXGridReaderInternal.h:98
vtkAMReXGridReaderInternal::ReadLevelHeader
bool ReadLevelHeader()
RealDescriptor::order
const int * order() const &
vtkAMReXGridLevelHeader::levelMagicZero
int levelMagicZero
Definition: vtkAMReXGridReaderInternal.h:157
vtkAMReXGridLevelHeader::levelFabOnDiskPrefix
std::string levelFabOnDiskPrefix
Definition: vtkAMReXGridReaderInternal.h:160
vtkAMReXGridLevelHeader::levelNumberOfFABOnDisk
int levelNumberOfFABOnDisk
Definition: vtkAMReXGridReaderInternal.h:159
vtkAMReXGridHeader::variableNames
std::vector< std::string > variableNames
Definition: vtkAMReXGridReaderInternal.h:95
vtkAMReXGridLevelHeader::debugLevelHeader
bool debugLevelHeader
Definition: vtkAMReXGridReaderInternal.h:169
vtkAMReXGridHeader::variableNamesSize
int variableNamesSize
Definition: vtkAMReXGridReaderInternal.h:94
vtkAMReXGridReaderInternal::SetFileName
void SetFileName(char *fName)
vtkAMReXGridLevelHeader::vtkAMReXGridLevelHeader
vtkAMReXGridLevelHeader()
RealDescriptor::numBytes
int numBytes() const
vtkAMReXGridLevelHeader::levelMinimumsFAB
std::vector< std::vector< double > > levelMinimumsFAB
Definition: vtkAMReXGridReaderInternal.h:163
vtkAMReXGridReaderInternal::GetNumberOfBlocks
int GetNumberOfBlocks()
vtkAMReXGridLevelHeader::Parse
bool Parse(int _level, int _dim, const std::string &headerData)
vtkAMReXGridReaderInternal::ReadOrder
void ReadOrder(std::istream &is, std::vector< int > &ar)
RealDescriptor::format
const long * format() const &
vtkAMReXGridHeader::debugHeader
bool debugHeader
Definition: vtkAMReXGridReaderInternal.h:111
vtkAMReXGridLevelHeader::levelMaximumsFAB
std::vector< std::vector< double > > levelMaximumsFAB
Definition: vtkAMReXGridReaderInternal.h:164
vtkAMReXGridHeader::ParseGenericHeader
bool ParseGenericHeader(const std::string &headerData)
vtkAMReXGridReaderInternal::LevelHeader
std::vector< vtkAMReXGridLevelHeader * > LevelHeader
Definition: vtkAMReXGridReaderInternal.h:226
vtkAMReXGridHeader::vtkAMReXGridHeader
vtkAMReXGridHeader()
RealDescriptor::formatarray
const std::vector< long > & formatarray() const &
vtkAMReXGridReaderInternal::ReadHeader
bool ReadHeader()
vtkX3D::level
@ level
Definition: vtkX3D.h:401
vtkAMReXGridReaderInternal::ReadBoxArray
int ReadBoxArray(std::istream &is, int *boxArray, int *boxArrayDim)
vtkAMReXGridHeader::levelCells
std::vector< std::vector< std::vector< std::vector< double > > > > levelCells
Definition: vtkAMReXGridReaderInternal.h:108
vtkAMReXGridHeader::levelSize
std::vector< int > levelSize
Definition: vtkAMReXGridReaderInternal.h:107
RealDescriptor::RealDescriptor
RealDescriptor()
vtkAMReXGridReaderInternal::PrintOrder
void PrintOrder(std::vector< int > &ar)
vtkAMReXGridHeader::multiFabPrefix
std::vector< std::string > multiFabPrefix
Definition: vtkAMReXGridReaderInternal.h:110
vtkAMReXGridLevelHeader::levelFABFile
std::vector< std::string > levelFABFile
Definition: vtkAMReXGridReaderInternal.h:161
vtkAMReXGridHeader::Parse
bool Parse(const std::string &headerData)
vtkAMReXGridLevelHeader::levelFABArrayMaximum
std::vector< double > levelFABArrayMaximum
Definition: vtkAMReXGridReaderInternal.h:166
vtkAMReXGridLevelHeader::levelFileOffset
std::vector< long > levelFileOffset
Definition: vtkAMReXGridReaderInternal.h:162
vtkAMReXGridLevelHeader::levelVersion
int levelVersion
Definition: vtkAMReXGridReaderInternal.h:152
vtkAMReXGridReaderInternal::ReadNumberOfAttributes
int ReadNumberOfAttributes(std::istream &is)
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkAMReXGridReaderInternal::ReadFormat
void ReadFormat(std::istream &is, std::vector< long > &ar)
vtkAMReXGridReaderInternal::PrintSelf
void PrintSelf(std::ostream &os, vtkIndent indent)
vtkAMReXGridReaderInternal::GetNumberOfLevels
int GetNumberOfLevels()
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkAMReXGridHeader::levelDomains
std::vector< std::vector< std::vector< int > > > levelDomains
Definition: vtkAMReXGridReaderInternal.h:102
vtkAMReXGridReaderInternal::GetOffsetOfAttribute
int GetOffsetOfAttribute(const char *attribute)
vtkAMReXGridHeader::levelPrefix
std::vector< std::string > levelPrefix
Definition: vtkAMReXGridReaderInternal.h:109
vtkAMReXGridReaderInternal::PrintBoxArray
void PrintBoxArray(int *boxArray)
vtkAMReXGridReaderInternal::PermuteOrder
void PermuteOrder(void *out, const void *in, long nitems, const int *outord, const int *inord, int REALSIZE)
vtkAMReXGridReaderInternal::ReadMetaData
void ReadMetaData()
vtkAMReXGridReaderInternal::~vtkAMReXGridReaderInternal
~vtkAMReXGridReaderInternal()
vtkAMReXGridLevelHeader::levelNumberOfComponents
int levelNumberOfComponents
Definition: vtkAMReXGridReaderInternal.h:154
vtkAMReXGridLevelHeader::PrintSelf
void PrintSelf(std::ostream &os, vtkIndent indent)
vtkDataSet.h
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
vtkX3D::string
@ string
Definition: vtkX3D.h:496
vtkAMReXGridHeader::cellSize
std::vector< std::vector< double > > cellSize
Definition: vtkAMReXGridReaderInternal.h:104
vtkAMReXGridLevelHeader::levelFABArrayMinimum
std::vector< double > levelFABArrayMinimum
Definition: vtkAMReXGridReaderInternal.h:165
vtkAMReXGridReaderInternal
Definition: vtkAMReXGridReaderInternal.h:186
vtkAMReXGridReaderInternal::ReadBlockAttribute
void ReadBlockAttribute(std::istream &is, int numberOfPoints, int size, char *buffer)
vtkAMReXGridHeader::levelSteps
std::vector< int > levelSteps
Definition: vtkAMReXGridReaderInternal.h:103
vtkAMReXGridReaderInternal::ReadFAB
void ReadFAB(std::istream &is)
vtkAMReXGridHeader::geometryCoord
int geometryCoord
Definition: vtkAMReXGridReaderInternal.h:105
vtkAMReXGridLevelHeader::ParseLevelHeader
bool ParseLevelHeader(int _level, int _dim, const std::string &headerData)
vtkAMReXGridLevelHeader::PrintSelfLevelHeader
void PrintSelfLevelHeader(std::ostream &os, vtkIndent indent)
vtkAMReXGridReaderInternal::FileName
std::string FileName
Definition: vtkAMReXGridReaderInternal.h:223
vtkAMReXGridReaderInternal::GetBlockAttribute
void GetBlockAttribute(const char *attribute, int blockIdx, vtkDataSet *pDataSet)
vtkAMReXGridReaderInternal::ReadRealDescriptor
RealDescriptor * ReadRealDescriptor(std::istream &is)
vtkAMReXGridReaderInternal::PrintFormat
void PrintFormat(std::vector< long > &ar)
vtkAMReXGridLevelHeader::levelBoxArraySize
int levelBoxArraySize
Definition: vtkAMReXGridReaderInternal.h:156
RealDescriptor::operator==
bool operator==(const RealDescriptor &rd) const
vtkAMReXGridLevelHeader::level
int level
Definition: vtkAMReXGridReaderInternal.h:150
vtkAMReXGridReaderInternal::GetBlockLevel
int GetBlockLevel(const int blockIdx)
vtkAMReXGridLevelHeader::levelRealNumberOfBytes
int levelRealNumberOfBytes
Definition: vtkAMReXGridReaderInternal.h:167
vtkAMReXGridHeader::versionName
std::string versionName
Definition: vtkAMReXGridReaderInternal.h:93
vtkAMReXGridReaderInternal::headersAreRead
bool headersAreRead
Definition: vtkAMReXGridReaderInternal.h:221
vtkAMReXGridLevelHeader::levelRealOrder
int levelRealOrder
Definition: vtkAMReXGridReaderInternal.h:168
RealDescriptor
Definition: vtkAMReXGridReaderInternal.h:65
RealDescriptor::orderarray
const std::vector< int > & orderarray() const &
vtkAMReXGridLevelHeader::levelBoxArrays
std::vector< std::vector< std::vector< int > > > levelBoxArrays
Definition: vtkAMReXGridReaderInternal.h:158
vtkAMReXGridReaderInternal::GetBlockIndexWithinLevel
int GetBlockIndexWithinLevel(int blockIdx, int level)
vtkAMReXGridHeader::time
double time
Definition: vtkAMReXGridReaderInternal.h:97
vtkAMReXGridReaderInternal::ReadVersion
int ReadVersion(std::istream &is)
vtkAMReXGridReaderInternal::DestroyLevelHeader
void DestroyLevelHeader()
vtkAMReXGridReaderInternal::debugReader
bool debugReader
Definition: vtkAMReXGridReaderInternal.h:222
vtkAMReXGridReaderInternal::Convert
void Convert(void *out, const void *in, long nitems, const RealDescriptor &ord, const RealDescriptor &ird)
vtkAMReXGridLevelHeader
Definition: vtkAMReXGridReaderInternal.h:129