00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00034 #ifndef __vtkFLUENTReader_h
00035 #define __vtkFLUENTReader_h
00036 
00037 #include "vtkMultiBlockDataSetAlgorithm.h"
00038 
00039 class vtkDataArraySelection;
00040 class vtkPoints;
00041 class vtkTriangle;
00042 class vtkTetra;
00043 class vtkQuad;
00044 class vtkHexahedron;
00045 class vtkPyramid;
00046 class vtkWedge;
00047 class vtkConvexPointSet;
00048 
00049 class VTK_IO_EXPORT vtkFLUENTReader : public vtkMultiBlockDataSetAlgorithm
00050 {
00051 public:
00052   static vtkFLUENTReader *New();
00053   vtkTypeMacro(vtkFLUENTReader,vtkMultiBlockDataSetAlgorithm);
00054   void PrintSelf(ostream& os, vtkIndent indent);
00055 
00057 
00058   vtkSetStringMacro(FileName);
00059   vtkGetStringMacro(FileName);
00061 
00063 
00066   vtkGetMacro(NumberOfCells,int);
00068 
00070   int GetNumberOfCellArrays(void);
00071 
00073   const char* GetCellArrayName(int index);
00074 
00076 
00077   int GetCellArrayStatus(const char* name);
00078   void SetCellArrayStatus(const char* name, int status);
00080 
00082 
00083   void DisableAllCellArrays();
00084   void EnableAllCellArrays();
00086 
00088 
00099   void SetDataByteOrderToBigEndian();
00100   void SetDataByteOrderToLittleEndian();
00101   int  GetDataByteOrder();
00102   void SetDataByteOrder(int);
00103   const char *GetDataByteOrderAsString();
00104   
00105   
00106   
00107   struct Cell;
00108   struct Face;
00109   struct ScalarDataChunk;
00110   struct VectorDataChunk;
00111   struct stdString;
00112   struct intVector;
00113   struct doubleVector;
00114   struct stringVector;
00115   struct cellVector;
00116   struct faceVector;
00117   struct stdMap;
00118   struct scalarDataVector;
00119   struct vectorDataVector;
00120   struct intVectorVector;
00122 
00123 protected:
00124   vtkFLUENTReader();
00125   ~vtkFLUENTReader();
00126   int RequestInformation(vtkInformation *, 
00127     vtkInformationVector **, vtkInformationVector *);
00128   int RequestData(vtkInformation *, vtkInformationVector **, 
00129     vtkInformationVector *);
00130 
00132 
00134   vtkSetMacro(SwapBytes,int);
00135   int GetSwapBytes() {return this->SwapBytes;}
00136   vtkBooleanMacro(SwapBytes,int);
00138 
00139   vtkDataArraySelection* CellDataArraySelection;
00140   char * FileName;
00141   int NumberOfCells;
00142   int NumberOfCellArrays;
00143   virtual bool                   OpenCaseFile(const char *filename);
00144   virtual bool                   OpenDataFile(const char *filename);
00145   virtual int                    GetCaseChunk ();
00146   virtual void                   GetNumberOfCellZones();
00147   virtual int                    GetCaseIndex();
00148   virtual void                   LoadVariableNames();
00149   virtual int                    GetDataIndex();
00150   virtual int                    GetDataChunk();
00151   virtual void                   GetSpeciesVariableNames();
00152 
00153   virtual void                   ParseCaseFile();
00154   virtual int                    GetDimension();
00155   virtual void                   GetLittleEndianFlag();
00156   virtual void                   GetNodesAscii();
00157   virtual void                   GetNodesSinglePrecision();
00158   virtual void                   GetNodesDoublePrecision();
00159   virtual void                   GetCellsAscii();
00160   virtual void                   GetCellsBinary();
00161   virtual void                   GetFacesAscii();
00162   virtual void                   GetFacesBinary();
00163   virtual void                   GetPeriodicShadowFacesAscii();
00164   virtual void                   GetPeriodicShadowFacesBinary();
00165   virtual void                   GetCellTreeAscii();
00166   virtual void                   GetCellTreeBinary();
00167   virtual void                   GetFaceTreeAscii();
00168   virtual void                   GetFaceTreeBinary();
00169   virtual void                   GetInterfaceFaceParentsAscii();
00170   virtual void                   GetInterfaceFaceParentsBinary();
00171   virtual void                   GetNonconformalGridInterfaceFaceInformationAscii();
00172   virtual void                   GetNonconformalGridInterfaceFaceInformationBinary();
00173   virtual void                   GetPartitionInfo() {};
00174   virtual void                   CleanCells();
00175   virtual void                   PopulateCellNodes();
00176   virtual int                    GetCaseBufferInt(int ptr);
00177   virtual float                  GetCaseBufferFloat(int ptr);
00178   virtual double                 GetCaseBufferDouble(int ptr);
00179   virtual void                   PopulateTriangleCell(int i);
00180   virtual void                   PopulateTetraCell(int i);
00181   virtual void                   PopulateQuadCell(int i);
00182   virtual void                   PopulateHexahedronCell(int i);
00183   virtual void                   PopulatePyramidCell(int i);
00184   virtual void                   PopulateWedgeCell(int i);
00185   virtual void                   PopulatePolyhedronCell(int i);
00186   virtual void                   ParseDataFile();
00187   virtual int                    GetDataBufferInt(int ptr);
00188   virtual float                  GetDataBufferFloat(int ptr);
00189   virtual double                 GetDataBufferDouble(int ptr);
00190   virtual void                   GetData(int dataType);
00191   virtual bool                   ParallelCheckCell(int vtkNotUsed(i)) { return true; }
00192 
00193   
00194   
00195   
00196   ifstream *FluentCaseFile;
00197   ifstream *FluentDataFile;
00198   stdString *CaseBuffer;
00199   stdString *DataBuffer;
00200 
00201   vtkPoints           *Points;
00202   vtkTriangle         *Triangle;
00203   vtkTetra            *Tetra;
00204   vtkQuad             *Quad;
00205   vtkHexahedron       *Hexahedron;
00206   vtkPyramid          *Pyramid;
00207   vtkWedge            *Wedge;
00208   vtkConvexPointSet   *ConvexPointSet;
00209 
00210   cellVector *Cells;
00211   faceVector *Faces;
00212   stdMap *VariableNames;
00213   intVector  *CellZones;
00214   scalarDataVector *ScalarDataChunks;
00215   vectorDataVector *VectorDataChunks;
00216 
00217   intVectorVector *SubSectionZones;
00218   intVector *SubSectionIds;
00219   intVector *SubSectionSize;
00220 
00221   stringVector *ScalarVariableNames;
00222   intVector *ScalarSubSectionIds;
00223   stringVector *VectorVariableNames;
00224   intVector *VectorSubSectionIds;
00225 
00226   int SwapBytes;
00227   int GridDimension;
00228   int DataPass;
00229   int NumberOfScalars;
00230   int NumberOfVectors;
00231 
00232 private:
00233   vtkFLUENTReader(const vtkFLUENTReader&);  
00234   void operator=(const vtkFLUENTReader&);  
00235 };
00236 #endif