VTK
dox/IO/vtkOpenFOAMReader.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkOpenFOAMReader.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00040 #ifndef __vtkOpenFOAMReader_h
00041 #define __vtkOpenFOAMReader_h
00042 
00043 #include "vtkMultiBlockDataSetAlgorithm.h"
00044 
00045 class vtkCollection;
00046 class vtkCharArray;
00047 class vtkDataArraySelection;
00048 class vtkDoubleArray;
00049 class vtkStdString;
00050 class vtkStringArray;
00051 
00052 class vtkOpenFOAMReaderPrivate;
00053 
00054 class VTK_IO_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm
00055 {
00056 public:
00057   static vtkOpenFOAMReader *New();
00058   vtkTypeMacro(vtkOpenFOAMReader, vtkMultiBlockDataSetAlgorithm);
00059   void PrintSelf(ostream &, vtkIndent);
00060 
00062   int CanReadFile(const char *);
00063 
00065 
00066   vtkSetStringMacro(FileName);
00067   vtkGetStringMacro(FileName);
00069 
00071 
00072   int GetNumberOfCellArrays(void)
00073   { return this->GetNumberOfSelectionArrays(this->CellDataArraySelection); }
00075 
00077 
00078   int GetCellArrayStatus(const char *name)
00079   { return this->GetSelectionArrayStatus(this->CellDataArraySelection, name); }
00080   void SetCellArrayStatus(const char *name, int status)
00081   { this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status); }
00083 
00085 
00086   const char *GetCellArrayName(int index)
00087   { return this->GetSelectionArrayName(this->CellDataArraySelection, index); }
00089 
00091 
00092   void DisableAllCellArrays()
00093   { this->DisableAllSelectionArrays(this->CellDataArraySelection); }
00094   void EnableAllCellArrays()
00095   { this->EnableAllSelectionArrays(this->CellDataArraySelection); }
00097 
00099 
00100   int GetNumberOfPointArrays(void)
00101   { return this->GetNumberOfSelectionArrays(this->PointDataArraySelection); }
00103 
00105 
00106   int GetPointArrayStatus(const char *name)
00107   { return this->GetSelectionArrayStatus(this->PointDataArraySelection, name); }
00108   void SetPointArrayStatus(const char *name, int status)
00109   { this->SetSelectionArrayStatus(this->PointDataArraySelection,
00110     name, status); }
00112 
00114 
00115   const char *GetPointArrayName(int index)
00116   { return this->GetSelectionArrayName(this->PointDataArraySelection, index); }
00118 
00120 
00121   void DisableAllPointArrays()
00122   { this->DisableAllSelectionArrays(this->PointDataArraySelection); }
00123   void EnableAllPointArrays()
00124   { this->EnableAllSelectionArrays(this->PointDataArraySelection); }
00126 
00128 
00129   int GetNumberOfLagrangianArrays(void)
00130   { return this->GetNumberOfSelectionArrays(
00131     this->LagrangianDataArraySelection); }
00133 
00135 
00137   int GetLagrangianArrayStatus(const char *name)
00138   { return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection,
00139     name); }
00140   void SetLagrangianArrayStatus(const char *name, int status)
00141   { this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name,
00142     status); }
00144 
00146 
00148   const char* GetLagrangianArrayName(int index)
00149   { return this->GetSelectionArrayName(this->LagrangianDataArraySelection,
00150     index); }
00152 
00154 
00155   void DisableAllLagrangianArrays()
00156   { this->DisableAllSelectionArrays(this->LagrangianDataArraySelection); }
00157   void EnableAllLagrangianArrays()
00158   { this->EnableAllSelectionArrays(this->LagrangianDataArraySelection); }
00160 
00162 
00164   int GetNumberOfPatchArrays(void)
00165   { return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection); }
00167 
00169 
00170   int GetPatchArrayStatus(const char *name)
00171   { return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name); }
00172   void SetPatchArrayStatus(const char *name, int status)
00173   { this->SetSelectionArrayStatus(this->PatchDataArraySelection, name,
00174     status); }
00176 
00178 
00179   const char *GetPatchArrayName(int index)
00180   { return this->GetSelectionArrayName(this->PatchDataArraySelection, index); }
00182 
00184 
00185   void DisableAllPatchArrays()
00186   { this->DisableAllSelectionArrays(this->PatchDataArraySelection); }
00187   void EnableAllPatchArrays()
00188   { this->EnableAllSelectionArrays(this->PatchDataArraySelection); }
00190 
00192 
00194   vtkSetMacro(CreateCellToPoint,int);
00195   vtkGetMacro(CreateCellToPoint,int);
00196   vtkBooleanMacro(CreateCellToPoint, int);
00198 
00200 
00201   vtkSetMacro(CacheMesh, int);
00202   vtkGetMacro(CacheMesh, int);
00203   vtkBooleanMacro(CacheMesh, int);
00205 
00207 
00208   vtkSetMacro(DecomposePolyhedra, int);
00209   vtkGetMacro(DecomposePolyhedra, int);
00210   vtkBooleanMacro(DecomposePolyhedra, int);
00212 
00213   // Option for reading old binary lagrangian/positions format
00215 
00216   vtkSetMacro(PositionsIsIn13Format, int);
00217   vtkGetMacro(PositionsIsIn13Format, int);
00218   vtkBooleanMacro(PositionsIsIn13Format, int);
00220 
00222 
00224   vtkSetMacro(ListTimeStepsByControlDict, int);
00225   vtkGetMacro(ListTimeStepsByControlDict, int);
00226   vtkBooleanMacro(ListTimeStepsByControlDict, int);
00228 
00230 
00231   vtkSetMacro(AddDimensionsToArrayNames, int);
00232   vtkGetMacro(AddDimensionsToArrayNames, int);
00233   vtkBooleanMacro(AddDimensionsToArrayNames, int);
00235 
00237 
00238   vtkSetMacro(ReadZones, int);
00239   vtkGetMacro(ReadZones, int);
00240   vtkBooleanMacro(ReadZones, int);
00242 
00243   void SetRefresh() { this->Refresh = true; this->Modified(); }
00244 
00245   void SetParent(vtkOpenFOAMReader *parent) { this->Parent = parent; }
00246   int MakeInformationVector(vtkInformationVector *, const vtkStdString &);
00247   bool SetTimeValue(const double);
00248   vtkDoubleArray *GetTimeValues();
00249   int MakeMetaDataAtTimeStep(const bool);
00250 
00251   //BTX
00252   friend class vtkOpenFOAMReaderPrivate;
00253   //ETX
00254 
00255 protected:
00256   // refresh flag
00257   bool Refresh;
00258 
00259   // for creating cell-to-point translated data
00260   int CreateCellToPoint;
00261 
00262   // for caching mesh
00263   int CacheMesh;
00264 
00265   // for decomposing polyhedra on-the-fly
00266   int DecomposePolyhedra;
00267 
00268   // for reading old binary lagrangian/positions format
00269   int PositionsIsIn13Format;
00270 
00271   // for reading point/face/cell-Zones
00272   int ReadZones;
00273 
00274   // determine if time directories are listed according to controlDict
00275   int ListTimeStepsByControlDict;
00276 
00277   // add dimensions to array names
00278   int AddDimensionsToArrayNames;
00279 
00280   char *FileName;
00281   vtkCharArray *CasePath;
00282   vtkCollection *Readers;
00283 
00284   // DataArraySelection for Patch / Region Data
00285   vtkDataArraySelection *PatchDataArraySelection;
00286   vtkDataArraySelection *CellDataArraySelection;
00287   vtkDataArraySelection *PointDataArraySelection;
00288   vtkDataArraySelection *LagrangianDataArraySelection;
00289 
00290   // old selection status
00291   unsigned long int PatchSelectionMTimeOld;
00292   unsigned long int CellSelectionMTimeOld;
00293   unsigned long int PointSelectionMTimeOld;
00294   unsigned long int LagrangianSelectionMTimeOld;
00295 
00296   // preserved old information
00297   vtkStdString *FileNameOld;
00298   int ListTimeStepsByControlDictOld;
00299   int CreateCellToPointOld;
00300   int DecomposePolyhedraOld;
00301   int PositionsIsIn13FormatOld;
00302   int AddDimensionsToArrayNamesOld;
00303   int ReadZonesOld;
00304 
00305   // paths to Lagrangians
00306   vtkStringArray *LagrangianPaths;
00307 
00308   // number of reader instances
00309   int NumberOfReaders;
00310   // index of the active reader
00311   int CurrentReaderIndex;
00312 
00313   vtkOpenFOAMReader();
00314   ~vtkOpenFOAMReader();
00315   int RequestInformation(vtkInformation *, vtkInformationVector **,
00316     vtkInformationVector *);
00317   int RequestData(vtkInformation *, vtkInformationVector **,
00318     vtkInformationVector *);
00319 
00320   void CreateCasePath(vtkStdString &, vtkStdString &);
00321   void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *);
00322   void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &);
00323   void UpdateStatus();
00324   void UpdateProgress(double);
00325 
00326 private:
00327   vtkOpenFOAMReader *Parent;
00328 
00329   vtkOpenFOAMReader(const vtkOpenFOAMReader&);  // Not implemented.
00330   void operator=(const vtkOpenFOAMReader&);  // Not implemented.
00331 
00332   int GetNumberOfSelectionArrays(vtkDataArraySelection *);
00333   int GetSelectionArrayStatus(vtkDataArraySelection *, const char *);
00334   void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int);
00335   const char *GetSelectionArrayName(vtkDataArraySelection *, int);
00336   void DisableAllSelectionArrays(vtkDataArraySelection *);
00337   void EnableAllSelectionArrays(vtkDataArraySelection *);
00338 
00339   void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *);
00340 };
00341 
00342 #endif