VTK
dox/IO/Geometry/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 =========================================================================*/
00043 #ifndef __vtkOpenFOAMReader_h
00044 #define __vtkOpenFOAMReader_h
00045 
00046 #include "vtkIOGeometryModule.h" // For export macro
00047 #include "vtkMultiBlockDataSetAlgorithm.h"
00048 
00049 class vtkCollection;
00050 class vtkCharArray;
00051 class vtkDataArraySelection;
00052 class vtkDoubleArray;
00053 class vtkStdString;
00054 class vtkStringArray;
00055 
00056 class vtkOpenFOAMReaderPrivate;
00057 
00058 class VTKIOGEOMETRY_EXPORT vtkOpenFOAMReader : public vtkMultiBlockDataSetAlgorithm
00059 {
00060 public:
00061   static vtkOpenFOAMReader *New();
00062   vtkTypeMacro(vtkOpenFOAMReader, vtkMultiBlockDataSetAlgorithm);
00063   void PrintSelf(ostream &, vtkIndent);
00064 
00066   int CanReadFile(const char *);
00067 
00069 
00070   vtkSetStringMacro(FileName);
00071   vtkGetStringMacro(FileName);
00073 
00075 
00076   int GetNumberOfCellArrays(void)
00077   { return this->GetNumberOfSelectionArrays(this->CellDataArraySelection); }
00079 
00081 
00082   int GetCellArrayStatus(const char *name)
00083   { return this->GetSelectionArrayStatus(this->CellDataArraySelection, name); }
00084   void SetCellArrayStatus(const char *name, int status)
00085   { this->SetSelectionArrayStatus(this->CellDataArraySelection, name, status); }
00087 
00089 
00090   const char *GetCellArrayName(int index)
00091   { return this->GetSelectionArrayName(this->CellDataArraySelection, index); }
00093 
00095 
00096   void DisableAllCellArrays()
00097   { this->DisableAllSelectionArrays(this->CellDataArraySelection); }
00098   void EnableAllCellArrays()
00099   { this->EnableAllSelectionArrays(this->CellDataArraySelection); }
00101 
00103 
00104   int GetNumberOfPointArrays(void)
00105   { return this->GetNumberOfSelectionArrays(this->PointDataArraySelection); }
00107 
00109 
00110   int GetPointArrayStatus(const char *name)
00111   { return this->GetSelectionArrayStatus(this->PointDataArraySelection, name); }
00112   void SetPointArrayStatus(const char *name, int status)
00113   { this->SetSelectionArrayStatus(this->PointDataArraySelection,
00114     name, status); }
00116 
00118 
00119   const char *GetPointArrayName(int index)
00120   { return this->GetSelectionArrayName(this->PointDataArraySelection, index); }
00122 
00124 
00125   void DisableAllPointArrays()
00126   { this->DisableAllSelectionArrays(this->PointDataArraySelection); }
00127   void EnableAllPointArrays()
00128   { this->EnableAllSelectionArrays(this->PointDataArraySelection); }
00130 
00132 
00133   int GetNumberOfLagrangianArrays(void)
00134   { return this->GetNumberOfSelectionArrays(
00135     this->LagrangianDataArraySelection); }
00137 
00139 
00141   int GetLagrangianArrayStatus(const char *name)
00142   { return this->GetSelectionArrayStatus(this->LagrangianDataArraySelection,
00143     name); }
00144   void SetLagrangianArrayStatus(const char *name, int status)
00145   { this->SetSelectionArrayStatus(this->LagrangianDataArraySelection, name,
00146     status); }
00148 
00150 
00152   const char* GetLagrangianArrayName(int index)
00153   { return this->GetSelectionArrayName(this->LagrangianDataArraySelection,
00154     index); }
00156 
00158 
00159   void DisableAllLagrangianArrays()
00160   { this->DisableAllSelectionArrays(this->LagrangianDataArraySelection); }
00161   void EnableAllLagrangianArrays()
00162   { this->EnableAllSelectionArrays(this->LagrangianDataArraySelection); }
00164 
00166 
00168   int GetNumberOfPatchArrays(void)
00169   { return this->GetNumberOfSelectionArrays(this->PatchDataArraySelection); }
00171 
00173 
00174   int GetPatchArrayStatus(const char *name)
00175   { return this->GetSelectionArrayStatus(this->PatchDataArraySelection, name); }
00176   void SetPatchArrayStatus(const char *name, int status)
00177   { this->SetSelectionArrayStatus(this->PatchDataArraySelection, name,
00178     status); }
00180 
00182 
00183   const char *GetPatchArrayName(int index)
00184   { return this->GetSelectionArrayName(this->PatchDataArraySelection, index); }
00186 
00188 
00189   void DisableAllPatchArrays()
00190   { this->DisableAllSelectionArrays(this->PatchDataArraySelection); }
00191   void EnableAllPatchArrays()
00192   { this->EnableAllSelectionArrays(this->PatchDataArraySelection); }
00194 
00196 
00198   vtkSetMacro(CreateCellToPoint,int);
00199   vtkGetMacro(CreateCellToPoint,int);
00200   vtkBooleanMacro(CreateCellToPoint, int);
00202 
00204 
00205   vtkSetMacro(CacheMesh, int);
00206   vtkGetMacro(CacheMesh, int);
00207   vtkBooleanMacro(CacheMesh, int);
00209 
00211 
00212   vtkSetMacro(DecomposePolyhedra, int);
00213   vtkGetMacro(DecomposePolyhedra, int);
00214   vtkBooleanMacro(DecomposePolyhedra, int);
00216 
00217   // Option for reading old binary lagrangian/positions format
00219 
00220   vtkSetMacro(PositionsIsIn13Format, int);
00221   vtkGetMacro(PositionsIsIn13Format, int);
00222   vtkBooleanMacro(PositionsIsIn13Format, int);
00224 
00226 
00228   vtkSetMacro(ListTimeStepsByControlDict, int);
00229   vtkGetMacro(ListTimeStepsByControlDict, int);
00230   vtkBooleanMacro(ListTimeStepsByControlDict, int);
00232 
00234 
00235   vtkSetMacro(AddDimensionsToArrayNames, int);
00236   vtkGetMacro(AddDimensionsToArrayNames, int);
00237   vtkBooleanMacro(AddDimensionsToArrayNames, int);
00239 
00241 
00242   vtkSetMacro(ReadZones, int);
00243   vtkGetMacro(ReadZones, int);
00244   vtkBooleanMacro(ReadZones, int);
00246 
00247   void SetRefresh() { this->Refresh = true; this->Modified(); }
00248 
00249   void SetParent(vtkOpenFOAMReader *parent) { this->Parent = parent; }
00250   int MakeInformationVector(vtkInformationVector *, const vtkStdString &);
00251   bool SetTimeValue(const double);
00252   vtkDoubleArray *GetTimeValues();
00253   int MakeMetaDataAtTimeStep(const bool);
00254 
00255   //BTX
00256   friend class vtkOpenFOAMReaderPrivate;
00257   //ETX
00258 
00259 protected:
00260   // refresh flag
00261   bool Refresh;
00262 
00263   // for creating cell-to-point translated data
00264   int CreateCellToPoint;
00265 
00266   // for caching mesh
00267   int CacheMesh;
00268 
00269   // for decomposing polyhedra on-the-fly
00270   int DecomposePolyhedra;
00271 
00272   // for reading old binary lagrangian/positions format
00273   int PositionsIsIn13Format;
00274 
00275   // for reading point/face/cell-Zones
00276   int ReadZones;
00277 
00278   // determine if time directories are listed according to controlDict
00279   int ListTimeStepsByControlDict;
00280 
00281   // add dimensions to array names
00282   int AddDimensionsToArrayNames;
00283 
00284   char *FileName;
00285   vtkCharArray *CasePath;
00286   vtkCollection *Readers;
00287 
00288   // DataArraySelection for Patch / Region Data
00289   vtkDataArraySelection *PatchDataArraySelection;
00290   vtkDataArraySelection *CellDataArraySelection;
00291   vtkDataArraySelection *PointDataArraySelection;
00292   vtkDataArraySelection *LagrangianDataArraySelection;
00293 
00294   // old selection status
00295   unsigned long int PatchSelectionMTimeOld;
00296   unsigned long int CellSelectionMTimeOld;
00297   unsigned long int PointSelectionMTimeOld;
00298   unsigned long int LagrangianSelectionMTimeOld;
00299 
00300   // preserved old information
00301   vtkStdString *FileNameOld;
00302   int ListTimeStepsByControlDictOld;
00303   int CreateCellToPointOld;
00304   int DecomposePolyhedraOld;
00305   int PositionsIsIn13FormatOld;
00306   int AddDimensionsToArrayNamesOld;
00307   int ReadZonesOld;
00308 
00309   // paths to Lagrangians
00310   vtkStringArray *LagrangianPaths;
00311 
00312   // number of reader instances
00313   int NumberOfReaders;
00314   // index of the active reader
00315   int CurrentReaderIndex;
00316 
00317   vtkOpenFOAMReader();
00318   ~vtkOpenFOAMReader();
00319   int RequestInformation(vtkInformation *, vtkInformationVector **,
00320     vtkInformationVector *);
00321   int RequestData(vtkInformation *, vtkInformationVector **,
00322     vtkInformationVector *);
00323 
00324   void CreateCasePath(vtkStdString &, vtkStdString &);
00325   void SetTimeInformation(vtkInformationVector *, vtkDoubleArray *);
00326   void CreateCharArrayFromString(vtkCharArray *, const char *, vtkStdString &);
00327   void UpdateStatus();
00328   void UpdateProgress(double);
00329 
00330 private:
00331   vtkOpenFOAMReader *Parent;
00332 
00333   vtkOpenFOAMReader(const vtkOpenFOAMReader&);  // Not implemented.
00334   void operator=(const vtkOpenFOAMReader&);  // Not implemented.
00335 
00336   int GetNumberOfSelectionArrays(vtkDataArraySelection *);
00337   int GetSelectionArrayStatus(vtkDataArraySelection *, const char *);
00338   void SetSelectionArrayStatus(vtkDataArraySelection *, const char *, int);
00339   const char *GetSelectionArrayName(vtkDataArraySelection *, int);
00340   void DisableAllSelectionArrays(vtkDataArraySelection *);
00341   void EnableAllSelectionArrays(vtkDataArraySelection *);
00342 
00343   void AddSelectionNames(vtkDataArraySelection *, vtkStringArray *);
00344 };
00345 
00346 #endif