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
203class vtkDataArray;
205class vtkIntArray;
212
213namespace Functors
214{
215class ComputeFunctor;
216class ComputeTemperatureFunctor;
217class ComputePressureFunctor;
218class ComputePressureCoefficientFunctor;
219class ComputeMachNumberFunctor;
220class ComputeSoundSpeedFunctor;
221class ComputeEnthalpyFunctor;
222class ComputeKinecticEnergyFunctor;
223class ComputeVelocityMagnitudeFunctor;
224class ComputeEntropyFunctor;
225class ComputeSwirlFunctor;
226class ComputeVelocityFunctor;
227class ComputeVorticityMagnitudeFunctor;
228class ComputePressureGradientFunctor;
229class ComputeVorticityFunctor;
230class ComputeStrainRateFunctor;
231}
232
233class 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
252public:
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*);
275
277
287 void SetQFileName(VTK_FILEPATH const char* name);
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
441 vtkGetMacro(ScalarFunctionNumber, int);
443
445
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
500protected:
503
505
508 double GetTimeValue(const std::string& fname) override;
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
584 int FillOutputPortInformation(int port, vtkInformation* info) override;
585
586 // plot3d FileNames
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
624private:
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 * ComputeVelocity(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int ReadFunctionHeader(FILE *fp, int *nFunctions)
void SetByteOrderToLittleEndian()
Set the byte order of the file (remember, more Unix workstations write big endian whereas PCs write l...
VTK_FILEPATH const char * GetFileName()
Set/Get the PLOT3D geometry filename.
vtkGetFilePathMacro(FunctionFileName)
Set/Get the PLOT3D function filename.
vtkDataArray * ComputeEntropy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
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...
static vtkMultiBlockPLOT3DReader * New()
vtkIdType ReadValues(FILE *fp, int n, vtkDataArray *scalar)
vtkDataArray * ComputeKineticEnergy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
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 * ComputePressureGradient(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.
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.
void CalculateFileSize(FILE *fp)
vtkDataArray * ComputePressureCoefficient(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
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)
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 * ComputeEnthalpy(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeSoundSpeed(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
double GetTimeValue(const std::string &fname) override
Overridden from superclass to do actual reading.
vtkDataArray * ComputeSwirl(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
~vtkMultiBlockPLOT3DReader() override
vtkDataArray * ComputeVelocityMagnitude(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
virtual int ReadScalar(void *vfp, int extent[6], int wextent[6], vtkDataArray *scalar, vtkTypeUInt64 offset, const vtkMultiBlockPLOT3DReaderRecord &currentRecord)
double GetGamma(vtkIdType idx, vtkDataArray *gamma)
VTK_FILEPATH const char * GetFileName(int i)
Set/Get the PLOT3D geometry filename.
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...
VTK_FILEPATH const char * GetQFileName()
Set/Get the PLOT3D solution filename.
std::vector< std::string > FunctionNames
void AddFunction(int functionNumber)
Specify additional functions to read.
void RemoveFunction(int)
Specify additional functions to read.
vtkDataArray * ComputeTemperature(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
vtkSetFilePathMacro(FunctionFileName)
Set/Get the PLOT3D function filename.
int CheckFile(FILE *&fp, const char *fname)
vtkDataArray * NewFloatArray()
void SetScalarFunctionNumber(int num)
Specify the scalar function to extract.
vtkDataArray * ComputeVorticity(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeVorticityMagnitude(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkMultiBlockDataSet * GetOutput(int)
Get the output data object for a port on this algorithm.
int ReadGeometryHeader(FILE *fp)
void MapFunction(int fNumber, vtkStructuredGrid *output)
int SkipByteCount(FILE *fp)
vtkDataArray * CreateFloatArray()
void SetFileName(VTK_FILEPATH const char *name)
Set/Get the PLOT3D geometry filename.
const char * GetByteOrderAsString()
Set the byte order of the file (remember, more Unix workstations write big endian whereas PCs write l...
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...
vtkDataArray * ComputePressure(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
vtkDataArray * ComputeMachNumber(vtkStructuredGrid *output)
Each of these methods compute a derived quantity.
void AddFunctionName(const std::string &name)
int GetNumberOfBlocksInternal(FILE *xyzFp, int allocate)
vtkDataArray * ComputeStrainRate(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.
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
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332
#define VTK_FILEPATH