VTK  9.3.1
vtkModelMetadata.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright (c) Kitware, Inc.
3 // SPDX-FileCopyrightText: Copyright (c) Sandia Corporation
4 // SPDX-License-Identifier: BSD-3-Clause
58 #ifndef vtkModelMetadata_h
59 #define vtkModelMetadata_h
60 
61 #include "vtkIOExodusModule.h" // For export macro
62 #include "vtkObject.h"
63 #include "vtkSmartPointer.h" // for vtkSmartPointer
64 #include "vtkStringArray.h" // for vtkStringArray
65 VTK_ABI_NAMESPACE_BEGIN
66 class vtkDataSet;
67 class vtkCharArray;
68 class vtkIdTypeArray;
69 class vtkIntArray;
70 class vtkFloatArray;
71 class vtkIntArray;
72 class vtkStringArray;
73 class vtkModelMetadataSTLCloak;
74 
75 class VTKIOEXODUS_EXPORT vtkModelMetadata : public vtkObject
76 {
77 public:
78  vtkTypeMacro(vtkModelMetadata, vtkObject);
79  void PrintSelf(ostream& os, vtkIndent indent) override;
80  static vtkModelMetadata* New();
81 
89  virtual void PrintGlobalInformation();
90 
104  virtual void PrintLocalInformation();
105 
107 
110  vtkSetStringMacro(Title);
111  const char* GetTitle() const { return this->Title; }
113 
117  void SetInformationLines(int numLines, char** lines);
118 
123  int GetInformationLines(char*** lines) const;
124 
128  int GetNumberOfInformationLines() const { return this->NumberOfInformationLines; }
129 
131 
137  vtkSetMacro(TimeStepIndex, int);
138  int GetTimeStepIndex() const { return this->TimeStepIndex; }
140 
146  void SetTimeSteps(int numberOfTimeSteps, float* timeStepValues);
147  int GetNumberOfTimeSteps() const { return this->NumberOfTimeSteps; }
148 
152  float* GetTimeStepValues() const { return this->TimeStepValues; }
153 
157  void SetCoordinateNames(int dimension, char**);
158  char** GetCoordinateNames() const { return this->CoordinateNames; }
159 
164  int GetDimension() const { return this->Dimension; }
165 
167 
171  vtkSetMacro(NumberOfBlocks, int);
172  int GetNumberOfBlocks() const { return this->NumberOfBlocks; }
174 
179  void SetBlockIds(int*);
180  int* GetBlockIds() const { return this->BlockIds; }
181 
187  void SetBlockElementType(char**);
188  char** GetBlockElementType() const { return this->BlockElementType; }
189 
195  int SetBlockNumberOfElements(int* nelts);
196  int* GetBlockNumberOfElements() const { return this->BlockNumberOfElements; }
197 
203  void SetBlockNodesPerElement(int*);
204  int* GetBlockNodesPerElement() const { return this->BlockNodesPerElement; }
205 
211  void SetBlockElementIdList(int*);
212  int* GetBlockElementIdList() const { return this->BlockElementIdList; }
213 
217  int GetSumElementsPerBlock() const { return this->SumElementsPerBlock; }
218 
223  int* GetBlockElementIdListIndex() const { return this->BlockElementIdListIndex; }
224 
230  int SetBlockNumberOfAttributesPerElement(int* natts);
232  {
233  return this->BlockNumberOfAttributesPerElement;
234  }
235 
242  void SetBlockAttributes(float*);
243  float* GetBlockAttributes() const { return this->BlockAttributes; }
244 
248  int GetSizeBlockAttributeArray() const { return this->SizeBlockAttributeArray; }
249 
254  int* GetBlockAttributesIndex() const { return this->BlockAttributesIndex; }
255 
257 
261  vtkSetMacro(NumberOfNodeSets, int);
262  int GetNumberOfNodeSets() const { return this->NumberOfNodeSets; }
264 
265  void SetNodeSetNames(vtkStringArray* names) { this->NodeSetNames = names; }
266  vtkStringArray* GetNodeSetNames() const { return this->NodeSetNames; }
267 
273  void SetNodeSetIds(int*);
274  int* GetNodeSetIds() const { return this->NodeSetIds; }
275 
280  void SetNodeSetSize(int*);
281  int* GetNodeSetSize() const { return this->NodeSetSize; }
282 
289  void SetNodeSetNodeIdList(int*);
290  int* GetNodeSetNodeIdList() const { return this->NodeSetNodeIdList; }
291 
299  void SetNodeSetNumberOfDistributionFactors(int*);
301  {
302  return this->NodeSetNumberOfDistributionFactors;
303  }
304 
310  void SetNodeSetDistributionFactors(float*);
311  float* GetNodeSetDistributionFactors() const { return this->NodeSetDistributionFactors; }
312 
314 
317  vtkSetMacro(SumNodesPerNodeSet, int);
318  int GetSumNodesPerNodeSet() const { return this->SumNodesPerNodeSet; }
320 
324  int GetSumDistFactPerNodeSet() const { return this->SumDistFactPerNodeSet; }
325 
330  int* GetNodeSetNodeIdListIndex() const { return this->NodeSetNodeIdListIndex; }
331 
336  int* GetNodeSetDistributionFactorIndex() const { return this->NodeSetDistributionFactorIndex; }
337 
339 
343  vtkSetMacro(NumberOfSideSets, int);
344  int GetNumberOfSideSets() const { return this->NumberOfSideSets; }
346 
347  void SetSideSetNames(vtkStringArray* names) { this->SideSetNames = names; }
348  vtkStringArray* GetSideSetNames() const { return this->SideSetNames; }
349 
354  void SetSideSetIds(int*);
355  int* GetSideSetIds() const { return this->SideSetIds; }
356 
361  int SetSideSetSize(int* sizes);
362  int* GetSideSetSize() const { return this->SideSetSize; }
363 
370  int SetSideSetNumberOfDistributionFactors(int* df);
372  {
373  return this->SideSetNumberOfDistributionFactors;
374  }
375 
382  void SetSideSetElementList(int*);
383  int* GetSideSetElementList() const { return this->SideSetElementList; }
384 
392  void SetSideSetSideList(int*);
393  int* GetSideSetSideList() const { return this->SideSetSideList; }
394 
401  void SetSideSetNumDFPerSide(int* numNodes);
402  int* GetSideSetNumDFPerSide() const { return this->SideSetNumDFPerSide; }
403 
415  void SetSideSetDistributionFactors(float*);
416  float* GetSideSetDistributionFactors() const { return this->SideSetDistributionFactors; }
417 
419 
422  vtkSetMacro(SumSidesPerSideSet, int);
423  int GetSumSidesPerSideSet() const { return this->SumSidesPerSideSet; }
425 
429  int GetSumDistFactPerSideSet() const { return this->SumDistFactPerSideSet; }
430 
435  int* GetSideSetListIndex() const { return this->SideSetListIndex; }
436 
441  int* GetSideSetDistributionFactorIndex() const { return this->SideSetDistributionFactorIndex; }
442 
446  int GetNumberOfBlockProperties() const { return this->NumberOfBlockProperties; }
447 
451  void SetBlockPropertyNames(int numProp, char** names);
452  char** GetBlockPropertyNames() const { return this->BlockPropertyNames; }
453 
459  void SetBlockPropertyValue(int*);
460  int* GetBlockPropertyValue() const { return this->BlockPropertyValue; }
461 
465  int GetNumberOfNodeSetProperties() const { return this->NumberOfNodeSetProperties; }
466 
470  void SetNodeSetPropertyNames(int numProp, char** names);
471  char** GetNodeSetPropertyNames() const { return this->NodeSetPropertyNames; }
472 
478  void SetNodeSetPropertyValue(int*);
479  int* GetNodeSetPropertyValue() const { return this->NodeSetPropertyValue; }
480 
484  int GetNumberOfSideSetProperties() const { return this->NumberOfSideSetProperties; }
485 
489  void SetSideSetPropertyNames(int numProp, char** names);
490  char** GetSideSetPropertyNames() const { return this->SideSetPropertyNames; }
491 
497  void SetSideSetPropertyValue(int*);
498  int* GetSideSetPropertyValue() const { return this->SideSetPropertyValue; }
499 
503  int GetNumberOfGlobalVariables() const { return this->NumberOfGlobalVariables; }
504 
508  void SetGlobalVariableNames(int numVarNames, char** n);
509  char** GetGlobalVariableNames() const { return this->GlobalVariableNames; }
510 
515  void SetGlobalVariableValue(float* f);
516  float* GetGlobalVariableValue() const { return this->GlobalVariableValue; }
517 
530  void SetElementVariableInfo(
531  int numOrigNames, char** origNames, int numNames, char** names, int* numComp, int* map);
532 
545  void SetNodeVariableInfo(
546  int numOrigNames, char** origNames, int numNames, char** names, int* numComp, int* map);
547 
554  void SetElementVariableTruthTable(int*);
555  int* GetElementVariableTruthTable() const { return this->ElementVariableTruthTable; }
556 
558 
563  vtkSetMacro(AllVariablesDefinedInAllBlocks, vtkTypeBool);
564  vtkBooleanMacro(AllVariablesDefinedInAllBlocks, vtkTypeBool);
566  {
567  return this->AllVariablesDefinedInAllBlocks;
568  }
570 
589  int GetOriginalNumberOfElementVariables() const { return this->OriginalNumberOfElementVariables; }
590  char** GetOriginalElementVariableNames() const { return this->OriginalElementVariableNames; }
591  int GetNumberOfElementVariables() const { return this->NumberOfElementVariables; }
592  char** GetElementVariableNames() const { return this->ElementVariableNames; }
594  {
595  return this->ElementVariableNumberOfComponents;
596  }
598  {
599  return this->MapToOriginalElementVariableNames;
600  }
601 
602  int GetOriginalNumberOfNodeVariables() const { return this->OriginalNumberOfNodeVariables; }
603  char** GetOriginalNodeVariableNames() const { return this->OriginalNodeVariableNames; }
604  int GetNumberOfNodeVariables() const { return this->NumberOfNodeVariables; }
605  char** GetNodeVariableNames() const { return this->NodeVariableNames; }
606  int* GetNodeVariableNumberOfComponents() const { return this->NodeVariableNumberOfComponents; }
607  int* GetMapToOriginalNodeVariableNames() const { return this->MapToOriginalNodeVariableNames; }
608 
610 
624  void FreeAllGlobalData();
625  void FreeAllLocalData();
626  void FreeBlockDependentData();
627  void FreeOriginalElementVariableNames();
628  void FreeOriginalNodeVariableNames();
629  void FreeUsedElementVariableNames();
630  void FreeUsedNodeVariableNames();
631  void FreeUsedElementVariables();
632  void FreeUsedNodeVariables();
634 
638  void Reset();
639 
640 protected:
642  ~vtkModelMetadata() override;
643 
644 private:
645  void InitializeAllMetadata();
646  void InitializeAllIvars();
647 
648  void FreeAllMetadata();
649  void FreeAllIvars();
650 
651  int BuildBlockElementIdListIndex();
652  int BuildBlockAttributesIndex();
653  int BuildSideSetDistributionFactorIndex();
654 
655  static char* StrDupWithNew(const char* s);
656 
657  static int FindNameOnList(char* name, char** list, int listLen);
658 
659  void ShowFloats(const char* what, int num, float* f);
660  void ShowLines(const char* what, int num, char** l);
661  void ShowIntArray(const char* what, int numx, int numy, int* id);
662  void ShowInts(const char* what, int num, int* id);
663  void ShowListsOfInts(const char* what, int* list, int nlists, int* idx, int len, int verbose);
664  void ShowListsOfFloats(const char* what, float* list, int nlists, int* idx, int len, int verbose);
665 
666  void SetOriginalElementVariableNames(int nvars, char** names);
667  void SetElementVariableNames(int nvars, char** names);
668  void SetElementVariableNumberOfComponents(int* comp);
669  void SetMapToOriginalElementVariableNames(int* map);
670 
671  void SetOriginalNodeVariableNames(int nvars, char** names);
672  void SetNodeVariableNames(int nvars, char** names);
673  void SetNodeVariableNumberOfComponents(int* comp);
674  void SetMapToOriginalNodeVariableNames(int* map);
675 
676  int CalculateMaximumLengths(int& maxString, int& maxLine);
677 
678  // Fields in Exodus II file and their size (defined in exodusII.h)
679  // (G - global fields, relevant to entire file or file set)
680  // (L - local fields, they differ depending on which cells and nodes are
681  // in a file of a partitioned set, or are read in from file)
682 
683  char* Title; // (G)
684 
685  int NumberOfInformationLines; // (G)
686  char** InformationLine; // (G)
687 
688  int Dimension; // (G)
689  char** CoordinateNames; // (at most 3 of these) (G)
690 
691  // Time steps
692 
693  int TimeStepIndex; // starting at 0 (Exodus file starts at 1)
694  int NumberOfTimeSteps; // (G)
695  float* TimeStepValues; // (G)
696 
697  // Block information - arrays that are input with Set*
698 
699  int NumberOfBlocks; // (G)
700 
701  int* BlockIds; // NumberOfBlocks (G) (start at 1)
702  char** BlockElementType; // NumberOfBlocks (G)
703  int* BlockNumberOfElements; // NumberOfBlocks (L)
704  int* BlockNodesPerElement; // NumberOfBlocks (G)
705  int* BlockNumberOfAttributesPerElement; // NumberOfBlocks (G)
706  int* BlockElementIdList; // SumElementsPerBlock (L)
707  float* BlockAttributes; // SizeBlockAttributeArray (L)
708 
709  // Block information - values that we calculate
710 
711  int SumElementsPerBlock;
712  int SizeBlockAttributeArray;
713 
714  int* BlockElementIdListIndex; // NumberOfBlocks
715  int* BlockAttributesIndex; // NumberOfBlocks
716 
717  vtkModelMetadataSTLCloak* BlockIdIndex; // computed map
718 
719  // Node Sets - arrays that are input to the class with Set*
720 
721  int NumberOfNodeSets; // (G)
722 
723  vtkSmartPointer<vtkStringArray> NodeSetNames;
724 
725  int* NodeSetIds; // NumberOfNodeSets (G)
726  int* NodeSetSize; // NumberOfNodeSets (L)
727  int* NodeSetNumberOfDistributionFactors; // NNS (L) (NSNDF[i] is 0 or NSS[i])
728  int* NodeSetNodeIdList; // SumNodesPerNodeSet (L)
729  float* NodeSetDistributionFactors; // SumDistFactPerNodeSet (L)
730 
731  // Node Sets - values or arrays that the class computes
732 
733  int SumNodesPerNodeSet;
734  int SumDistFactPerNodeSet;
735 
736  int* NodeSetNodeIdListIndex; // NumberOfNodeSets
737  int* NodeSetDistributionFactorIndex; // NumberOfNodeSets
738 
739  // Side Sets - input to class with Set*
740 
741  int NumberOfSideSets; // (G)
742 
743  vtkSmartPointer<vtkStringArray> SideSetNames;
744 
745  int* SideSetIds; // NumberOfSideSets (G)
746  int* SideSetSize; // NumberOfSideSets (L)
747  int* SideSetNumberOfDistributionFactors; // NSS (L) (SSNDF[i] = 0 or NumNodesInSide)
748  int* SideSetElementList; // SumSidesPerSideSet (L)
749  int* SideSetSideList; // SumSidesPerSideSet (L)
750  int* SideSetNumDFPerSide; // SumSidesPerSideSet (L)
751  float* SideSetDistributionFactors; // SumDistFactPerSideSet (L)
752 
753  // Side Sets - calculated by class
754 
755  int SumSidesPerSideSet;
756  int SumDistFactPerSideSet;
757 
758  int* SideSetListIndex; // NumberOfSideSets
759  int* SideSetDistributionFactorIndex; // NumberOfSideSets
760 
761  // Other properties, provided as input with Set*
762 
763  int NumberOfBlockProperties; // (G)
764  char** BlockPropertyNames; // one per property (G)
765  int* BlockPropertyValue; // NumBlocks * NumBlockProperties (G)
766 
767  int NumberOfNodeSetProperties; // (G)
768  char** NodeSetPropertyNames; // one per property (G)
769  int* NodeSetPropertyValue; // NumNodeSets * NumNodeSetProperties (G)
770 
771  int NumberOfSideSetProperties; // (G)
772  char** SideSetPropertyNames; // one per property (G)
773  int* SideSetPropertyValue; // NumSideSets * NumSideSetProperties (G)
774 
775  // Global variables, 1 value per time step per variable. We store
776  // these as floats, even if they are doubles in the file. The values
777  // are global in the sense that they apply to the whole data set, but
778  // the are local in the sense that they can change with each time step.
779  // For the purpose of this object, which represents a particular
780  // time step, they are therefore considered "local". (Since they need
781  // to be updated every time another read is done from the file.)
782 
783  int NumberOfGlobalVariables; // (G)
784  char** GlobalVariableNames; // (G) NumberOfGlobalVariables
785  float* GlobalVariableValue; // (G) NumberOfGlobalVariables
786 
787  // The element and node arrays in the file were all scalar arrays.
788  // Those with similar names were combined into vectors in VTK. Here
789  // are all the original names from the Exodus file, the names given
790  // the variables in the VTK ugrid, and a mapping from the VTK names
791  // to the Exodus names.
792 
793  int OriginalNumberOfElementVariables; // (G)
794  char** OriginalElementVariableNames; // (G) OriginalNumberOfElementVariables
795  int NumberOfElementVariables; // (G)
796  int MaxNumberOfElementVariables; // (G)
797  char** ElementVariableNames; // (G) MaxNumberOfElementVariables
798  int* ElementVariableNumberOfComponents; // (G) MaxNumberOfElementVariables
799  int* MapToOriginalElementVariableNames; // (G) MaxNumberOfElementVariables
800 
801  int OriginalNumberOfNodeVariables; // (G)
802  char** OriginalNodeVariableNames; // (G) OriginalNumberOfNodeVariables
803  int NumberOfNodeVariables; // (G)
804  int MaxNumberOfNodeVariables; // (G)
805  char** NodeVariableNames; // (G) NumberOfNodeVariables
806  int* NodeVariableNumberOfComponents; // (G) NumberOfNodeVariables
807  int* MapToOriginalNodeVariableNames; // (G) NumberOfNodeVariables
808 
809  int* ElementVariableTruthTable; // (G) NumBlocks*OrigNumberOfElementVariables
810  vtkTypeBool AllVariablesDefinedInAllBlocks;
811 
812  vtkModelMetadata(const vtkModelMetadata&) = delete;
813  void operator=(const vtkModelMetadata&) = delete;
814 };
815 VTK_ABI_NAMESPACE_END
816 #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:51
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:52
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:30
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:64
int GetNumberOfNodeVariables() const
dynamic, self-adjusting array of char
Definition: vtkCharArray.h:40
int * GetBlockIds() const
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:34
int * GetBlockPropertyValue() const
void SetSideSetNames(vtkStringArray *names)
char ** GetSideSetPropertyNames() const
a simple class to control print indentation
Definition: vtkIndent.h:28
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