00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00034 #ifndef __vtkMFIXReader_h
00035 #define __vtkMFIXReader_h
00036
00037 #include "vtkUnstructuredGridAlgorithm.h"
00038
00039 class vtkDataArraySelection;
00040 class vtkDoubleArray;
00041 class vtkStringArray;
00042 class vtkIntArray;
00043 class vtkFloatArray;
00044 class vtkXMLUnstructuredGridWriter;
00045 class vtkWedge;
00046 class vtkQuad;
00047 class vtkHexahedron;
00048 class vtkPoints;
00049 class vtkStdString;
00050
00051 class VTK_IO_EXPORT vtkMFIXReader : public vtkUnstructuredGridAlgorithm
00052 {
00053 public:
00054 static vtkMFIXReader *New();
00055 vtkTypeMacro(vtkMFIXReader,vtkUnstructuredGridAlgorithm);
00056 void PrintSelf(ostream& os, vtkIndent indent);
00057
00059
00060 vtkSetStringMacro(FileName);
00061 vtkGetStringMacro(FileName);
00063
00065
00067 vtkGetMacro(NumberOfCells,int);
00069
00071
00073 vtkGetMacro(NumberOfPoints,int);
00075
00077
00078 vtkGetMacro(NumberOfCellFields,int);
00080
00082
00083 vtkSetMacro(TimeStep, int);
00084 vtkGetMacro(TimeStep, int);
00086
00088
00089 vtkGetMacro(NumberOfTimeSteps, int);
00091
00093
00094 vtkGetVector2Macro(TimeStepRange, int);
00095 vtkSetVector2Macro(TimeStepRange, int);
00097
00099 int GetNumberOfCellArrays(void);
00100
00102 const char* GetCellArrayName(int index);
00103
00105
00106 int GetCellArrayStatus(const char* name);
00107 void SetCellArrayStatus(const char* name, int status);
00109
00111
00112 void DisableAllCellArrays();
00113 void EnableAllCellArrays();
00115
00117 void GetCellDataRange(int cellComp, int index, float *min, float *max);
00118
00119 protected:
00120 vtkMFIXReader();
00121 ~vtkMFIXReader();
00122 int RequestInformation(vtkInformation *,
00123 vtkInformationVector **, vtkInformationVector *);
00124 int RequestData(vtkInformation *,
00125 vtkInformationVector **, vtkInformationVector *);
00126
00127
00128
00129
00130
00131 char *FileName;
00132 int RequestInformationFlag;
00133 int MakeMeshFlag;
00134 int NumberOfPoints;
00135 int NumberOfCells;
00136 int NumberOfCellFields;
00137 vtkIntArray *VectorLength;
00138 vtkFloatArray *Minimum;
00139 vtkFloatArray *Maximum;
00140 vtkDataArraySelection *CellDataArraySelection;
00141 int TimeStep;
00142 int ActualTimeStep;
00143 int CurrentTimeStep;
00144 int NumberOfTimeSteps;
00145 int *TimeSteps;
00146 int TimeStepRange[2];
00147 int TimeStepWasReadOnce;
00148
00149
00150
00151
00152
00153 vtkFloatArray **CellDataArray;
00154
00155 vtkPoints *Points;
00156 vtkUnstructuredGrid *Mesh;
00157 vtkHexahedron *AHexahedron;
00158 vtkWedge *AWedge;
00159 vtkQuad *AQuad;
00160 vtkIntArray *Flag;
00161 vtkDoubleArray *Dx;
00162 vtkDoubleArray *Dy;
00163 vtkDoubleArray *Dz;
00164 vtkIntArray *NMax;
00165 vtkDoubleArray *C;
00166 vtkIntArray *TempI;
00167 vtkDoubleArray *TempD;
00168 vtkIntArray *SpxFileExists;
00169
00170
00171 char FileExtension[15];
00172 char DataBuffer[513];
00173 char Version[120];
00174 float VersionNumber;
00175 int DimensionIc;
00176 int DimensionBc;
00177 int DimensionC;
00178 int DimensionIs;
00179 double Ce;
00180 double Cf;
00181 double Phi;
00182 double PhiW;
00183 double DeltaTime;
00184 double XMinimum;
00185 char RunName[256];
00186 vtkStringArray *VariableNames;
00187 vtkIntArray *VariableComponents;
00188 int IMinimum1;
00189 int JMinimum1;
00190 int KMinimum1;
00191 int IMaximum;
00192 int JMaximum;
00193 int KMaximum;
00194 int IMaximum1;
00195 int JMaximum1;
00196 int KMaximum1;
00197 int IMaximum2;
00198 int JMaximum2;
00199 int KMaximum2;
00200 int IJMaximum2;
00201 int IJKMaximum2;
00202 int MMAX;
00203 int NumberOfSPXFilesUsed;
00204 double XLength;
00205 double YLength;
00206 double ZLength;
00207 int NumberOfScalars;
00208 int NumberOfReactionRates;
00209 bool BkEpsilon;
00210 char CoordinateSystem[17];
00211 char Units[17];
00212
00213
00214
00215
00216
00217 int MaximumTimestep;
00218 int SPXRecordsPerTimestep;
00219
00220 vtkIntArray *SPXToNVarTable;
00221 vtkIntArray *VariableToSkipTable;
00222
00223
00224 vtkIntArray *VariableTimesteps;
00225 vtkIntArray *VariableTimestepTable;
00226
00227
00228
00229
00230 vtkIntArray *variableIndexToSPX;
00231
00232 vtkIntArray *VariableIndexToSPX;
00233
00234 vtkIntArray *SPXTimestepIndexTable;
00235
00236
00237 private:
00238 vtkMFIXReader(const vtkMFIXReader&);
00239 void operator=(const vtkMFIXReader&);
00240
00241 void MakeMesh(vtkUnstructuredGrid *output);
00242 void SwapDouble(double &value);
00243 void SwapFloat(float &value);
00244 void SwapInt(int &value);
00245 vtkStdString ConvertIntToString(int in);
00246 int ConvertCharToInt(char in);
00247 int ConvertStringToInt(const vtkStdString & in);
00248 void GetInt(istream& in, int &val);
00249 void GetDouble(istream& in, double& val);
00250 void GetFloat(istream& in, float& val);
00251 void SkipBytes(istream& in, int n);
00252 void RestartVersionNumber(const char* buffer);
00253 void GetBlockOfDoubles(istream& in, vtkDoubleArray *v, int n);
00254 void GetBlockOfFloats(istream& in, vtkFloatArray *v, int n);
00255 void GetBlockOfInts(istream& in, vtkIntArray *v, int n);
00256 void ReadRestartFile();
00257 void GetVariableAtTimestep(int vari , int tstep, vtkFloatArray *v);
00258 void CreateVariableNames();
00259 void GetTimeSteps();
00260 void MakeTimeStepTable(int nvars);
00261 void SetProjectName (const char *infile);
00262 void MakeSPXTimeStepIndexTable(int nvars);
00263 void CalculateMaxTimeStep();
00264 void GetNumberOfVariablesInSPXFiles();
00265 void FillVectorVariable( int xindex, int yindex, int zindex,
00266 vtkFloatArray *v);
00267 void ConvertVectorFromCylindricalToCartesian( int xindex, int zindex);
00268 void GetAllTimes(vtkInformationVector *outputVector);
00269
00270 };
00271
00272 #endif