37 #ifndef vtkPEnSightReader_h 38 #define vtkPEnSightReader_h 41 #include "vtkPVVTKExtensionsDefaultModule.h" 43 #include "vtkIdTypeArray.h" 53 class vtkMultiBlockDataSet;
55 class vtkInformationVector;
56 class vtkUnsignedCharArray;
57 class vtkUnstructuredGrid;
59 class vtkPEnSightReaderCellIdsType;
61 #define NEXTMODULO3(x) (x == 0) ? 1 : ((x == 1) ? 2 : 0) 67 void PrintSelf(ostream& os, vtkIndent indent);
84 , cellLocalNumberOfIds(-1)
86 , ImplicitDimensions(NULL)
87 , ImplicitLocalDimensions(NULL)
88 , ImplicitSplitDimension(-1)
89 , ImplicitSplitDimensionBeginIndex(-1)
90 , ImplicitSplitDimensionEndIndex(-1)
91 , mode(NON_SPARSE_MODE)
98 , cellLocalNumberOfIds(-1)
100 , ImplicitDimensions(NULL)
101 , ImplicitLocalDimensions(NULL)
102 , ImplicitSplitDimension(-1)
103 , ImplicitSplitDimensionBeginIndex(-1)
104 , ImplicitSplitDimensionEndIndex(-1)
107 if (this->mode == SPARSE_MODE)
109 this->cellMap =
new IntIntMap;
110 this->cellNumberOfIds = 0;
111 this->cellVector = NULL;
113 else if (this->mode == IMPLICIT_STRUCTURED_MODE)
115 this->ImplicitDimensions =
new int[3];
116 this->ImplicitSplitDimension = -1;
117 this->ImplicitSplitDimensionBeginIndex = -1;
118 this->ImplicitSplitDimensionEndIndex = -1;
122 this->cellMap = NULL;
123 this->cellVector =
new IntVector;
124 this->cellNumberOfIds = -1;
125 this->cellLocalNumberOfIds = -1;
131 delete this->cellMap;
132 delete this->cellVector;
133 delete[] this->ImplicitDimensions;
139 if (this->mode == SPARSE_MODE)
141 this->cellMap =
new IntIntMap;
142 this->cellNumberOfIds = 0;
143 this->cellVector = NULL;
145 else if (this->mode == IMPLICIT_STRUCTURED_MODE)
147 this->ImplicitDimensions =
new int[3];
148 this->ImplicitSplitDimension = -1;
149 this->ImplicitSplitDimensionBeginIndex = -1;
150 this->ImplicitSplitDimensionEndIndex = -1;
154 this->cellMap = NULL;
155 this->cellVector =
new IntVector;
156 this->cellNumberOfIds = -1;
157 this->cellLocalNumberOfIds = -1;
163 this->ImplicitDimensions[0] = dim1;
164 this->ImplicitDimensions[1] = dim2;
165 this->ImplicitDimensions[2] = dim3;
172 this->ImplicitSplitDimensionBeginIndex = begin;
182 case SINGLE_PROCESS_MODE:
188 case IMPLICIT_STRUCTURED_MODE:
190 if (this->ImplicitSplitDimension == -1)
196 index[2] =
id / (this->ImplicitDimensions[0] * this->ImplicitDimensions[1]);
197 index[1] = (
id - (index[2] * this->ImplicitDimensions[0] * this->ImplicitDimensions[1])) /
198 this->ImplicitDimensions[0];
199 index[0] =
id - index[1] * this->ImplicitDimensions[0] -
200 index[2] * this->ImplicitDimensions[1] * this->ImplicitDimensions[0];
201 if ((index[this->ImplicitSplitDimension] < this->ImplicitSplitDimensionBeginIndex) ||
202 (index[this->ImplicitSplitDimension] >= this->ImplicitSplitDimensionEndIndex))
212 int dim = this->ImplicitSplitDimension;
213 localIndex[dim] = index[dim] - this->ImplicitSplitDimensionBeginIndex;
215 this->ImplicitSplitDimensionEndIndex - this->ImplicitSplitDimensionBeginIndex;
217 localIndex[dim] = index[dim];
218 localDim[dim] = this->ImplicitDimensions[dim];
220 localDim[dim] = this->ImplicitDimensions[dim];
221 localIndex[dim] = index[dim];
222 return localIndex[0] + localDim[0] * localIndex[1] +
223 localDim[0] * localDim[1] * localIndex[2];
228 std::map<int, int>::iterator it = this->cellMap->find(
id);
229 if (it == this->cellMap->end())
232 return (*this->cellMap)[id];
237 if (this->cellVector->size() > (
unsigned int)(
id))
238 return (*this->cellVector)[id];
249 case SINGLE_PROCESS_MODE:
250 case IMPLICIT_STRUCTURED_MODE:
258 std::map<int, int>::iterator it = this->cellMap->find(
id);
259 if (it == this->cellMap->end())
260 this->cellNumberOfIds++;
262 (*this->cellMap)[
id] = value;
267 if (this->cellVector->size() < (
unsigned int)(
id + 1))
270 int currentSize =
static_cast<int>(this->cellVector->size());
271 this->cellVector->resize(
id + 1);
272 for (k = currentSize; k < id; k++)
274 (*this->cellVector)[k] = -1;
276 (*this->cellVector)[
id] = value;
280 (*this->cellVector)[
id] = value;
292 case SINGLE_PROCESS_MODE:
293 case IMPLICIT_STRUCTURED_MODE:
303 (*this->cellMap)[this->cellNumberOfIds] =
id;
306 this->cellNumberOfIds++;
307 return this->cellNumberOfIds - 1;
312 this->cellVector->push_back(
id);
313 return static_cast<int>(this->cellVector->size() - 1);
317 return static_cast<int>(this->cellVector->size() - 1);
324 case SINGLE_PROCESS_MODE:
327 return this->cellNumberOfIds;
330 case IMPLICIT_STRUCTURED_MODE:
332 return this->cellNumberOfIds;
336 return this->cellNumberOfIds;
350 if (this->cellNumberOfIds >= 0)
352 return this->cellNumberOfIds;
355 return static_cast<int>(this->cellVector->size());
361 if (this->mode == SPARSE_MODE)
368 this->cellNumberOfIds = n;
374 if (this->mode == SPARSE_MODE)
382 this->cellLocalNumberOfIds = n;
388 if (this->mode == SPARSE_MODE)
390 this->cellMap->clear();
391 this->cellNumberOfIds = 0;
395 if (this->mode == NON_SPARSE_MODE)
396 this->cellVector->clear();
397 if (this->cellNumberOfIds >= 0)
398 this->cellNumberOfIds = -1;
399 if (this->cellLocalNumberOfIds >= 0)
400 this->cellLocalNumberOfIds = -1;
408 case SINGLE_PROCESS_MODE:
411 return this->cellNumberOfIds;
414 case IMPLICIT_STRUCTURED_MODE:
416 return this->cellLocalNumberOfIds;
420 return static_cast<int>(this->cellMap->size());
430 if (this->cellLocalNumberOfIds >= 0)
432 return this->cellLocalNumberOfIds;
437 for (
unsigned int i = 0; i < this->cellVector->size(); i++)
439 if ((*this->cellVector)[i] != -1)
449 if (this->mode == IMPLICIT_STRUCTURED_MODE)
451 vtkIdTypeArray* array = vtkIdTypeArray::New();
452 array->SetNumberOfComponents(1);
453 array->SetName(name);
456 int dim = this->ImplicitSplitDimension;
458 this->ImplicitSplitDimensionEndIndex - this->ImplicitSplitDimensionBeginIndex;
460 localDim[dim] = this->ImplicitDimensions[dim];
462 localDim[dim] = this->ImplicitDimensions[dim];
463 array->SetNumberOfTuples(localDim[0] * localDim[1] * localDim[2]);
466 for (
int k = 0; k < this->ImplicitDimensions[2]; k++)
468 for (
int j = 0; j < this->ImplicitDimensions[1]; j++)
470 for (
int i = 0; i < this->ImplicitDimensions[0]; i++)
472 int n = (this->ImplicitSplitDimension == 0)
474 : ((this->ImplicitSplitDimension == 1) ? j : k);
475 if ((n >= this->ImplicitSplitDimensionBeginIndex) &&
476 (n < this->ImplicitSplitDimensionEndIndex))
479 array->SetTypedTuple(index, &nn);
490 vtkIdTypeArray* array = vtkIdTypeArray::New();
491 array->SetNumberOfComponents(1);
492 array->SetName(name);
493 array->SetNumberOfTuples(this->GetLocalNumberOfIds());
494 int min = 1000000000;
496 for (i = 0; i < this->GetNumberOfIds(); i++)
498 int id = this->GetId(i);
506 array->SetTypedTuple(
id, &ii);
551 NUMBER_OF_ELEMENT_TYPES = 17
558 TENSOR_SYMM_PER_NODE = 2,
559 SCALAR_PER_ELEMENT = 3,
560 VECTOR_PER_ELEMENT = 4,
561 TENSOR_SYMM_PER_ELEMENT = 5,
562 SCALAR_PER_MEASURED_NODE = 6,
563 VECTOR_PER_MEASURED_NODE = 7,
564 COMPLEX_SCALAR_PER_NODE = 8,
565 COMPLEX_VECTOR_PER_NODE = 9,
566 COMPLEX_SCALAR_PER_ELEMENT = 10,
567 COMPLEX_VECTOR_PER_ELEMENT = 11
582 vtkGetStringMacro(MeasuredFileName);
590 vtkGetStringMacro(MatchFileName);
606 vtkSetMacro(ParticleCoordinatesByIndex,
int);
607 vtkGetMacro(ParticleCoordinatesByIndex,
int);
608 vtkBooleanMacro(ParticleCoordinatesByIndex,
int);
615 virtual int RequestInformation(vtkInformation*, vtkInformationVector**, vtkInformationVector*);
616 virtual int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*);
628 vtkSetStringMacro(MeasuredFileName);
635 vtkSetStringMacro(MatchFileName);
643 int ReadCaseFileGeometry(
char* line);
644 int ReadCaseFileVariable(
char* line);
645 int ReadCaseFileTime(
char* line);
646 int ReadCaseFileFile(
char* line);
655 virtual int ReadGeometryFile(
656 const char* fileName,
int timeStep, vtkMultiBlockDataSet* output) = 0;
662 virtual int ReadMeasuredGeometryFile(
663 const char* fileName,
int timeStep, vtkMultiBlockDataSet* output) = 0;
668 int ReadVariableFiles(vtkMultiBlockDataSet* output);
674 virtual int ReadScalarsPerNode(
const char* fileName,
const char* description,
int timeStep,
675 vtkMultiBlockDataSet* output,
int measured = 0,
int numberOfComponents = 1,
676 int component = 0) = 0;
682 virtual int ReadVectorsPerNode(
const char* fileName,
const char* description,
int timeStep,
683 vtkMultiBlockDataSet* output,
int measured = 0) = 0;
689 virtual int ReadTensorsPerNode(
690 const char* fileName,
const char* description,
int timeStep, vtkMultiBlockDataSet* output) = 0;
696 virtual int ReadScalarsPerElement(
const char* fileName,
const char* description,
int timeStep,
697 vtkMultiBlockDataSet* output,
int numberOfComponents = 1,
int component = 0) = 0;
703 virtual int ReadVectorsPerElement(
704 const char* fileName,
const char* description,
int timeStep, vtkMultiBlockDataSet* output) = 0;
710 virtual int ReadTensorsPerElement(
711 const char* fileName,
const char* description,
int timeStep, vtkMultiBlockDataSet* output) = 0;
717 virtual int CreateUnstructuredGridOutput(
718 int partId,
char line[80],
const char* name, vtkMultiBlockDataSet* output) = 0;
724 virtual int CreateStructuredGridOutput(
725 int partId,
char line[80],
const char* name, vtkMultiBlockDataSet* output) = 0;
730 void AddVariableFileName(
const char* fileName1,
const char* fileName2 = NULL);
735 void AddVariableDescription(
const char* description);
740 void AddVariableType();
746 int GetElementType(
const char* line);
752 int GetSectionType(
const char* line);
757 void ReplaceWildcards(
char* filename,
int num);
762 void RemoveLeadingBlanks(
char* line);
774 vtkIdType GetTotalNumberOfCellIds(
int index);
775 vtkIdType GetLocalTotalNumberOfCellIds(
int index);
788 void AddToBlock(vtkMultiBlockDataSet* output,
unsigned int blockNo, vtkDataSet* dataset);
794 vtkDataSet* GetDataSetFromBlock(vtkMultiBlockDataSet* output,
unsigned int blockNo);
799 void SetBlockName(vtkMultiBlockDataSet* output,
unsigned int blockNo,
const char* name);
806 void InsertNextCellAndId(vtkUnstructuredGrid*,
int vtkCellType, vtkIdType numPoints,
807 vtkIdType* points,
int partId,
int ensightCellType, vtkIdType globalId, vtkIdType numElements);
808 void InsertVariableComponent(vtkFloatArray* array,
int i,
int component,
float* content,
809 int partId,
int ensightCellType,
int insertionType);
818 void PrepareStructuredDimensionsForDistribution(
int partId,
int* oldDimensions,
819 int* newDimensions,
int* splitDimension,
int* splitDimensionBeginIndex,
int ghostLevel,
820 vtkUnsignedCharArray* pointGhostArray, vtkUnsignedCharArray* cellGhostArray);
879 vtkSetMacro(UseTimeSets,
int);
880 vtkGetMacro(UseTimeSets,
int);
881 vtkBooleanMacro(UseTimeSets,
int);
884 vtkSetMacro(UseFileSets,
int);
885 vtkGetMacro(UseFileSets,
int);
886 vtkBooleanMacro(UseFileSets,
int);
896 int CheckOutputConsistency();
void SetMode(EnsightReaderCellIdMode amode)
std::vector< int > IntVector
vtkPEnSightReaderCellIds(EnsightReaderCellIdMode amode)
void SetImplicitSplitDimensionEndIndex(int end)
vtkIdList * VariableTimeSetIds
void PrintSelf(ostream &os, vtkIndent indent)
EnsightReaderCellIdMode mode
Superclass for EnSight file parallel readers.
vtkIdList * TimeSetsWithFilenameNumbers
vtkIdList * ComplexVariableFileSetIds
int NumberOfGeometryParts
std::map< int, int > IntIntMap
int ImplicitSplitDimensionBeginIndex
void SetImplicitSplitDimensionBeginIndex(int begin)
char ** ComplexVariableFileNames
vtkIdList * UnstructuredPartIds
class to read any type of EnSight files
vtkPEnSightReaderCellIdsType * CellIds
void SetImplicitSplitDimension(int dim)
vtkIdTypeArray * GenerateGlobalIdsArray(const char *name)
void SetLocalNumberOfIds(int n)
vtkIdList * VariableFileSetIds
int GetLocalNumberOfIds()
int * ImplicitLocalDimensions
bool InjectGlobalElementIds
int ParticleCoordinatesByIndex
vtkPEnSightReaderCellIds()
vtkIdListCollection * FileSetFileNameNumbers
int ImplicitSplitDimensionEndIndex
void SetImplicitDimensions(int dim1, int dim2, int dim3)
~vtkPEnSightReaderCellIds()
char ** VariableFileNames
void SetId(int id, int value)
vtkIdListCollection * TimeSetFileNameNumbers
vtkIdList * ComplexVariableTimeSetIds
int ImplicitSplitDimension
void SetNumberOfIds(int n)
vtkIdListCollection * FileSetNumberOfSteps
vtkIdList * StructuredPartIds
std::map< std::string, std::map< int, long > > FileOffsets
int NumberOfMeasuredPoints
vtkPEnSightReaderCellIdsType * PointIds
vtkIdList * FileSetsWithFilenameNumbers