VTK  9.7.1
vtkEnSightGoldBinaryReader.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
31 #ifndef vtkEnSightGoldBinaryReader_h
32 #define vtkEnSightGoldBinaryReader_h
33 
34 #include "vtkEnSightReader.h"
35 #include "vtkIOEnSightModule.h" // For export macro
36 
37 VTK_ABI_NAMESPACE_BEGIN
39 
40 class VTKIOENSIGHT_EXPORT vtkEnSightGoldBinaryReader : public vtkEnSightReader
41 {
42 public:
45  void PrintSelf(ostream& os, vtkIndent indent) override;
46 
47 protected:
49  ~vtkEnSightGoldBinaryReader() override;
50 
51  // Returns 1 if successful. Sets file size as a side action.
52  int OpenFile(const char* filename);
53 
54  // Returns 1 if successful. Handles constructing the filename, opening the file and checking
55  // if it's binary
56  int InitializeFile(const char* filename);
57 
61  int ReadGeometryFile(const char* fileName, int timeStep, vtkMultiBlockDataSet* output) override;
62 
68  const char* fileName, int timeStep, vtkMultiBlockDataSet* output) override;
69 
75  int ReadScalarsPerNode(const char* fileName, const char* description, int timeStep,
76  vtkMultiBlockDataSet* output, int measured = 0, int numberOfComponents = 1,
77  int component = 0) override;
78 
83  int ReadVectorsPerNode(const char* fileName, const char* description, int timeStep,
84  vtkMultiBlockDataSet* output, int measured = 0) override;
85 
90  int ReadAsymmetricTensorsPerNode(const char* fileName, const char* description, int timeStep,
91  vtkMultiBlockDataSet* output) override;
92 
97  int ReadTensorsPerNode(const char* fileName, const char* description, int timeStep,
98  vtkMultiBlockDataSet* output) override;
99 
105  int ReadScalarsPerElement(const char* fileName, const char* description, int timeStep,
106  vtkMultiBlockDataSet* output, int numberOfComponents = 1, int component = 0) override;
107 
112  int ReadVectorsPerElement(const char* fileName, const char* description, int timeStep,
113  vtkMultiBlockDataSet* output) override;
114 
119  int ReadAsymmetricTensorsPerElement(const char* fileName, const char* description, int timeStep,
120  vtkMultiBlockDataSet* output) override;
121 
126  int ReadTensorsPerElement(const char* fileName, const char* description, int timeStep,
127  vtkMultiBlockDataSet* output) override;
128 
135  int partId, char line[80], const char* name, vtkMultiBlockDataSet* output) override;
136 
142  int partId, char line[80], const char* name, vtkMultiBlockDataSet* output) override;
143 
148  int CreateRectilinearGridOutput(
149  int partId, char line[80], const char* name, vtkMultiBlockDataSet* output);
150 
155  int CreateImageDataOutput(
156  int partId, char line[80], const char* name, vtkMultiBlockDataSet* output);
157 
162  int ReadLine(char result[80]);
163 
165 
169  template <typename T>
170  int ReadInt(T* result);
171  int ReadPartId(int* result);
173 
178  int ReadFloat(float* result);
179 
184  int ReadIntArray(int* result, vtkIdType numInts);
185 
190  int ReadLong(vtkTypeInt64* result);
191 
196  int ReadFloatArray(float* result, vtkIdType numFloats);
197 
204  int CountTimeSteps();
205 
207 
210  int SkipTimeStep();
211  int SkipStructuredGrid(char line[256]);
212  int SkipUnstructuredGrid(char line[256]);
213  int SkipRectilinearGrid(char line[256]);
214  int SkipImageData(char line[256]);
216 
220  int SeekToCachedTimeStep(const char* fileName, int realTimeStep);
221 
225  void AddTimeStepToCache(const char* fileName, int realTimeStep, vtkTypeInt64 address);
226 
230  void AddFileIndexToCache(const char* fileName);
231 
234  int Fortran;
235  int FortranSkipBytes; // Number of bytes to skip when seeking within a fortran-written file
236 
237  istream* GoldIFile;
238  // The size of the file could be used to choose byte order.
239  vtkTypeUInt64 FileSize;
240 
241  class FileOffsetMapInternal;
242  FileOffsetMapInternal* FileOffsets;
243 
244 private:
245  int SizeOfInt;
247  void operator=(const vtkEnSightGoldBinaryReader&) = delete;
248 
253  bool OpenVariableFile(const char* fname, const char* variableType);
254 
259  bool SkipToTimeStep(const char* fileName, int timeStep, vtkMultiBlockDataSet* compositeOutput,
260  int attributeType, int numComponents, bool measured);
261 
265  bool ReadMeasureVariableArray(
266  const char* description, vtkMultiBlockDataSet* compositeOutput, int numComponents);
267 
268  bool ReadVariableArray(const char* description, vtkMultiBlockDataSet* compositeOutput,
269  int attributeType, int numComponents, int component = -1);
270 
271  class vtkUtilities;
272  friend class vtkUtilities;
273 };
274 
275 VTK_ABI_NAMESPACE_END
276 #endif
virtual int CreateStructuredGridOutput(int partId, char line[80], const char *name, vtkMultiBlockDataSet *output)=0
Read a structured part from the geometry file and create a vtkStructuredGridOutput.
class to read binary EnSight Gold files
virtual int ReadVectorsPerNode(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output, int measured=0)=0
Read vectors per node for this dataset.
virtual int ReadMeasuredGeometryFile(const char *fileName, int timeStep, vtkMultiBlockDataSet *output)=0
Read the measured geometry file.
virtual int ReadTensorsPerElement(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output)=0
Read tensors per element for this dataset.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int vtkIdType
Definition: vtkType.h:363
virtual int ReadAsymmetricTensorsPerElement(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output)=0
Read asymmetric tensors per element for this dataset.
virtual int ReadGeometryFile(const char *fileName, int timeStep, vtkMultiBlockDataSet *output)=0
Read the geometry file.
virtual int ReadTensorsPerNode(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output)=0
Read tensors per node for this dataset.
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual int ReadScalarsPerElement(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output, int numberOfComponents=1, int component=0)=0
Read scalars per element for this dataset.
superclass for EnSight file readers
static vtkGenericEnSightReader * New()
virtual int ReadAsymmetricTensorsPerNode(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output)=0
Read asymmetric tensors per node for this dataset.
Composite dataset that organizes datasets into blocks.
virtual int CreateUnstructuredGridOutput(int partId, char line[80], const char *name, vtkMultiBlockDataSet *output)=0
Read an unstructured part (partId) from the geometry file and create a vtkUnstructuredGrid output...
virtual int ReadScalarsPerNode(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output, int measured=0, int numberOfComponents=1, int component=0)=0
Read scalars per node for this dataset.
int ReadLine(char result[256])
Internal function to read in a line up to 256 characters.
virtual int ReadVectorsPerElement(const char *fileName, const char *description, int timeStep, vtkMultiBlockDataSet *output)=0
Read vectors per element for this dataset.