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.
256 lines
7.4 KiB
C
256 lines
7.4 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkFLUENTReader.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 vtkFLUENTReader
|
||
|
* @brief reads a dataset in Fluent file format
|
||
|
*
|
||
|
* vtkFLUENTReader creates an unstructured grid dataset. It reads .cas and
|
||
|
* .dat files stored in FLUENT native format.
|
||
|
*
|
||
|
* @par Thanks:
|
||
|
* Thanks to Brian W. Dotson & Terry E. Jordan (Department of Energy, National
|
||
|
* Energy Technology Laboratory) & Douglas McCorkle (Iowa State University)
|
||
|
* who developed this class.
|
||
|
* Please address all comments to Brian Dotson (brian.dotson@netl.doe.gov) &
|
||
|
* Terry Jordan (terry.jordan@sa.netl.doe.gov)
|
||
|
* & Doug McCorkle (mccdo@iastate.edu)
|
||
|
*
|
||
|
*
|
||
|
* @sa
|
||
|
* vtkGAMBITReader
|
||
|
*/
|
||
|
|
||
|
#ifndef vtkFLUENTReader_h
|
||
|
#define vtkFLUENTReader_h
|
||
|
|
||
|
#include "vtkIOGeometryModule.h" // For export macro
|
||
|
#include "vtkMultiBlockDataSetAlgorithm.h"
|
||
|
|
||
|
class vtkDataArraySelection;
|
||
|
class vtkPoints;
|
||
|
class vtkTriangle;
|
||
|
class vtkTetra;
|
||
|
class vtkQuad;
|
||
|
class vtkHexahedron;
|
||
|
class vtkPyramid;
|
||
|
class vtkWedge;
|
||
|
class vtkConvexPointSet;
|
||
|
|
||
|
class VTKIOGEOMETRY_EXPORT vtkFLUENTReader : public vtkMultiBlockDataSetAlgorithm
|
||
|
{
|
||
|
public:
|
||
|
static vtkFLUENTReader* New();
|
||
|
vtkTypeMacro(vtkFLUENTReader, vtkMultiBlockDataSetAlgorithm);
|
||
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Specify the file name of the Fluent case file to read.
|
||
|
*/
|
||
|
vtkSetStringMacro(FileName);
|
||
|
vtkGetStringMacro(FileName);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get the total number of cells. The number of cells is only valid after a
|
||
|
* successful read of the data file is performed. Initial value is 0.
|
||
|
*/
|
||
|
vtkGetMacro(NumberOfCells, vtkIdType);
|
||
|
//@}
|
||
|
|
||
|
/**
|
||
|
* Get the number of cell arrays available in the input.
|
||
|
*/
|
||
|
int GetNumberOfCellArrays(void);
|
||
|
|
||
|
/**
|
||
|
* Get the name of the cell array with the given index in
|
||
|
* the input.
|
||
|
*/
|
||
|
const char* GetCellArrayName(int index);
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Get/Set whether the cell array with the given name is to
|
||
|
* be read.
|
||
|
*/
|
||
|
int GetCellArrayStatus(const char* name);
|
||
|
void SetCellArrayStatus(const char* name, int status);
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Turn on/off all cell arrays.
|
||
|
*/
|
||
|
void DisableAllCellArrays();
|
||
|
void EnableAllCellArrays();
|
||
|
//@}
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* These methods should be used instead of the SwapBytes methods.
|
||
|
* They indicate the byte ordering of the file you are trying
|
||
|
* to read in. These methods will then either swap or not swap
|
||
|
* the bytes depending on the byte ordering of the machine it is
|
||
|
* being run on. For example, reading in a BigEndian file on a
|
||
|
* BigEndian machine will result in no swapping. Trying to read
|
||
|
* the same file on a LittleEndian machine will result in swapping.
|
||
|
* As a quick note most UNIX machines are BigEndian while PC's
|
||
|
* and VAX tend to be LittleEndian. So if the file you are reading
|
||
|
* in was generated on a VAX or PC, SetDataByteOrderToLittleEndian
|
||
|
* otherwise SetDataByteOrderToBigEndian. Not used when reading
|
||
|
* text files.
|
||
|
*/
|
||
|
void SetDataByteOrderToBigEndian();
|
||
|
void SetDataByteOrderToLittleEndian();
|
||
|
int GetDataByteOrder();
|
||
|
void SetDataByteOrder(int);
|
||
|
const char* GetDataByteOrderAsString();
|
||
|
//
|
||
|
// Structures
|
||
|
//
|
||
|
struct Cell;
|
||
|
struct Face;
|
||
|
struct ScalarDataChunk;
|
||
|
struct VectorDataChunk;
|
||
|
struct stdString;
|
||
|
struct intVector;
|
||
|
struct doubleVector;
|
||
|
struct stringVector;
|
||
|
struct cellVector;
|
||
|
struct faceVector;
|
||
|
struct stdMap;
|
||
|
struct scalarDataVector;
|
||
|
struct vectorDataVector;
|
||
|
struct intVectorVector;
|
||
|
//@}
|
||
|
|
||
|
protected:
|
||
|
vtkFLUENTReader();
|
||
|
~vtkFLUENTReader() override;
|
||
|
int RequestInformation(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
||
|
|
||
|
//@{
|
||
|
/**
|
||
|
* Set/Get the byte swapping to explicitly swap the bytes of a file.
|
||
|
* Not used when reading text files.
|
||
|
*/
|
||
|
vtkSetMacro(SwapBytes, vtkTypeBool);
|
||
|
vtkTypeBool GetSwapBytes() { return this->SwapBytes; }
|
||
|
vtkBooleanMacro(SwapBytes, vtkTypeBool);
|
||
|
//@}
|
||
|
|
||
|
virtual bool OpenCaseFile(const char* filename);
|
||
|
virtual bool OpenDataFile(const char* filename);
|
||
|
virtual int GetCaseChunk();
|
||
|
virtual void GetNumberOfCellZones();
|
||
|
virtual int GetCaseIndex();
|
||
|
virtual void LoadVariableNames();
|
||
|
virtual int GetDataIndex();
|
||
|
virtual int GetDataChunk();
|
||
|
virtual void GetSpeciesVariableNames();
|
||
|
|
||
|
virtual void ParseCaseFile();
|
||
|
virtual int GetDimension();
|
||
|
virtual void GetLittleEndianFlag();
|
||
|
virtual void GetNodesAscii();
|
||
|
virtual void GetNodesSinglePrecision();
|
||
|
virtual void GetNodesDoublePrecision();
|
||
|
virtual void GetCellsAscii();
|
||
|
virtual void GetCellsBinary();
|
||
|
virtual void GetFacesAscii();
|
||
|
virtual void GetFacesBinary();
|
||
|
virtual void GetPeriodicShadowFacesAscii();
|
||
|
virtual void GetPeriodicShadowFacesBinary();
|
||
|
virtual void GetCellTreeAscii();
|
||
|
virtual void GetCellTreeBinary();
|
||
|
virtual void GetFaceTreeAscii();
|
||
|
virtual void GetFaceTreeBinary();
|
||
|
virtual void GetInterfaceFaceParentsAscii();
|
||
|
virtual void GetInterfaceFaceParentsBinary();
|
||
|
virtual void GetNonconformalGridInterfaceFaceInformationAscii();
|
||
|
virtual void GetNonconformalGridInterfaceFaceInformationBinary();
|
||
|
virtual void GetPartitionInfo() {}
|
||
|
virtual void CleanCells();
|
||
|
virtual void PopulateCellNodes();
|
||
|
virtual int GetCaseBufferInt(int ptr);
|
||
|
virtual float GetCaseBufferFloat(int ptr);
|
||
|
virtual double GetCaseBufferDouble(int ptr);
|
||
|
virtual void PopulateTriangleCell(int i);
|
||
|
virtual void PopulateTetraCell(int i);
|
||
|
virtual void PopulateQuadCell(int i);
|
||
|
virtual void PopulateHexahedronCell(int i);
|
||
|
virtual void PopulatePyramidCell(int i);
|
||
|
virtual void PopulateWedgeCell(int i);
|
||
|
virtual void PopulatePolyhedronCell(int i);
|
||
|
virtual void ParseDataFile();
|
||
|
virtual int GetDataBufferInt(int ptr);
|
||
|
virtual float GetDataBufferFloat(int ptr);
|
||
|
virtual double GetDataBufferDouble(int ptr);
|
||
|
virtual void GetData(int dataType);
|
||
|
virtual bool ParallelCheckCell(int vtkNotUsed(i)) { return true; }
|
||
|
|
||
|
//
|
||
|
// Variables
|
||
|
//
|
||
|
vtkDataArraySelection* CellDataArraySelection;
|
||
|
char* FileName;
|
||
|
vtkIdType NumberOfCells;
|
||
|
int NumberOfCellArrays;
|
||
|
|
||
|
istream* FluentCaseFile;
|
||
|
istream* FluentDataFile;
|
||
|
stdString* CaseBuffer;
|
||
|
stdString* DataBuffer;
|
||
|
|
||
|
vtkPoints* Points;
|
||
|
vtkTriangle* Triangle;
|
||
|
vtkTetra* Tetra;
|
||
|
vtkQuad* Quad;
|
||
|
vtkHexahedron* Hexahedron;
|
||
|
vtkPyramid* Pyramid;
|
||
|
vtkWedge* Wedge;
|
||
|
vtkConvexPointSet* ConvexPointSet;
|
||
|
|
||
|
cellVector* Cells;
|
||
|
faceVector* Faces;
|
||
|
stdMap* VariableNames;
|
||
|
intVector* CellZones;
|
||
|
scalarDataVector* ScalarDataChunks;
|
||
|
vectorDataVector* VectorDataChunks;
|
||
|
|
||
|
intVectorVector* SubSectionZones;
|
||
|
intVector* SubSectionIds;
|
||
|
intVector* SubSectionSize;
|
||
|
|
||
|
stringVector* ScalarVariableNames;
|
||
|
intVector* ScalarSubSectionIds;
|
||
|
stringVector* VectorVariableNames;
|
||
|
intVector* VectorSubSectionIds;
|
||
|
|
||
|
vtkTypeBool SwapBytes;
|
||
|
int GridDimension;
|
||
|
int DataPass;
|
||
|
int NumberOfScalars;
|
||
|
int NumberOfVectors;
|
||
|
|
||
|
private:
|
||
|
vtkFLUENTReader(const vtkFLUENTReader&) = delete;
|
||
|
void operator=(const vtkFLUENTReader&) = delete;
|
||
|
};
|
||
|
#endif
|