VTK  9.1.0
vtkMultiBlockPLOT3DReader.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMultiBlockPLOT3DReader.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
196 #ifndef vtkMultiBlockPLOT3DReader_h
197 #define vtkMultiBlockPLOT3DReader_h
198 
199 #include "vtkIOParallelModule.h" // For export macro
200 #include "vtkParallelReader.h"
201 #include <vector> // For holding function-names
202 
203 class vtkDataArray;
205 class vtkIntArray;
208 class vtkStructuredGrid;
212 
213 namespace Functors
214 {
215 class ComputeFunctor;
216 class ComputeTemperatureFunctor;
217 class ComputePressureFunctor;
218 class ComputePressureCoefficientFunctor;
219 class ComputeMachNumberFunctor;
220 class ComputeSoundSpeedFunctor;
221 class ComputeEnthalpyFunctor;
222 class ComputeKinecticEnergyFunctor;
223 class ComputeVelocityMagnitudeFunctor;
224 class ComputeEntropyFunctor;
225 class ComputeSwirlFunctor;
226 class ComputeVelocityFunctor;
227 class ComputeVorticityMagnitudeFunctor;
228 class ComputePressureGradientFunctor;
229 class ComputeVorticityFunctor;
230 class ComputeStrainRateFunctor;
231 }
232 
233 class VTKIOPARALLEL_EXPORT vtkMultiBlockPLOT3DReader : public vtkParallelReader
234 {
235  friend class Functors::ComputeFunctor;
236  friend class Functors::ComputeTemperatureFunctor;
237  friend class Functors::ComputePressureFunctor;
238  friend class Functors::ComputePressureCoefficientFunctor;
239  friend class Functors::ComputeMachNumberFunctor;
240  friend class Functors::ComputeSoundSpeedFunctor;
241  friend class Functors::ComputeEnthalpyFunctor;
242  friend class Functors::ComputeKinecticEnergyFunctor;
243  friend class Functors::ComputeVelocityMagnitudeFunctor;
244  friend class Functors::ComputeEntropyFunctor;
245  friend class Functors::ComputeSwirlFunctor;
246  friend class Functors::ComputeVelocityFunctor;
247  friend class Functors::ComputeVorticityMagnitudeFunctor;
248  friend class Functors::ComputePressureGradientFunctor;
249  friend class Functors::ComputeVorticityFunctor;
250  friend class Functors::ComputeStrainRateFunctor;
251 
252 public:
255  void PrintSelf(ostream& os, vtkIndent indent) override;
256 
258 
264 
266 
269  void SetFileName(VTK_FILEPATH const char* name) { this->SetXYZFileName(name); }
270  VTK_FILEPATH const char* GetFileName() { return this->GetXYZFileName(); }
271  VTK_FILEPATH const char* GetFileName(int i) { return this->vtkParallelReader::GetFileName(i); }
272  virtual void SetXYZFileName(VTK_FILEPATH const char*);
273  vtkGetFilePathMacro(XYZFileName);
275 
277 
287  void SetQFileName(VTK_FILEPATH const char* name);
288  VTK_FILEPATH const char* GetQFileName();
290 
292 
295  vtkSetFilePathMacro(FunctionFileName);
296  vtkGetFilePathMacro(FunctionFileName);
298 
300 
310  vtkSetMacro(AutoDetectFormat, vtkTypeBool);
311  vtkGetMacro(AutoDetectFormat, vtkTypeBool);
312  vtkBooleanMacro(AutoDetectFormat, vtkTypeBool);
314 
316 
320  vtkSetMacro(BinaryFile, vtkTypeBool);
321  vtkGetMacro(BinaryFile, vtkTypeBool);
322  vtkBooleanMacro(BinaryFile, vtkTypeBool);
324 
326 
332  vtkSetMacro(MultiGrid, vtkTypeBool);
333  vtkGetMacro(MultiGrid, vtkTypeBool);
334  vtkBooleanMacro(MultiGrid, vtkTypeBool);
336 
338 
343  vtkSetMacro(HasByteCount, vtkTypeBool);
344  vtkGetMacro(HasByteCount, vtkTypeBool);
345  vtkBooleanMacro(HasByteCount, vtkTypeBool);
347 
349 
354  vtkSetMacro(IBlanking, vtkTypeBool);
355  vtkGetMacro(IBlanking, vtkTypeBool);
356  vtkBooleanMacro(IBlanking, vtkTypeBool);
358 
360 
364  vtkSetMacro(TwoDimensionalGeometry, vtkTypeBool);
365  vtkGetMacro(TwoDimensionalGeometry, vtkTypeBool);
366  vtkBooleanMacro(TwoDimensionalGeometry, vtkTypeBool);
368 
370 
375  vtkSetMacro(DoublePrecision, vtkTypeBool);
376  vtkGetMacro(DoublePrecision, vtkTypeBool);
377  vtkBooleanMacro(DoublePrecision, vtkTypeBool);
379 
381 
387  vtkSetMacro(ForceRead, vtkTypeBool);
388  vtkGetMacro(ForceRead, vtkTypeBool);
389  vtkBooleanMacro(ForceRead, vtkTypeBool);
391 
393 
401  vtkSetMacro(ByteOrder, int);
402  vtkGetMacro(ByteOrder, int);
403  const char* GetByteOrderAsString();
405 
407 
410  vtkSetMacro(R, double);
411  vtkGetMacro(R, double);
413 
415 
418  vtkSetMacro(Gamma, double);
419  vtkGetMacro(Gamma, double);
421 
423 
431  vtkSetMacro(PreserveIntermediateFunctions, bool);
432  vtkGetMacro(PreserveIntermediateFunctions, bool);
433  vtkBooleanMacro(PreserveIntermediateFunctions, bool);
434 
436 
440  void SetScalarFunctionNumber(int num);
441  vtkGetMacro(ScalarFunctionNumber, int);
443 
445 
449  void SetVectorFunctionNumber(int num);
450  vtkGetMacro(VectorFunctionNumber, int);
452 
454 
459  void AddFunction(int functionNumber);
460  void RemoveFunction(int);
463 
468  virtual int CanReadBinaryFile(VTK_FILEPATH const char* fname);
469 
471 
476  vtkGetObjectMacro(Controller, vtkMultiProcessController);
478 
479  void AddFunctionName(const std::string& name) { FunctionNames.push_back(name); }
480 
481  enum
482  {
483  FILE_BIG_ENDIAN = 0,
484  FILE_LITTLE_ENDIAN = 1
485  };
486 
488 
494  int ReadMetaData(vtkInformation* metadata) override;
495  int ReadMesh(int piece, int npieces, int nghosts, int timestep, vtkDataObject* output) override;
496  int ReadPoints(int piece, int npieces, int nghosts, int timestep, vtkDataObject* output) override;
497  int ReadArrays(int piece, int npieces, int nghosts, int timestep, vtkDataObject* output) override;
499 
500 protected:
503 
505 
508  double GetTimeValue(const std::string& fname) override;
509  int ReadMesh(
510  const std::string& fname, int piece, int npieces, int nghosts, vtkDataObject* output) override;
512  const std::string& fname, int piece, int npieces, int nghosts, vtkDataObject* output) override;
514  const std::string& fname, int piece, int npieces, int nghosts, vtkDataObject* output) override;
516 
518 
519  int CheckFile(FILE*& fp, const char* fname);
520  int CheckGeometryFile(FILE*& xyzFp);
521  int CheckFunctionFile(FILE*& fFp);
522 
524  int SkipByteCount(FILE* fp);
525  int ReadIntBlock(FILE* fp, int n, int* block);
526 
527  vtkIdType ReadValues(FILE* fp, int n, vtkDataArray* scalar);
528  virtual int ReadIntScalar(void* vfp, int extent[6], int wextent[6], vtkDataArray* scalar,
529  vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord& currentRecord);
530  virtual int ReadScalar(void* vfp, int extent[6], int wextent[6], vtkDataArray* scalar,
531  vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord& currentRecord);
532  virtual int ReadVector(void* vfp, int extent[6], int wextent[6], int numDims,
533  vtkDataArray* vector, vtkTypeUInt64 offset,
534  const vtkMultiBlockPLOT3DReaderRecord& currentRecord);
535  virtual int OpenFileForDataRead(void*& fp, const char* fname);
536  virtual void CloseFile(void* fp);
537 
538  int GetNumberOfBlocksInternal(FILE* xyzFp, int allocate);
539 
540  int ReadGeometryHeader(FILE* fp);
541  int ReadQHeader(FILE* fp, bool checkGrid, int& nq, int& nqc, int& overflow);
542  int ReadFunctionHeader(FILE* fp, int* nFunctions);
543 
544  void CalculateFileSize(FILE* fp);
545 
546  int AutoDetectionCheck(FILE* fp);
547 
548  void AssignAttribute(int fNumber, vtkStructuredGrid* output, int attributeType);
549  void MapFunction(int fNumber, vtkStructuredGrid* output);
550 
552 
572 
573  // Returns a vtkFloatArray or a vtkDoubleArray depending
574  // on DoublePrecision setting
576 
577  // Delete references to any existing vtkPoints and
578  // I-blank arrays. The next Update() will (re)read
579  // the XYZ file.
581 
582  double GetGamma(vtkIdType idx, vtkDataArray* gamma);
583 
585 
586  // plot3d FileNames
587  char* XYZFileName;
588  char* QFileName;
599 
601 
602  size_t FileSize;
603 
604  // parameters used in computing derived functions
605  double R;
606  double Gamma;
607  double GammaInf;
608 
610 
611  // named functions from meta data
612  std::vector<std::string> FunctionNames;
613 
614  // functions to read that are not scalars or vectors
616 
619 
621 
623 
624 private:
626  void operator=(const vtkMultiBlockPLOT3DReader&) = delete;
627 
628  // Key used to flag intermediate results.
629  static vtkInformationIntegerKey* INTERMEDIATE_RESULT();
630 
634  void RemoveIntermediateFunctions(vtkDataSetAttributes* dsa);
635 };
636 
637 #endif
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
general representation of visualization data
represent and manipulate attribute data in a dataset
a simple class to control print indentation
Definition: vtkIndent.h:113
Key for integer values in vtkInformation.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:149
Composite dataset that organizes datasets into blocks.
virtual int OpenFileForDataRead(void *&fp, const char *fname)
vtkDataArray * ComputeSoundSpeed(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * NewFloatArray()
int ReadFunctionHeader(FILE *fp, int *nFunctions)
const char * GetByteOrderAsString()
Set the byte order of the file (remember, more Unix workstations write big endian whereas PCs write l...
void SetByteOrderToLittleEndian()
Set the byte order of the file (remember, more Unix workstations write big endian whereas PCs write l...
VTK_FILEPATH const char * GetQFileName()
Set/Get the PLOT3D solution filename.
vtkGetFilePathMacro(FunctionFileName)
Set/Get the PLOT3D function filename.
int ReadPoints(int piece, int npieces, int nghosts, int timestep, vtkDataObject *output) override
These methods have to be overwritten from superclass because Plot3D actually uses the XYZ file to rea...
vtkIdType ReadValues(FILE *fp, int n, vtkDataArray *scalar)
virtual int CanReadBinaryFile(VTK_FILEPATH const char *fname)
Return 1 if the reader can read the given file name.
vtkMultiBlockDataSet * GetOutput()
Get the output data object for a port on this algorithm.
vtkDataArray * ComputeStrainRate(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int ReadArrays(int piece, int npieces, int nghosts, int timestep, vtkDataObject *output) override
These methods have to be overwritten from superclass because Plot3D actually uses the XYZ file to rea...
void SetVectorFunctionNumber(int num)
Specify the vector function to extract.
vtkDataArray * ComputeEnthalpy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int ReadArrays(const std::string &fname, int piece, int npieces, int nghosts, vtkDataObject *output) override
Overridden from superclass to do actual reading.
virtual void SetXYZFileName(VTK_FILEPATH const char *)
Set/Get the PLOT3D geometry filename.
vtkDataArray * ComputeVelocity(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeVorticity(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeSwirl(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeMachNumber(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeKineticEnergy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
void CalculateFileSize(FILE *fp)
virtual int ReadVector(void *vfp, int extent[6], int wextent[6], int numDims, vtkDataArray *vector, vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord &currentRecord)
int ReadQHeader(FILE *fp, bool checkGrid, int &nq, int &nqc, int &overflow)
virtual void CloseFile(void *fp)
virtual int ReadIntScalar(void *vfp, int extent[6], int wextent[6], vtkDataArray *scalar, vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord &currentRecord)
int ReadMesh(const std::string &fname, int piece, int npieces, int nghosts, vtkDataObject *output) override
Overridden from superclass to do actual reading.
int CheckFunctionFile(FILE *&fFp)
vtkDataArray * ComputeVelocityMagnitude(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int ReadPoints(const std::string &fname, int piece, int npieces, int nghosts, vtkDataObject *output) override
Overridden from superclass to do actual reading.
int CheckGeometryFile(FILE *&xyzFp)
int AutoDetectionCheck(FILE *fp)
vtkMultiProcessController * Controller
void SetQFileName(VTK_FILEPATH const char *name)
Set/Get the PLOT3D solution filename.
void RemoveAllFunctions()
Specify additional functions to read.
int ReadIntBlock(FILE *fp, int n, int *block)
vtkDataArray * CreateFloatArray()
vtkDataArray * ComputeTemperature(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
double GetTimeValue(const std::string &fname) override
Overridden from superclass to do actual reading.
~vtkMultiBlockPLOT3DReader() override
virtual int ReadScalar(void *vfp, int extent[6], int wextent[6], vtkDataArray *scalar, vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord &currentRecord)
double GetGamma(vtkIdType idx, vtkDataArray *gamma)
int ReadMesh(int piece, int npieces, int nghosts, int timestep, vtkDataObject *output) override
These methods have to be overwritten from superclass because Plot3D actually uses the XYZ file to rea...
void SetByteOrderToBigEndian()
Set the byte order of the file (remember, more Unix workstations write big endian whereas PCs write l...
std::vector< std::string > FunctionNames
vtkDataArray * ComputePressure(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeVorticityMagnitude(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
void AddFunction(int functionNumber)
Specify additional functions to read.
VTK_FILEPATH const char * GetFileName()
Set/Get the PLOT3D geometry filename.
void RemoveFunction(int)
Specify additional functions to read.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
vtkDataArray * ComputeEntropy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkSetFilePathMacro(FunctionFileName)
Set/Get the PLOT3D function filename.
int CheckFile(FILE *&fp, const char *fname)
void SetScalarFunctionNumber(int num)
Specify the scalar function to extract.
int ReadGeometryHeader(FILE *fp)
void MapFunction(int fNumber, vtkStructuredGrid *output)
vtkDataArray * ComputePressureGradient(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int SkipByteCount(FILE *fp)
void SetFileName(VTK_FILEPATH const char *name)
Set/Get the PLOT3D geometry filename.
void AssignAttribute(int fNumber, vtkStructuredGrid *output, int attributeType)
vtkMultiBlockPLOT3DReaderInternals * Internal
int ReadMetaData(vtkInformation *metadata) override
These methods have to be overwritten from superclass because Plot3D actually uses the XYZ file to rea...
void AddFunctionName(const std::string &name)
static vtkMultiBlockPLOT3DReader * New()
vtkMultiBlockDataSet * GetOutput(int)
Get the output data object for a port on this algorithm.
int GetNumberOfBlocksInternal(FILE *xyzFp, int allocate)
vtkDataArray * ComputePressureCoefficient(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
VTK_FILEPATH const char * GetFileName(int i)
Set/Get the PLOT3D geometry filename.
vtkGetFilePathMacro(XYZFileName)
Set/Get the PLOT3D geometry filename.
void SetController(vtkMultiProcessController *c)
Set/Get the communicator object (we'll use global World controller if you don't set a different one).
Multiprocessing communication superclass.
Superclass for algorithms that are parallel aware.
VTK_FILEPATH const char * GetFileName(int i) const
Returns a particular filename stored by the reader.
topologically regular array of data
dynamic, self-adjusting array of unsigned char
@ vector
Definition: vtkX3D.h:243
@ info
Definition: vtkX3D.h:382
@ port
Definition: vtkX3D.h:453
@ extent
Definition: vtkX3D.h:351
@ name
Definition: vtkX3D.h:225
@ offset
Definition: vtkX3D.h:444
@ string
Definition: vtkX3D.h:496
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332
#define VTK_FILEPATH