VTK  9.2.6
vtkModelMetadata.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: vtkModelMetadata.h
5 
6  Copyright (c) Kitware, Inc.
7  All rights reserved.
8  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html 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 =========================================================================*/
15 /*----------------------------------------------------------------------------
16  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 
73 #ifndef vtkModelMetadata_h
74 #define vtkModelMetadata_h
75 
76 #include "vtkIOExodusModule.h" // For export macro
77 #include "vtkObject.h"
78 #include "vtkSmartPointer.h" // for vtkSmartPointer
79 #include "vtkStringArray.h" // for vtkStringArray
80 class vtkDataSet;
81 class vtkCharArray;
82 class vtkIdTypeArray;
83 class vtkIntArray;
84 class vtkFloatArray;
85 class vtkIntArray;
86 class vtkStringArray;
87 class vtkModelMetadataSTLCloak;
88 
89 class VTKIOEXODUS_EXPORT vtkModelMetadata : public vtkObject
90 {
91 public:
92  vtkTypeMacro(vtkModelMetadata, vtkObject);
93  void PrintSelf(ostream& os, vtkIndent indent) override;
94  static vtkModelMetadata* New();
95 
103  virtual void PrintGlobalInformation();
104 
118  virtual void PrintLocalInformation();
119 
121 
124  vtkSetStringMacro(Title);
125  const char* GetTitle() const { return this->Title; }
127 
131  void SetInformationLines(int numLines, char** lines);
132 
137  int GetInformationLines(char*** lines) const;
138 
142  int GetNumberOfInformationLines() const { return this->NumberOfInformationLines; }
143 
145 
151  vtkSetMacro(TimeStepIndex, int);
152  int GetTimeStepIndex() const { return this->TimeStepIndex; }
154 
160  void SetTimeSteps(int numberOfTimeSteps, float* timeStepValues);
161  int GetNumberOfTimeSteps() const { return this->NumberOfTimeSteps; }
162 
166  float* GetTimeStepValues() const { return this->TimeStepValues; }
167 
171  void SetCoordinateNames(int dimension, char**);
172  char** GetCoordinateNames() const { return this->CoordinateNames; }
173 
178  int GetDimension() const { return this->Dimension; }
179 
181 
185  vtkSetMacro(NumberOfBlocks, int);
186  int GetNumberOfBlocks() const { return this->NumberOfBlocks; }
188 
193  void SetBlockIds(int*);
194  int* GetBlockIds() const { return this->BlockIds; }
195 
201  void SetBlockElementType(char**);
202  char** GetBlockElementType() const { return this->BlockElementType; }
203 
209  int SetBlockNumberOfElements(int* nelts);
210  int* GetBlockNumberOfElements() const { return this->BlockNumberOfElements; }
211 
217  void SetBlockNodesPerElement(int*);
218  int* GetBlockNodesPerElement() const { return this->BlockNodesPerElement; }
219 
225  void SetBlockElementIdList(int*);
226  int* GetBlockElementIdList() const { return this->BlockElementIdList; }
227 
231  int GetSumElementsPerBlock() const { return this->SumElementsPerBlock; }
232 
237  int* GetBlockElementIdListIndex() const { return this->BlockElementIdListIndex; }
238 
244  int SetBlockNumberOfAttributesPerElement(int* natts);
246  {
247  return this->BlockNumberOfAttributesPerElement;
248  }
249 
256  void SetBlockAttributes(float*);
257  float* GetBlockAttributes() const { return this->BlockAttributes; }
258 
262  int GetSizeBlockAttributeArray() const { return this->SizeBlockAttributeArray; }
263 
268  int* GetBlockAttributesIndex() const { return this->BlockAttributesIndex; }
269 
271 
275  vtkSetMacro(NumberOfNodeSets, int);
276  int GetNumberOfNodeSets() const { return this->NumberOfNodeSets; }
278 
279  void SetNodeSetNames(vtkStringArray* names) { this->NodeSetNames = names; }
280  vtkStringArray* GetNodeSetNames() const { return this->NodeSetNames; }
281 
287  void SetNodeSetIds(int*);
288  int* GetNodeSetIds() const { return this->NodeSetIds; }
289 
294  void SetNodeSetSize(int*);
295  int* GetNodeSetSize() const { return this->NodeSetSize; }
296 
303  void SetNodeSetNodeIdList(int*);
304  int* GetNodeSetNodeIdList() const { return this->NodeSetNodeIdList; }
305 
313  void SetNodeSetNumberOfDistributionFactors(int*);
315  {
316  return this->NodeSetNumberOfDistributionFactors;
317  }
318 
324  void SetNodeSetDistributionFactors(float*);
325  float* GetNodeSetDistributionFactors() const { return this->NodeSetDistributionFactors; }
326 
328 
331  vtkSetMacro(SumNodesPerNodeSet, int);
332  int GetSumNodesPerNodeSet() const { return this->SumNodesPerNodeSet; }
334 
338  int GetSumDistFactPerNodeSet() const { return this->SumDistFactPerNodeSet; }
339 
344  int* GetNodeSetNodeIdListIndex() const { return this->NodeSetNodeIdListIndex; }
345 
350  int* GetNodeSetDistributionFactorIndex() const { return this->NodeSetDistributionFactorIndex; }
351 
353 
357  vtkSetMacro(NumberOfSideSets, int);
358  int GetNumberOfSideSets() const { return this->NumberOfSideSets; }
360 
361  void SetSideSetNames(vtkStringArray* names) { this->SideSetNames = names; }
362  vtkStringArray* GetSideSetNames() const { return this->SideSetNames; }
363 
368  void SetSideSetIds(int*);
369  int* GetSideSetIds() const { return this->SideSetIds; }
370 
375  int SetSideSetSize(int* sizes);
376  int* GetSideSetSize() const { return this->SideSetSize; }
377 
384  int SetSideSetNumberOfDistributionFactors(int* df);
386  {
387  return this->SideSetNumberOfDistributionFactors;
388  }
389 
396  void SetSideSetElementList(int*);
397  int* GetSideSetElementList() const { return this->SideSetElementList; }
398 
406  void SetSideSetSideList(int*);
407  int* GetSideSetSideList() const { return this->SideSetSideList; }
408 
415  void SetSideSetNumDFPerSide(int* numNodes);
416  int* GetSideSetNumDFPerSide() const { return this->SideSetNumDFPerSide; }
417 
429  void SetSideSetDistributionFactors(float*);
430  float* GetSideSetDistributionFactors() const { return this->SideSetDistributionFactors; }
431 
433 
436  vtkSetMacro(SumSidesPerSideSet, int);
437  int GetSumSidesPerSideSet() const { return this->SumSidesPerSideSet; }
439 
443  int GetSumDistFactPerSideSet() const { return this->SumDistFactPerSideSet; }
444 
449  int* GetSideSetListIndex() const { return this->SideSetListIndex; }
450 
455  int* GetSideSetDistributionFactorIndex() const { return this->SideSetDistributionFactorIndex; }
456 
460  int GetNumberOfBlockProperties() const { return this->NumberOfBlockProperties; }
461 
465  void SetBlockPropertyNames(int numProp, char** names);
466  char** GetBlockPropertyNames() const { return this->BlockPropertyNames; }
467 
473  void SetBlockPropertyValue(int*);
474  int* GetBlockPropertyValue() const { return this->BlockPropertyValue; }
475 
479  int GetNumberOfNodeSetProperties() const { return this->NumberOfNodeSetProperties; }
480 
484  void SetNodeSetPropertyNames(int numProp, char** names);
485  char** GetNodeSetPropertyNames() const { return this->NodeSetPropertyNames; }
486 
492  void SetNodeSetPropertyValue(int*);
493  int* GetNodeSetPropertyValue() const { return this->NodeSetPropertyValue; }
494 
498  int GetNumberOfSideSetProperties() const { return this->NumberOfSideSetProperties; }
499 
503  void SetSideSetPropertyNames(int numProp, char** names);
504  char** GetSideSetPropertyNames() const { return this->SideSetPropertyNames; }
505 
511  void SetSideSetPropertyValue(int*);
512  int* GetSideSetPropertyValue() const { return this->SideSetPropertyValue; }
513 
517  int GetNumberOfGlobalVariables() const { return this->NumberOfGlobalVariables; }
518 
522  void SetGlobalVariableNames(int numVarNames, char** n);
523  char** GetGlobalVariableNames() const { return this->GlobalVariableNames; }
524 
529  void SetGlobalVariableValue(float* f);
530  float* GetGlobalVariableValue() const { return this->GlobalVariableValue; }
531 
544  void SetElementVariableInfo(
545  int numOrigNames, char** origNames, int numNames, char** names, int* numComp, int* map);
546 
559  void SetNodeVariableInfo(
560  int numOrigNames, char** origNames, int numNames, char** names, int* numComp, int* map);
561 
568  void SetElementVariableTruthTable(int*);
569  int* GetElementVariableTruthTable() const { return this->ElementVariableTruthTable; }
570 
572 
577  vtkSetMacro(AllVariablesDefinedInAllBlocks, vtkTypeBool);
578  vtkBooleanMacro(AllVariablesDefinedInAllBlocks, vtkTypeBool);
580  {
581  return this->AllVariablesDefinedInAllBlocks;
582  }
584 
603  int GetOriginalNumberOfElementVariables() const { return this->OriginalNumberOfElementVariables; }
604  char** GetOriginalElementVariableNames() const { return this->OriginalElementVariableNames; }
605  int GetNumberOfElementVariables() const { return this->NumberOfElementVariables; }
606  char** GetElementVariableNames() const { return this->ElementVariableNames; }
608  {
609  return this->ElementVariableNumberOfComponents;
610  }
612  {
613  return this->MapToOriginalElementVariableNames;
614  }
615 
616  int GetOriginalNumberOfNodeVariables() const { return this->OriginalNumberOfNodeVariables; }
617  char** GetOriginalNodeVariableNames() const { return this->OriginalNodeVariableNames; }
618  int GetNumberOfNodeVariables() const { return this->NumberOfNodeVariables; }
619  char** GetNodeVariableNames() const { return this->NodeVariableNames; }
620  int* GetNodeVariableNumberOfComponents() const { return this->NodeVariableNumberOfComponents; }
621  int* GetMapToOriginalNodeVariableNames() const { return this->MapToOriginalNodeVariableNames; }
622 
624 
638  void FreeAllGlobalData();
639  void FreeAllLocalData();
640  void FreeBlockDependentData();
641  void FreeOriginalElementVariableNames();
642  void FreeOriginalNodeVariableNames();
643  void FreeUsedElementVariableNames();
644  void FreeUsedNodeVariableNames();
645  void FreeUsedElementVariables();
646  void FreeUsedNodeVariables();
648 
652  void Reset();
653 
654 protected:
656  ~vtkModelMetadata() override;
657 
658 private:
659  void InitializeAllMetadata();
660  void InitializeAllIvars();
661 
662  void FreeAllMetadata();
663  void FreeAllIvars();
664 
665  int BuildBlockElementIdListIndex();
666  int BuildBlockAttributesIndex();
667  int BuildSideSetDistributionFactorIndex();
668 
669  static char* StrDupWithNew(const char* s);
670 
671  static int FindNameOnList(char* name, char** list, int listLen);
672 
673  void ShowFloats(const char* what, int num, float* f);
674  void ShowLines(const char* what, int num, char** l);
675  void ShowIntArray(const char* what, int numx, int numy, int* id);
676  void ShowInts(const char* what, int num, int* id);
677  void ShowListsOfInts(const char* what, int* list, int nlists, int* idx, int len, int verbose);
678  void ShowListsOfFloats(const char* what, float* list, int nlists, int* idx, int len, int verbose);
679 
680  void SetOriginalElementVariableNames(int nvars, char** names);
681  void SetElementVariableNames(int nvars, char** names);
682  void SetElementVariableNumberOfComponents(int* comp);
683  void SetMapToOriginalElementVariableNames(int* map);
684 
685  void SetOriginalNodeVariableNames(int nvars, char** names);
686  void SetNodeVariableNames(int nvars, char** names);
687  void SetNodeVariableNumberOfComponents(int* comp);
688  void SetMapToOriginalNodeVariableNames(int* map);
689 
690  int CalculateMaximumLengths(int& maxString, int& maxLine);
691 
692  // Fields in Exodus II file and their size (defined in exodusII.h)
693  // (G - global fields, relevant to entire file or file set)
694  // (L - local fields, they differ depending on which cells and nodes are
695  // in a file of a partitioned set, or are read in from file)
696 
697  char* Title; // (G)
698 
699  int NumberOfInformationLines; // (G)
700  char** InformationLine; // (G)
701 
702  int Dimension; // (G)
703  char** CoordinateNames; // (at most 3 of these) (G)
704 
705  // Time steps
706 
707  int TimeStepIndex; // starting at 0 (Exodus file starts at 1)
708  int NumberOfTimeSteps; // (G)
709  float* TimeStepValues; // (G)
710 
711  // Block information - arrays that are input with Set*
712 
713  int NumberOfBlocks; // (G)
714 
715  int* BlockIds; // NumberOfBlocks (G) (start at 1)
716  char** BlockElementType; // NumberOfBlocks (G)
717  int* BlockNumberOfElements; // NumberOfBlocks (L)
718  int* BlockNodesPerElement; // NumberOfBlocks (G)
719  int* BlockNumberOfAttributesPerElement; // NumberOfBlocks (G)
720  int* BlockElementIdList; // SumElementsPerBlock (L)
721  float* BlockAttributes; // SizeBlockAttributeArray (L)
722 
723  // Block information - values that we calculate
724 
725  int SumElementsPerBlock;
726  int SizeBlockAttributeArray;
727 
728  int* BlockElementIdListIndex; // NumberOfBlocks
729  int* BlockAttributesIndex; // NumberOfBlocks
730 
731  vtkModelMetadataSTLCloak* BlockIdIndex; // computed map
732 
733  // Node Sets - arrays that are input to the class with Set*
734 
735  int NumberOfNodeSets; // (G)
736 
737  vtkSmartPointer<vtkStringArray> NodeSetNames;
738 
739  int* NodeSetIds; // NumberOfNodeSets (G)
740  int* NodeSetSize; // NumberOfNodeSets (L)
741  int* NodeSetNumberOfDistributionFactors; // NNS (L) (NSNDF[i] is 0 or NSS[i])
742  int* NodeSetNodeIdList; // SumNodesPerNodeSet (L)
743  float* NodeSetDistributionFactors; // SumDistFactPerNodeSet (L)
744 
745  // Node Sets - values or arrays that the class computes
746 
747  int SumNodesPerNodeSet;
748  int SumDistFactPerNodeSet;
749 
750  int* NodeSetNodeIdListIndex; // NumberOfNodeSets
751  int* NodeSetDistributionFactorIndex; // NumberOfNodeSets
752 
753  // Side Sets - input to class with Set*
754 
755  int NumberOfSideSets; // (G)
756 
757  vtkSmartPointer<vtkStringArray> SideSetNames;
758 
759  int* SideSetIds; // NumberOfSideSets (G)
760  int* SideSetSize; // NumberOfSideSets (L)
761  int* SideSetNumberOfDistributionFactors; // NSS (L) (SSNDF[i] = 0 or NumNodesInSide)
762  int* SideSetElementList; // SumSidesPerSideSet (L)
763  int* SideSetSideList; // SumSidesPerSideSet (L)
764  int* SideSetNumDFPerSide; // SumSidesPerSideSet (L)
765  float* SideSetDistributionFactors; // SumDistFactPerSideSet (L)
766 
767  // Side Sets - calculated by class
768 
769  int SumSidesPerSideSet;
770  int SumDistFactPerSideSet;
771 
772  int* SideSetListIndex; // NumberOfSideSets
773  int* SideSetDistributionFactorIndex; // NumberOfSideSets
774 
775  // Other properties, provided as input with Set*
776 
777  int NumberOfBlockProperties; // (G)
778  char** BlockPropertyNames; // one per property (G)
779  int* BlockPropertyValue; // NumBlocks * NumBlockProperties (G)
780 
781  int NumberOfNodeSetProperties; // (G)
782  char** NodeSetPropertyNames; // one per property (G)
783  int* NodeSetPropertyValue; // NumNodeSets * NumNodeSetProperties (G)
784 
785  int NumberOfSideSetProperties; // (G)
786  char** SideSetPropertyNames; // one per property (G)
787  int* SideSetPropertyValue; // NumSideSets * NumSideSetProperties (G)
788 
789  // Global variables, 1 value per time step per variable. We store
790  // these as floats, even if they are doubles in the file. The values
791  // are global in the sense that they apply to the whole data set, but
792  // the are local in the sense that they can change with each time step.
793  // For the purpose of this object, which represents a particular
794  // time step, they are therefore considered "local". (Since they need
795  // to be updated every time another read is done from the file.)
796 
797  int NumberOfGlobalVariables; // (G)
798  char** GlobalVariableNames; // (G) NumberOfGlobalVariables
799  float* GlobalVariableValue; // (G) NumberOfGlobalVariables
800 
801  // The element and node arrays in the file were all scalar arrays.
802  // Those with similar names were combined into vectors in VTK. Here
803  // are all the original names from the Exodus file, the names given
804  // the variables in the VTK ugrid, and a mapping from the VTK names
805  // to the Exodus names.
806 
807  int OriginalNumberOfElementVariables; // (G)
808  char** OriginalElementVariableNames; // (G) OriginalNumberOfElementVariables
809  int NumberOfElementVariables; // (G)
810  int MaxNumberOfElementVariables; // (G)
811  char** ElementVariableNames; // (G) MaxNumberOfElementVariables
812  int* ElementVariableNumberOfComponents; // (G) MaxNumberOfElementVariables
813  int* MapToOriginalElementVariableNames; // (G) MaxNumberOfElementVariables
814 
815  int OriginalNumberOfNodeVariables; // (G)
816  char** OriginalNodeVariableNames; // (G) OriginalNumberOfNodeVariables
817  int NumberOfNodeVariables; // (G)
818  int MaxNumberOfNodeVariables; // (G)
819  char** NodeVariableNames; // (G) NumberOfNodeVariables
820  int* NodeVariableNumberOfComponents; // (G) NumberOfNodeVariables
821  int* MapToOriginalNodeVariableNames; // (G) NumberOfNodeVariables
822 
823  int* ElementVariableTruthTable; // (G) NumBlocks*OrigNumberOfElementVariables
824  vtkTypeBool AllVariablesDefinedInAllBlocks;
825 
826 private:
827  vtkModelMetadata(const vtkModelMetadata&) = delete;
828  void operator=(const vtkModelMetadata&) = delete;
829 };
830 #endif
int * GetElementVariableNumberOfComponents() const
char ** GetOriginalNodeVariableNames() const
int * GetSideSetElementList() const
int * GetBlockElementIdList() const
int GetNumberOfTimeSteps() const
int GetNumberOfBlocks() const
The number of blocks in the file.
int GetSumDistFactPerNodeSet() const
Get the total number of distribution factors stored for all node sets.
int * GetNodeSetPropertyValue() const
abstract base class for most VTK objects
Definition: vtkObject.h:62
char ** GetElementVariableNames() const
int * GetSideSetDistributionFactorIndex() const
Get a list of the index of the starting entry for each side set in the list of side set distribution ...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetSizeBlockAttributeArray() const
Get the length of the list of floating point block attributes.
int * GetSideSetSize() const
int GetDimension() const
Get the dimension of the model.
int GetSumDistFactPerSideSet() const
Get the total number of distribution factors stored for all side sets.
char ** GetBlockElementType() const
float * GetBlockAttributes() const
float * GetNodeSetDistributionFactors() const
abstract class to specify dataset behavior
Definition: vtkDataSet.h:62
int GetOriginalNumberOfElementVariables() const
The ModelMetadata object may contain these lists: o the variables in the original data file o the var...
char ** GetOriginalElementVariableNames() const
int * GetBlockNodesPerElement() const
const char * GetTitle() const
The title of the dataset.
int GetNumberOfSideSets() const
Set or get the number of side sets.
int GetOriginalNumberOfNodeVariables() const
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:41
char ** GetCoordinateNames() const
int * GetNodeSetNumberOfDistributionFactors() const
int GetNumberOfBlockProperties() const
The number of block properties (global variables)
int GetNumberOfGlobalVariables() const
Get the number of global variables per time step.
a vtkAbstractArray subclass for strings
int GetSumSidesPerSideSet() const
Get the total number of sides in all side sets.
float * GetSideSetDistributionFactors() const
dynamic, self-adjusting array of vtkIdType
char ** GetNodeVariableNames() const
int GetSumNodesPerNodeSet() const
Get the total number of nodes in all node sets.
vtkTypeBool GetAllVariablesDefinedInAllBlocks() const
Instead of a truth table of all "1"s, you can set this instance variable to indicate that all variabl...
char ** GetGlobalVariableNames() const
int * GetNodeSetNodeIdList() const
int * GetBlockElementIdListIndex() const
Get a list of the index into the BlockElementIdList of the start of each block's elements.
int vtkTypeBool
Definition: vtkABI.h:69
int GetNumberOfNodeVariables() const
dynamic, self-adjusting array of char
Definition: vtkCharArray.h:51
int * GetBlockIds() const
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:45
int * GetBlockPropertyValue() const
void SetSideSetNames(vtkStringArray *names)
char ** GetSideSetPropertyNames() const
a simple class to control print indentation
Definition: vtkIndent.h:39
int * GetSideSetNumDFPerSide() const
int * GetNodeSetIds() const
int GetNumberOfNodeSetProperties() const
The number of node set properties (global variables)
int * GetMapToOriginalElementVariableNames() const
int * GetNodeSetNodeIdListIndex() const
Get a list of the index of the starting entry for each node set in the list of node set node IDs...
float * GetTimeStepValues() const
Get the time step values.
int * GetNodeSetDistributionFactorIndex() const
Get a list of the index of the starting entry for each node set in the list of node set distribution ...
int * GetElementVariableTruthTable() const
int * GetBlockNumberOfAttributesPerElement() const
int * GetNodeSetSize() const
vtkStringArray * GetNodeSetNames() const
int GetNumberOfInformationLines() const
Get the number of information lines.
This class encapsulates the metadata that appear in mesh-based file formats but do not appear in vtkU...
char ** GetBlockPropertyNames() const
int * GetMapToOriginalNodeVariableNames() const
float * GetGlobalVariableValue() const
int GetTimeStepIndex() const
Set the index of the time step represented by the results data in the file attached to this ModelMeta...
int * GetSideSetPropertyValue() const
char ** GetNodeSetPropertyNames() const
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
int * GetSideSetSideList() const
int GetSumElementsPerBlock() const
Get the length of the list of elements in every block.
int GetNumberOfSideSetProperties() const
The number of side set properties (global variables)
int * GetBlockNumberOfElements() const
int * GetSideSetIds() const
int * GetSideSetListIndex() const
Get a list of the index of the starting entry for each side set in the list of side set side IDs...
int GetNumberOfNodeSets() const
The number of node sets in the file.
vtkStringArray * GetSideSetNames() const
int * GetSideSetNumberOfDistributionFactors() const
int GetNumberOfElementVariables() const
void SetNodeSetNames(vtkStringArray *names)
int * GetBlockAttributesIndex() const
Get a list of the index into the BlockAttributes of the start of each block's element attribute list...
int * GetNodeVariableNumberOfComponents() const