You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
376 lines
11 KiB
C++
376 lines
11 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOpenFOAMReader.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkOpenFOAMReader
|
|
* @brief reads a dataset in OpenFOAM format
|
|
*
|
|
* vtkOpenFOAMReader creates a multiblock dataset. It reads mesh
|
|
* information and time dependent data. The polyMesh folders contain
|
|
* mesh information. The time folders contain transient data for the
|
|
* cells. Each folder can contain any number of data files.
|
|
*
|
|
* @par Thanks:
|
|
* Thanks to Terry Jordan of SAIC at the National Energy
|
|
* Technology Laboratory who developed this class.
|
|
* Please address all comments to Terry Jordan (terry.jordan@sa.netl.doe.gov).
|
|
* GUI Based selection of mesh regions and fields available in the case,
|
|
* minor bug fixes, strict memory allocation checks,
|
|
* minor performance enhancements by Philippose Rajan (sarith@rocketmail.com).
|
|
* Token-based FoamFile format lexer/parser,
|
|
* performance/stability/compatibility enhancements, gzipped file
|
|
* support, lagrangian field support, variable timestep support,
|
|
* builtin cell-to-point filter, pointField support, polyhedron
|
|
* decomposition support, OF 1.5 extended format support, multiregion
|
|
* support, old mesh format support, parallelization support for
|
|
* decomposed cases in conjunction with vtkPOpenFOAMReader, et. al. by
|
|
* Takuya Oshima of Niigata University, Japan (oshima@eng.niigata-u.ac.jp).
|
|
*/
|
|
|
|
#ifndef vtkOpenFOAMReader_h
|
|
#define vtkOpenFOAMReader_h
|
|
|
|
#include "vtkIOGeometryModule.h" // For export macro
|
|
#include "vtkMultiBlockDataSetAlgorithm.h"
|
|
|
|
class vtkCollection;
|
|
class vtkCharArray;
|
|
class vtkDataArraySelection;
|
|
class vtkDoubleArray;
|
|
class vtkStdString;
|
|
class vtkStringArray;
|
|
|
|
class vtkOpenFOAMReaderPrivate;
|
|
|
|
class VTKIOGEOMETRY_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm
|
|
{
|
|
public:
|
|
static vtkOpenFOAMReader *New();
|
|
vtkTypeMacro(vtkOpenFOAMReader, vtkMultiBlockDataSetAlgorithm);
|
|
void PrintSelf(ostream &, vtkIndent);
|
|
|
|
/**
|
|
* Determine if the file can be readed with this reader.
|
|
*/
|
|
int CanReadFile(const char *);
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the filename.
|
|
*/
|
|
vtkSetStringMacro(FileName);
|
|
vtkGetStringMacro(FileName);
|
|
//@}
|
|
|
|
/**
|
|
* Get the number of cell arrays available in the input.
|
|
*/
|
|
int GetNumberOfCellArrays(void)
|
|
{ return this->GetNumberOfSelectionArrays(this->CellDataArraySelection); }
|
|
|
|
/**
|
|
* Get/Set whether the cell array with the given name is to
|
|
* be read.
|
|
*/
|
|
int GetCellArrayStatus(const char *name)
|
|
{ return this->GetSelectionArrayStatus(this->CellDataArraySelection, name); }
|
|
void SetCellArrayStatus(const char *name, int status)
|
|
{ this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status); }
|
|
|
|
/**
|
|
* Get the name of the cell array with the given index in
|
|
* the input.
|
|
*/
|
|
const char *GetCellArrayName(int index)
|
|
{ return this->GetSelectionArrayName(this->CellDataArraySelection, index); }
|
|
|
|
/**
|
|
* Turn on/off all cell arrays.
|
|
*/
|
|
void DisableAllCellArrays()
|
|
{ this->DisableAllSelectionArrays(this->CellDataArraySelection); }
|
|
void EnableAllCellArrays()
|
|
{ this->EnableAllSelectionArrays(this->CellDataArraySelection); }
|
|
|
|
/**
|
|
* Get the number of point arrays available in the input.
|
|
*/
|
|
int GetNumberOfPointArrays(void)
|
|
{ return this->GetNumberOfSelectionArrays(this->PointDataArraySelection); }
|
|
|
|
/**
|
|
* Get/Set whether the point array with the given name is to
|
|
* be read.
|
|
*/
|
|
int GetPointArrayStatus(const char *name)
|
|
{ return this->GetSelectionArrayStatus(this->PointDataArraySelection, name); }
|
|
void SetPointArrayStatus(const char *name, int status)
|
|
{ this->SetSelectionArrayStatus(this->PointDataArraySelection,
|
|
name, status); }
|
|
|
|
/**
|
|
* Get the name of the point array with the given index in
|
|
* the input.
|
|
*/
|
|
const char *GetPointArrayName(int index)
|
|
{ return this->GetSelectionArrayName(this->PointDataArraySelection, index); }
|
|
|
|
/**
|
|
* Turn on/off all point arrays.
|
|
*/
|
|
void DisableAllPointArrays()
|
|
{ this->DisableAllSelectionArrays(this->PointDataArraySelection); }
|
|
void EnableAllPointArrays()
|
|
{ this->EnableAllSelectionArrays(this->PointDataArraySelection); }
|
|
|
|
/**
|
|
* Get the number of Lagrangian arrays available in the input.
|
|
*/
|
|
int GetNumberOfLagrangianArrays(void)
|
|
{ return this->GetNumberOfSelectionArrays(
|
|
this->LagrangianDataArraySelection); }
|
|
|
|
/**
|
|
* Get/Set whether the Lagrangian array with the given name is to
|
|
* be read.
|
|
*/
|
|
int GetLagrangianArrayStatus(const char *name)
|
|
{ return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection,
|
|
name); }
|
|
void SetLagrangianArrayStatus(const char *name, int status)
|
|
{ this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name,
|
|
status); }
|
|
|
|
/**
|
|
* Get the name of the Lagrangian array with the given index in
|
|
* the input.
|
|
*/
|
|
const char* GetLagrangianArrayName(int index)
|
|
{ return this->GetSelectionArrayName(this->LagrangianDataArraySelection,
|
|
index); }
|
|
|
|
/**
|
|
* Turn on/off all Lagrangian arrays.
|
|
*/
|
|
void DisableAllLagrangianArrays()
|
|
{ this->DisableAllSelectionArrays(this->LagrangianDataArraySelection); }
|
|
void EnableAllLagrangianArrays()
|
|
{ this->EnableAllSelectionArrays(this->LagrangianDataArraySelection); }
|
|
|
|
/**
|
|
* Get the number of Patches (including Internal Mesh) available in the input.
|
|
*/
|
|
int GetNumberOfPatchArrays(void)
|
|
{ return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection); }
|
|
|
|
/**
|
|
* Get/Set whether the Patch with the given name is to
|
|
* be read.
|
|
*/
|
|
int GetPatchArrayStatus(const char *name)
|
|
{ return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name); }
|
|
void SetPatchArrayStatus(const char *name, int status)
|
|
{ this->SetSelectionArrayStatus(this->PatchDataArraySelection, name,
|
|
status); }
|
|
|
|
/**
|
|
* Get the name of the Patch with the given index in
|
|
* the input.
|
|
*/
|
|
const char *GetPatchArrayName(int index)
|
|
{ return this->GetSelectionArrayName(this->PatchDataArraySelection, index); }
|
|
|
|
/**
|
|
* Turn on/off all Patches including the Internal Mesh.
|
|
*/
|
|
void DisableAllPatchArrays()
|
|
{ this->DisableAllSelectionArrays(this->PatchDataArraySelection); }
|
|
void EnableAllPatchArrays()
|
|
{ this->EnableAllSelectionArrays(this->PatchDataArraySelection); }
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether to create cell-to-point translated data for cell-type data
|
|
*/
|
|
vtkSetMacro(CreateCellToPoint,int);
|
|
vtkGetMacro(CreateCellToPoint,int);
|
|
vtkBooleanMacro(CreateCellToPoint, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether mesh is to be cached.
|
|
*/
|
|
vtkSetMacro(CacheMesh, int);
|
|
vtkGetMacro(CacheMesh, int);
|
|
vtkBooleanMacro(CacheMesh, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether polyhedra are to be decomposed.
|
|
*/
|
|
vtkSetMacro(DecomposePolyhedra, int);
|
|
vtkGetMacro(DecomposePolyhedra, int);
|
|
vtkBooleanMacro(DecomposePolyhedra, int);
|
|
//@}
|
|
|
|
// Option for reading old binary lagrangian/positions format
|
|
//@{
|
|
/**
|
|
* Set/Get whether the lagrangian/positions is in OF 1.3 format
|
|
*/
|
|
vtkSetMacro(PositionsIsIn13Format, int);
|
|
vtkGetMacro(PositionsIsIn13Format, int);
|
|
vtkBooleanMacro(PositionsIsIn13Format, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Determine if time directories are to be listed according to controlDict
|
|
*/
|
|
vtkSetMacro(ListTimeStepsByControlDict, int);
|
|
vtkGetMacro(ListTimeStepsByControlDict, int);
|
|
vtkBooleanMacro(ListTimeStepsByControlDict, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Add dimensions to array names
|
|
*/
|
|
vtkSetMacro(AddDimensionsToArrayNames, int);
|
|
vtkGetMacro(AddDimensionsToArrayNames, int);
|
|
vtkBooleanMacro(AddDimensionsToArrayNames, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether zones will be read.
|
|
*/
|
|
vtkSetMacro(ReadZones, int);
|
|
vtkGetMacro(ReadZones, int);
|
|
vtkBooleanMacro(ReadZones, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* If true, labels are expected to be 64-bit, rather than 32.
|
|
*/
|
|
vtkSetMacro(Use64BitLabels, bool)
|
|
vtkGetMacro(Use64BitLabels, bool)
|
|
vtkBooleanMacro(Use64BitLabels, bool)
|
|
//@}
|
|
|
|
void SetRefresh() { this->Refresh = true; this->Modified(); }
|
|
|
|
void SetParent(vtkOpenFOAMReader *parent) { this->Parent = parent; }
|
|
int MakeInformationVector(vtkInformationVector *, const vtkStdString &);
|
|
bool SetTimeValue(const double);
|
|
vtkDoubleArray *GetTimeValues();
|
|
int MakeMetaDataAtTimeStep(const bool);
|
|
|
|
friend class vtkOpenFOAMReaderPrivate;
|
|
|
|
protected:
|
|
// refresh flag
|
|
bool Refresh;
|
|
|
|
// for creating cell-to-point translated data
|
|
int CreateCellToPoint;
|
|
|
|
// for caching mesh
|
|
int CacheMesh;
|
|
|
|
// for decomposing polyhedra on-the-fly
|
|
int DecomposePolyhedra;
|
|
|
|
// for reading old binary lagrangian/positions format
|
|
int PositionsIsIn13Format;
|
|
|
|
// for reading point/face/cell-Zones
|
|
int ReadZones;
|
|
|
|
// determine if time directories are listed according to controlDict
|
|
int ListTimeStepsByControlDict;
|
|
|
|
// add dimensions to array names
|
|
int AddDimensionsToArrayNames;
|
|
|
|
// Expect label size to be 64-bit integers instead of the default 32.
|
|
bool Use64BitLabels;
|
|
|
|
char *FileName;
|
|
vtkCharArray *CasePath;
|
|
vtkCollection *Readers;
|
|
|
|
// DataArraySelection for Patch / Region Data
|
|
vtkDataArraySelection *PatchDataArraySelection;
|
|
vtkDataArraySelection *CellDataArraySelection;
|
|
vtkDataArraySelection *PointDataArraySelection;
|
|
vtkDataArraySelection *LagrangianDataArraySelection;
|
|
|
|
// old selection status
|
|
vtkMTimeType PatchSelectionMTimeOld;
|
|
vtkMTimeType CellSelectionMTimeOld;
|
|
vtkMTimeType PointSelectionMTimeOld;
|
|
vtkMTimeType LagrangianSelectionMTimeOld;
|
|
|
|
// preserved old information
|
|
vtkStdString *FileNameOld;
|
|
int ListTimeStepsByControlDictOld;
|
|
int CreateCellToPointOld;
|
|
int DecomposePolyhedraOld;
|
|
int PositionsIsIn13FormatOld;
|
|
int AddDimensionsToArrayNamesOld;
|
|
int ReadZonesOld;
|
|
|
|
// paths to Lagrangians
|
|
vtkStringArray *LagrangianPaths;
|
|
|
|
// number of reader instances
|
|
int NumberOfReaders;
|
|
// index of the active reader
|
|
int CurrentReaderIndex;
|
|
|
|
vtkOpenFOAMReader();
|
|
~vtkOpenFOAMReader();
|
|
int RequestInformation(vtkInformation *, vtkInformationVector **,
|
|
vtkInformationVector *);
|
|
int RequestData(vtkInformation *, vtkInformationVector **,
|
|
vtkInformationVector *);
|
|
|
|
void CreateCasePath(vtkStdString &, vtkStdString &);
|
|
void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *);
|
|
void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &);
|
|
void UpdateStatus();
|
|
void UpdateProgress(double);
|
|
|
|
private:
|
|
vtkOpenFOAMReader *Parent;
|
|
|
|
vtkOpenFOAMReader(const vtkOpenFOAMReader&) VTK_DELETE_FUNCTION;
|
|
void operator=(const vtkOpenFOAMReader&) VTK_DELETE_FUNCTION;
|
|
|
|
int GetNumberOfSelectionArrays(vtkDataArraySelection *);
|
|
int GetSelectionArrayStatus(vtkDataArraySelection *, const char *);
|
|
void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int);
|
|
const char *GetSelectionArrayName(vtkDataArraySelection *, int);
|
|
void DisableAllSelectionArrays(vtkDataArraySelection *);
|
|
void EnableAllSelectionArrays(vtkDataArraySelection *);
|
|
|
|
void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *);
|
|
};
|
|
|
|
#endif
|