VTK  9.3.1
vtkOpenFOAMReader.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
38 #ifndef vtkOpenFOAMReader_h
39 #define vtkOpenFOAMReader_h
40 
41 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_1_0
42 #include "vtkIOGeometryModule.h" // For export macro
44 
45 VTK_ABI_NAMESPACE_BEGIN
46 class vtkCollection;
47 class vtkCharArray;
49 class vtkDoubleArray;
50 class vtkStdString;
51 class vtkStringArray;
52 
53 class vtkOpenFOAMReaderPrivate;
54 
55 class VTKIOGEOMETRY_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm
56 {
57 public:
58  // Access for implementation class
59  friend class vtkOpenFOAMReaderPrivate;
60 
61  static vtkOpenFOAMReader* New();
63  void PrintSelf(ostream& os, vtkIndent indent) override;
64 
68  int CanReadFile(VTK_FILEPATH const char*);
69 
71 
74  vtkSetFilePathMacro(FileName);
75  vtkGetFilePathMacro(FileName);
77 
82  {
83  return this->GetNumberOfSelectionArrays(this->CellDataArraySelection);
84  }
85 
90  int GetCellArrayStatus(const char* name)
91  {
92  return this->GetSelectionArrayStatus(this->CellDataArraySelection, name);
93  }
94  void SetCellArrayStatus(const char* name, int status)
95  {
96  this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status);
97  }
98 
103  const char* GetCellArrayName(int index)
104  {
105  return this->GetSelectionArrayName(this->CellDataArraySelection, index);
106  }
107 
111  void DisableAllCellArrays() { this->DisableAllSelectionArrays(this->CellDataArraySelection); }
112  void EnableAllCellArrays() { this->EnableAllSelectionArrays(this->CellDataArraySelection); }
113 
118  {
119  return this->GetNumberOfSelectionArrays(this->PointDataArraySelection);
120  }
121 
126  int GetPointArrayStatus(const char* name)
127  {
128  return this->GetSelectionArrayStatus(this->PointDataArraySelection, name);
129  }
130  void SetPointArrayStatus(const char* name, int status)
131  {
132  this->SetSelectionArrayStatus(this->PointDataArraySelection, name, status);
133  }
134 
139  const char* GetPointArrayName(int index)
140  {
141  return this->GetSelectionArrayName(this->PointDataArraySelection, index);
142  }
143 
147  void DisableAllPointArrays() { this->DisableAllSelectionArrays(this->PointDataArraySelection); }
148  void EnableAllPointArrays() { this->EnableAllSelectionArrays(this->PointDataArraySelection); }
149 
154  {
155  return this->GetNumberOfSelectionArrays(this->LagrangianDataArraySelection);
156  }
157 
163  {
164  return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection, name);
165  }
166  void SetLagrangianArrayStatus(const char* name, int status)
167  {
168  this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name, status);
169  }
170 
175  const char* GetLagrangianArrayName(int index)
176  {
177  return this->GetSelectionArrayName(this->LagrangianDataArraySelection, index);
178  }
179 
184  {
185  this->DisableAllSelectionArrays(this->LagrangianDataArraySelection);
186  }
188  {
189  this->EnableAllSelectionArrays(this->LagrangianDataArraySelection);
190  }
191 
196  {
197  return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection);
198  }
199 
204  int GetPatchArrayStatus(const char* name)
205  {
206  return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name);
207  }
208  void SetPatchArrayStatus(const char* name, int status)
209  {
210  this->SetSelectionArrayStatus(this->PatchDataArraySelection, name, status);
211  }
212 
217  const char* GetPatchArrayName(int index)
218  {
219  return this->GetSelectionArrayName(this->PatchDataArraySelection, index);
220  }
221 
225  void DisableAllPatchArrays() { this->DisableAllSelectionArrays(this->PatchDataArraySelection); }
226  void EnableAllPatchArrays() { this->EnableAllSelectionArrays(this->PatchDataArraySelection); }
227 
229 
232  vtkSetMacro(CreateCellToPoint, vtkTypeBool);
233  vtkGetMacro(CreateCellToPoint, vtkTypeBool);
234  vtkBooleanMacro(CreateCellToPoint, vtkTypeBool);
236 
238 
245  vtkSetMacro(SizeAverageCellToPoint, vtkTypeBool);
246  vtkGetMacro(SizeAverageCellToPoint, vtkTypeBool);
247  vtkBooleanMacro(SizeAverageCellToPoint, vtkTypeBool);
249 
251 
254  vtkSetMacro(CacheMesh, vtkTypeBool);
255  vtkGetMacro(CacheMesh, vtkTypeBool);
256  vtkBooleanMacro(CacheMesh, vtkTypeBool);
258 
260 
263  VTK_DEPRECATED_IN_9_1_0("Decomposing polyhedra will be removed.")
264  virtual void SetDecomposePolyhedra(vtkTypeBool _arg);
265  vtkGetMacro(DecomposePolyhedra, vtkTypeBool);
266  vtkBooleanMacro(DecomposePolyhedra, vtkTypeBool);
268 
269  // Option for reading old binary lagrangian/positions format
271 
277  vtkSetMacro(PositionsIsIn13Format, vtkTypeBool);
278  vtkGetMacro(PositionsIsIn13Format, vtkTypeBool);
279  vtkBooleanMacro(PositionsIsIn13Format, vtkTypeBool);
281 
283 
287  vtkSetMacro(SkipZeroTime, bool);
288  vtkGetMacro(SkipZeroTime, bool);
289  vtkBooleanMacro(SkipZeroTime, bool);
291 
293 
296  vtkSetMacro(ListTimeStepsByControlDict, vtkTypeBool);
297  vtkGetMacro(ListTimeStepsByControlDict, vtkTypeBool);
298  vtkBooleanMacro(ListTimeStepsByControlDict, vtkTypeBool);
300 
302 
305  vtkSetMacro(AddDimensionsToArrayNames, vtkTypeBool);
306  vtkGetMacro(AddDimensionsToArrayNames, vtkTypeBool);
307  vtkBooleanMacro(AddDimensionsToArrayNames, vtkTypeBool);
309 
311 
314  vtkSetMacro(ReadZones, vtkTypeBool);
315  vtkGetMacro(ReadZones, vtkTypeBool);
316  vtkBooleanMacro(ReadZones, vtkTypeBool);
318 
320 
323  virtual void SetUse64BitLabels(bool val);
324  vtkGetMacro(Use64BitLabels, bool);
325  vtkBooleanMacro(Use64BitLabels, bool);
327 
329 
333  vtkGetMacro(CopyDataToCellZones, bool);
334  vtkSetMacro(CopyDataToCellZones, bool);
335  vtkBooleanMacro(CopyDataToCellZones, bool);
337 
339 
344  virtual void SetUse64BitFloats(bool val);
345  vtkGetMacro(Use64BitFloats, bool);
346  vtkBooleanMacro(Use64BitFloats, bool);
348 
349  void SetRefresh()
350  {
351  this->Refresh = true;
352  this->Modified();
353  }
354 
355  void SetParent(vtkOpenFOAMReader* parent) { this->Parent = parent; }
356 
357  int MakeInformationVector(vtkInformationVector*, const vtkStdString& procDirName,
358  vtkStringArray* timeNames = nullptr, vtkDoubleArray* timeValues = nullptr);
359 
360  double GetTimeValue() const;
361  bool SetTimeValue(double);
362  vtkStringArray* GetTimeNames();
363  vtkDoubleArray* GetTimeValues();
364 
365  int MakeMetaDataAtTimeStep(bool);
366 
367 protected:
368  // refresh flag
369  bool Refresh;
370 
371  // for creating cell-to-point translated data
373 
374  // for running size average for cell to point calculation
375  vtkTypeBool SizeAverageCellToPoint = false;
376 
377  // for caching mesh
379 
380  // for decomposing polyhedra on-the-fly
382 
383  // for lagrangian/positions without extra data (OF 1.4 - 2.4)
385 
386  // for reading point/face/cell-Zones
388 
389  // Ignore 0/ directory
391 
392  // determine if time directories are listed according to controlDict
394 
395  // add dimensions to array names
397 
398  // Expect label size to be 64-bit integers instead of 32-bit.
400 
401  // Expect float data to be 64-bit floats instead of 32-bit.
402  // Note that vtkFloatArrays may still be used -- this just tells the reader how to
403  // parse the binary data.
405 
406  // The data of internal mesh are copied to cell zones
408 
409  char* FileName;
412 
413  // DataArraySelection for Patch / Region Data
418 
419  // old selection status
424 
425  // preserved old information
436 
437  // paths to Lagrangians
439 
440  // number of reader instances
442  // index of the active reader
444 
446  ~vtkOpenFOAMReader() override;
449 
450  void CreateCasePath(vtkStdString&, vtkStdString&);
451  void SetTimeInformation(vtkInformationVector*, vtkDoubleArray*);
452  void CreateCharArrayFromString(vtkCharArray*, const char*, vtkStdString&);
453  void UpdateStatus();
454  void UpdateProgress(double);
455 
456 private:
457  vtkOpenFOAMReader* Parent;
458 
459  vtkOpenFOAMReader(const vtkOpenFOAMReader&) = delete;
460  void operator=(const vtkOpenFOAMReader&) = delete;
461 
462  int GetNumberOfSelectionArrays(vtkDataArraySelection*);
463  int GetSelectionArrayStatus(vtkDataArraySelection*, const char*);
464  void SetSelectionArrayStatus(vtkDataArraySelection*, const char*, int);
465  const char* GetSelectionArrayName(vtkDataArraySelection*, int);
466  void DisableAllSelectionArrays(vtkDataArraySelection*);
467  void EnableAllSelectionArrays(vtkDataArraySelection*);
468 
469  void AddSelectionNames(vtkDataArraySelection*, vtkStringArray*);
470 
471  // Print some time information (names, current time-step)
472  void PrintTimes(std::ostream& os, vtkIndent indent = vtkIndent(), bool full = false) const;
473 };
474 
475 VTK_ABI_NAMESPACE_END
476 #endif
int GetCellArrayStatus(const char *name)
Get/Set whether the cell array with the given name is to be read.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:28
#define VTK_DEPRECATED_IN_9_1_0(reason)
void SetParent(vtkOpenFOAMReader *parent)
void SetLagrangianArrayStatus(const char *name, int status)
int GetPatchArrayStatus(const char *name)
Get/Set whether the Patch with the given name is to be read.
void SetPointArrayStatus(const char *name, int status)
vtkMTimeType LagrangianSelectionMTimeOld
Store vtkAlgorithm input/output information.
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
vtkDataArraySelection * LagrangianDataArraySelection
int GetPointArrayStatus(const char *name)
Get/Set whether the point array with the given name is to be read.
vtkMTimeType CellSelectionMTimeOld
const char * GetCellArrayName(int index)
Get the name of the cell array with the given index in the input.
vtkStringArray * LagrangianPaths
vtkDataArraySelection * CellDataArraySelection
a vtkAbstractArray subclass for strings
vtkTypeBool ListTimeStepsByControlDict
const char * GetPatchArrayName(int index)
Get the name of the Patch with the given index in the input.
Superclass for algorithms that produce only vtkMultiBlockDataSet as output.
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
const char * GetLagrangianArrayName(int index)
Get the name of the Lagrangian array with the given index in the input.
dynamic, self-adjusting array of double
vtkTypeBool CreateCellToPoint
static vtkMultiBlockDataSetAlgorithm * New()
vtkStdString * FileNameOld
int vtkTypeBool
Definition: vtkABI.h:64
void DisableAllCellArrays()
Turn on/off all cell arrays.
dynamic, self-adjusting array of char
Definition: vtkCharArray.h:40
vtkTypeBool AddDimensionsToArrayNames
a simple class to control print indentation
Definition: vtkIndent.h:28
int GetNumberOfCellArrays()
Get the number of cell arrays available in the input.
Store on/off settings for data arrays, etc.
int GetNumberOfPatchArrays()
Get the number of Patches (including Internal Mesh) available in the input.
vtkDataArraySelection * PointDataArraySelection
reads a dataset in OpenFOAM format
virtual void Modified()
Update the modification time for this object.
int GetNumberOfLagrangianArrays()
Get the number of Lagrangian arrays available in the input.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkMTimeType PatchSelectionMTimeOld
void DisableAllPatchArrays()
Turn on/off all Patches including the Internal Mesh.
int GetNumberOfPointArrays()
Get the number of point arrays available in the input.
#define VTK_FILEPATH
void DisableAllLagrangianArrays()
Turn on/off all Lagrangian arrays.
const char * GetPointArrayName(int index)
Get the name of the point array with the given index in the input.
void UpdateProgress(double amount)
Update the progress of the process object.
create and manipulate ordered lists of objects
Definition: vtkCollection.h:44
vtkTypeBool PositionsIsIn13Format
void SetPatchArrayStatus(const char *name, int status)
vtkCharArray * CasePath
void DisableAllPointArrays()
Turn on/off all point arrays.
int GetLagrangianArrayStatus(const char *name)
Get/Set whether the Lagrangian array with the given name is to be read.
Store zero or more vtkInformation instances.
vtkCollection * Readers
vtkMTimeType PointSelectionMTimeOld
void SetCellArrayStatus(const char *name, int status)
vtkTypeBool DecomposePolyhedra
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
vtkDataArraySelection * PatchDataArraySelection