VTK
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 
74 #ifndef __vtkModelMetadata_h
75 #define __vtkModelMetadata_h
76 
77 #include "vtkObject.h"
78 
79 class vtkDataSet;
80 class vtkCharArray;
81 class vtkIdTypeArray;
82 class vtkIntArray;
83 class vtkFloatArray;
84 class vtkIntArray;
85 class vtkModelMetadataSTLCloak;
86 
88 {
89 public:
90  vtkTypeMacro(vtkModelMetadata, vtkObject);
91  virtual void PrintSelf(ostream &os, vtkIndent indent);
92  static vtkModelMetadata *New();
93 
98  virtual void PrintGlobalInformation();
99 
110  virtual void PrintLocalInformation();
111 
113 
114  vtkSetStringMacro(Title);
115  const char *GetTitle() const {return this->Title;}
117 
119  void SetInformationLines(int numLines, char **lines);
120 
122  void AddInformationLine(char *info);
123 
126  int GetInformationLines(char ***lines) const;
127 
129 
131  return this->NumberOfInformationLines;}
133 
137  void SetQARecords(int numberOfRecords, char *QARecords[][4]);
138 
142  void AddQARecord(char *name, char *version, char *date, char *time);
143 
145 
146  void GetQARecord(int which, char **name, char **version,
147  char **date, char **time) const;
149 
151  int GetNumberOfQARecords() const {return this->NumberOfQARecords;}
152 
154 
157  vtkSetMacro(TimeStepIndex, int);
158  int GetTimeStepIndex() const {return this->TimeStepIndex;}
160 
162 
165  void SetTimeSteps(int numberOfTimeSteps, float *timeStepValues);
166  int GetNumberOfTimeSteps() const {return this->NumberOfTimeSteps;}
168 
170  float *GetTimeStepValues() const {return this->TimeStepValues;}
171 
173 
174  void SetCoordinateNames(int dimension, char **);
175  char **GetCoordinateNames() const {return this->CoordinateNames;}
177 
180  int GetDimension() const {return this->Dimension;}
181 
183 
185  vtkSetMacro(NumberOfBlocks, int);
186  int GetNumberOfBlocks() const {return this->NumberOfBlocks;}
188 
190 
192  void SetBlockIds(int *);
193  int *GetBlockIds() const {return this->BlockIds;}
195 
197 
200  void SetBlockElementType(char **);
201  char **GetBlockElementType() const {return this->BlockElementType;}
203 
205 
208  int SetBlockNumberOfElements(int *nelts);
209  int *GetBlockNumberOfElements()const{return this->BlockNumberOfElements;}
211 
213 
216  void SetBlockNodesPerElement(int *);
217  int *GetBlockNodesPerElement()const{return this->BlockNodesPerElement;}
219 
221 
224  void SetBlockElementIdList(int *);
225  int *GetBlockElementIdList() const {return this->BlockElementIdList;}
227 
229  int GetSumElementsPerBlock() const {return this->SumElementsPerBlock;}
230 
233  int *GetBlockElementIdListIndex()const {return this->BlockElementIdListIndex;}
234 
236 
239  int SetBlockNumberOfAttributesPerElement(int *natts);
240  int *GetBlockNumberOfAttributesPerElement()const {return this->BlockNumberOfAttributesPerElement;}
242 
244 
247  void SetBlockAttributes(float *);
248  float *GetBlockAttributes()const {return this->BlockAttributes;}
250 
252 
254  return this->SizeBlockAttributeArray;}
256 
259  int *GetBlockAttributesIndex() const {return this->BlockAttributesIndex;}
260 
262 
264  vtkSetMacro(NumberOfNodeSets, int);
265  int GetNumberOfNodeSets() const {return this->NumberOfNodeSets;}
267 
269 
272  void SetNodeSetIds(int *);
273  int *GetNodeSetIds() const {return this->NodeSetIds;}
275 
277 
280  int SetNodeSetSize(int *);
281  int *GetNodeSetSize() const {return this->NodeSetSize;}
283 
285 
289  void SetNodeSetNodeIdList(int *);
290  int *GetNodeSetNodeIdList() const {return this->NodeSetNodeIdList;}
292 
294 
298  int SetNodeSetNumberOfDistributionFactors(int *);
299  int *GetNodeSetNumberOfDistributionFactors() const
300  {return this->NodeSetNumberOfDistributionFactors;}
302 
304 
307  void SetNodeSetDistributionFactors(float *);
309  return this->NodeSetDistributionFactors;}
311 
313  int GetSumNodesPerNodeSet() const {return this->SumNodesPerNodeSet;}
314 
316  int GetSumDistFactPerNodeSet() const {return this->SumDistFactPerNodeSet;}
317 
319 
322  return this->NodeSetNodeIdListIndex;}
324 
326 
329  return this->NodeSetDistributionFactorIndex;}
331 
333 
335  vtkSetMacro(NumberOfSideSets, int);
336  int GetNumberOfSideSets() const {return this->NumberOfSideSets;}
338 
340 
342  void SetSideSetIds(int *);
343  int *GetSideSetIds() const {return this->SideSetIds;}
345 
347 
350  int SetSideSetSize(int *sizes);
351  int *GetSideSetSize() const {return this->SideSetSize;}
353 
355 
359  int SetSideSetNumberOfDistributionFactors(int *df);
361  return this->SideSetNumberOfDistributionFactors;}
363 
365 
369  void SetSideSetElementList(int *);
370  int *GetSideSetElementList() const {return this->SideSetElementList;}
372 
374 
379  void SetSideSetSideList(int *);
380  int *GetSideSetSideList() const {return this->SideSetSideList;}
382 
384 
388  void SetSideSetNumDFPerSide(int *numNodes);
389  int *GetSideSetNumDFPerSide() const {return this->SideSetNumDFPerSide;}
391 
393 
401  void SetSideSetDistributionFactors(float *);
403  return this->SideSetDistributionFactors;}
405 
407  int GetSumSidesPerSideSet() const {return this->SumSidesPerSideSet;}
408 
410  int GetSumDistFactPerSideSet() const {return this->SumDistFactPerSideSet;}
411 
414  int *GetSideSetListIndex() const {return this->SideSetListIndex;}
415 
417 
420  return this->SideSetDistributionFactorIndex;}
422 
424 
426  return this->NumberOfBlockProperties;}
428 
430 
431  void SetBlockPropertyNames(int numProp, char **names);
432  char **GetBlockPropertyNames() const {return this->BlockPropertyNames;}
434 
436 
438  void SetBlockPropertyValue(int *);
439  int *GetBlockPropertyValue() const {return this->BlockPropertyValue;}
441 
443 
445  return this->NumberOfNodeSetProperties;}
447 
449 
450  void SetNodeSetPropertyNames(int numProp, char **names);
451  char **GetNodeSetPropertyNames() const {return this->NodeSetPropertyNames;}
453 
455 
457  void SetNodeSetPropertyValue(int *);
458  int *GetNodeSetPropertyValue() const {return this->NodeSetPropertyValue;}
460 
462 
464  return this->NumberOfSideSetProperties;}
466 
468 
469  void SetSideSetPropertyNames(int numProp, char **names);
470  char **GetSideSetPropertyNames() const {return this->SideSetPropertyNames;}
472 
474 
476  void SetSideSetPropertyValue(int *);
477  int *GetSideSetPropertyValue() const {return this->SideSetPropertyValue;}
479 
481 
483  return this->NumberOfGlobalVariables;}
485 
487 
488  void SetGlobalVariableNames(int numVarNames, char **n);
489  char **GetGlobalVariableNames() const {return this->GlobalVariableNames;}
491 
493 
495  void SetGlobalVariableValue(float *f);
496  float *GetGlobalVariableValue() const {return this->GlobalVariableValue;}
498 
500 
509  void SetElementVariableInfo(int numOrigNames, char **origNames,
510  int numNames, char **names, int *numComp,
511  int *map);
513 
515 
524  void SetNodeVariableInfo(int numOrigNames, char **origNames,
525  int numNames, char **names, int *numComp,
526  int *map);
528 
530 
534  void SetElementVariableTruthTable(int *);
536  return this->ElementVariableTruthTable;}
538 
540 
542  vtkSetMacro(AllVariablesDefinedInAllBlocks, int);
543  vtkBooleanMacro(AllVariablesDefinedInAllBlocks, int);
545  return this->AllVariablesDefinedInAllBlocks;}
547 
554  int ElementVariableIsDefinedInBlock(char *varname, int blockId);
555 
557 
570  return this->OriginalNumberOfElementVariables;}
572  return this->OriginalElementVariableNames;}
574  return this->NumberOfElementVariables;}
575  char **GetElementVariableNames() const {
576  return this->ElementVariableNames;}
578  return this->ElementVariableNumberOfComponents;}
580  return this->MapToOriginalElementVariableNames;}
582 
584  return this->OriginalNumberOfNodeVariables;}
586  return this->OriginalNodeVariableNames;}
588  return this->NumberOfNodeVariables;}
589  char **GetNodeVariableNames() const {
590  return this->NodeVariableNames;}
592  return this->NodeVariableNumberOfComponents;}
594  return this->MapToOriginalNodeVariableNames;}
595 
600  char *FindOriginalElementVariableName(const char *name, int component);
601 
606  char *FindOriginalNodeVariableName(const char *name, int component);
607 
610  static int HasMetadata(vtkDataSet *grid);
611 
614  static void RemoveMetadata(vtkDataSet *grid);
615 
617  void Pack(vtkDataSet *ugrid);
618 
623  int Unpack(vtkDataSet *ugrid, int deleteIt);
624 
626 
637  int AddUGridElementVariable(char *ugridVarName, char *origName, int numComponents);
638  int RemoveUGridElementVariable(char *ugridVarName);
640 
641  int AddUGridNodeVariable(char *ugridVarName, char *origName, int numComponents);
642  int RemoveUGridNodeVariable(char *ugridVarName);
643 
652  int MergeModelMetadata(const vtkModelMetadata *em);
653 
657  int MergeGlobalInformation(const vtkModelMetadata *em);
658 
660 
665  vtkModelMetadata *ExtractModelMetadata(vtkIdTypeArray *globalCellIdList,
666  vtkDataSet *grid);
668 
671  vtkModelMetadata *ExtractGlobalMetadata();
672 
674 
683  void FreeAllGlobalData();
684  void FreeAllLocalData();
685  void FreeBlockDependentData();
686  void FreeOriginalElementVariableNames();
687  void FreeOriginalNodeVariableNames();
688  void FreeUsedElementVariableNames();
689  void FreeUsedNodeVariableNames();
690  void FreeUsedElementVariables();
691  void FreeUsedNodeVariables();
693 
695  void Reset();
696 
699  int GetBlockLocalIndex(int id);
700 
701 protected:
703  ~vtkModelMetadata();
704 
705 private:
706  void InitializeAllMetadata();
707  void InitializeAllIvars();
708 
709  void FreeAllMetadata();
710  void FreeAllIvars();
711 
712  void FreeQARecords();
713 
714  int BuildBlockElementIdListIndex();
715  int BuildBlockAttributesIndex();
716  int BuildNodeSetNodeIdListIndex();
717  int BuildNodeSetDistributionFactorIndex();
718  int BuildSideSetListIndex();
719  int BuildSideSetDistributionFactorIndex();
720 
721  int InitializeFromSizeArray(vtkIntArray *ia, int &maxStr, int &maxLine);
722  vtkIntArray *PackSizeArray(int maxStr, int maxLine);
723  int InitializeFromIntArray(vtkModelMetadata *sizes, vtkIntArray *ia);
724  vtkIntArray *PackIntArray();
725  int InitializeFromCharArray(vtkModelMetadata *sizes,
726  vtkCharArray *uca, int maxStr, int maxLine);
727  vtkCharArray *PackCharArray(int maxStr, int maxLine);
728  int InitializeFromFloatArray(vtkFloatArray *fa);
729  vtkFloatArray *PackFloatArray();
730 
731  static char *StrDupWithNew(const char *s);
732 
733  static char *WriteLines(char *p, int maxLines, int maxLen, char **lines);
734  static char *ReadLines(char ***to, int maxLines,
735  int maxLen, char *from);
736  static char **CopyLines(char **lines, int num);
737  static int *CopyInts(int *vals, int num);
738 
739  static int FindNameOnList(char *name, char **list, int listLen);
740 
741  int MergeIdLists(int numSubLists,
742  int *id1, int *id1Idx, int id1Len,
743  float *dist1, int *dist1Idx, int dist1Len,
744  int *id2, int *id2Idx, int id2Len,
745  float *dist2, int *dist2Idx, int dist2Len,
746  int **idNew, int **idNewIdx, int *idNewLen,
747  float **distNew, int **distNewIdx, int *distNewLen);
748 
749  int AppendFloatLists(int numSubLists,
750  float *id1, int *id1Idx, int id1Len,
751  float *id2, int *id2Idx, int id2Len,
752  float **idNew, int **idNewIdx, int *idNewLen);
753 
754  int AppendIntegerLists(int numSubLists,
755  int *id1, int *id1Idx, int id1Len,
756  int *id2, int *id2Idx, int id2Len,
757  int **idNew, int **idNewIdx, int *idNewLen);
758 
759  void ExtractCellsFromBlockData(vtkModelMetadataSTLCloak *idset,
760  vtkModelMetadata *mmd);
761  void ExtractNodesFromNodeSetData(vtkModelMetadataSTLCloak *idset,
762  vtkModelMetadata *mmd);
763  void ExtractSidesFromSideSetData(vtkModelMetadataSTLCloak *idset,
764  vtkModelMetadata *mmd);
765 
766  void ShowFloats(const char *what, int num, float *f);
767  void ShowLines(const char *what, int num, char **l);
768  void ShowIntArray(const char *what, int numx, int numy, int *id);
769  void ShowInts(const char *what, int num, int *id);
770  void ShowListsOfInts(const char *what, int *list,
771  int nlists, int *idx, int len, int verbose);
772  void ShowListsOfFloats(const char *what, float *list,
773  int nlists, int *idx, int len, int verbose);
774 
775  void SetOriginalElementVariableNames(int nvars, char **names);
776  void SetElementVariableNames(int nvars, char **names);
777  void SetElementVariableNumberOfComponents(int *comp);
778  void SetMapToOriginalElementVariableNames(int *map);
779 
780  void SetOriginalNodeVariableNames(int nvars, char **names);
781  void SetNodeVariableNames(int nvars, char **names);
782  void SetNodeVariableNumberOfComponents(int *comp);
783  void SetMapToOriginalNodeVariableNames(int *map);
784 
785  int CalculateMaximumLengths(int &maxString, int &maxLine);
786 
787  // Fields in Exodus II file and their size (defined in exodusII.h)
788  // (G - global fields, relevant to entire file or file set)
789  // (L - local fields, they differ depending on which cells and nodes are
790  // in a file of a partitioned set, or are read in from file)
791 
792  char *Title; // (G)
793 
794  int NumberOfQARecords; // (G)
795 //BTX
796  char *(*QARecord)[4]; // NumberOfQARecords * 4 (G)
797 //ETX
798 
799  int NumberOfInformationLines; // (G)
800  char **InformationLine; // (G)
801 
802  int Dimension; // (G)
803  char **CoordinateNames; // (at most 3 of these) (G)
804 
805  // Time steps
806 
807  int TimeStepIndex; // starting at 0 (Exodus file starts at 1)
808  int NumberOfTimeSteps; // (G)
809  float *TimeStepValues; // (G)
810 
811  // Block information - arrays that are input with Set*
812 
813  int NumberOfBlocks; // (G)
814 
815  int *BlockIds; // NumberOfBlocks (G) (start at 1)
816  char **BlockElementType; // NumberOfBlocks (G)
817  int *BlockNumberOfElements; // NumberOfBlocks (L)
818  int *BlockNodesPerElement; // NumberOfBlocks (G)
819  int *BlockNumberOfAttributesPerElement;// NumberOfBlocks (G)
820  int *BlockElementIdList; // SumElementsPerBlock (L)
821  float *BlockAttributes; // SizeBlockAttributeArray (L)
822 
823  // Block information - values that we calculate
824 
825  int SumElementsPerBlock;
826  int SizeBlockAttributeArray;
827 
828  int *BlockElementIdListIndex; // NumberOfBlocks
829  int *BlockAttributesIndex; // NumberOfBlocks
830 
831  vtkModelMetadataSTLCloak *BlockIdIndex; // computed map
832 
833  // Node Sets - arrays that are input to the class with Set*
834 
835  int NumberOfNodeSets; // (G)
836 
837  int *NodeSetIds; // NumberOfNodeSets (G)
838  int *NodeSetSize; // NumberOfNodeSets (L)
839  int *NodeSetNumberOfDistributionFactors; // NNS (L) (NSNDF[i] is 0 or NSS[i])
840  int *NodeSetNodeIdList; // SumNodesPerNodeSet (L)
841  float *NodeSetDistributionFactors; // SumDistFactPerNodeSet (L)
842 
843  // Node Sets - values or arrays that the class computes
844 
845  int SumNodesPerNodeSet;
846  int SumDistFactPerNodeSet;
847 
848  int *NodeSetNodeIdListIndex; // NumberOfNodeSets
849  int *NodeSetDistributionFactorIndex; // NumberOfNodeSets
850 
851  // Side Sets - input to class with Set*
852 
853  int NumberOfSideSets; // (G)
854 
855  int *SideSetIds; // NumberOfSideSets (G)
856  int *SideSetSize; // NumberOfSideSets (L)
857  int *SideSetNumberOfDistributionFactors; // NSS (L) (SSNDF[i] = 0 or NumNodesInSide)
858  int *SideSetElementList; // SumSidesPerSideSet (L)
859  int *SideSetSideList; // SumSidesPerSideSet (L)
860  int *SideSetNumDFPerSide; // SumSidesPerSideSet (L)
861  float *SideSetDistributionFactors; // SumDistFactPerSideSet (L)
862 
863  // Side Sets - calculated by class
864 
865  int SumSidesPerSideSet;
866  int SumDistFactPerSideSet;
867 
868  int *SideSetListIndex; // NumberOfSideSets
869  int *SideSetDistributionFactorIndex; // NumberOfSideSets
870 
871  // Other properties, provided as input with Set*
872 
873  int NumberOfBlockProperties; // (G)
874  char **BlockPropertyNames; // one per property (G)
875  int *BlockPropertyValue; // NumBlocks * NumBlockProperties (G)
876 
877  int NumberOfNodeSetProperties; // (G)
878  char **NodeSetPropertyNames; // one per property (G)
879  int *NodeSetPropertyValue; // NumNodeSets * NumNodeSetProperties (G)
880 
881  int NumberOfSideSetProperties; // (G)
882  char **SideSetPropertyNames; // one per property (G)
883  int *SideSetPropertyValue; // NumSideSets * NumSideSetProperties (G)
884 
885  // Global variables, 1 value per time step per variable. We store
886  // these as floats, even if they are doubles in the file. The values
887  // are global in the sense that they apply to the whole data set, but
888  // the are local in the sense that they can change with each time step.
889  // For the purpose of this object, which represents a particular
890  // time step, they are therefore considered "local". (Since they need
891  // to be updated everytime another read is done from the file.)
892 
893  int NumberOfGlobalVariables; // (G)
894  char **GlobalVariableNames; // (G) NumberOfGlobalVariables
895  float *GlobalVariableValue; // (G) NumberOfGlobalVariables
896 
897  // The element and node arrays in the file were all scalar arrays.
898  // Those with similar names were combined into vectors in VTK. Here
899  // are all the original names from the Exodus file, the names given
900  // the variables in the VTK ugrid, and a mapping from the VTK names
901  // to the Exodus names.
902 
903  int OriginalNumberOfElementVariables; // (G)
904  char **OriginalElementVariableNames; // (G) OriginalNumberOfElementVariables
905  int NumberOfElementVariables; // (G)
906  int MaxNumberOfElementVariables; // (G)
907  char **ElementVariableNames; // (G) MaxNumberOfElementVariables
908  int *ElementVariableNumberOfComponents; // (G) MaxNumberOfElementVariables
909  int *MapToOriginalElementVariableNames; // (G) MaxNumberOfElementVariables
910 
911  int OriginalNumberOfNodeVariables; // (G)
912  char **OriginalNodeVariableNames; // (G) OriginalNumberOfNodeVariables
913  int NumberOfNodeVariables; // (G)
914  int MaxNumberOfNodeVariables; // (G)
915  char **NodeVariableNames; // (G) NumberOfNodeVariables
916  int *NodeVariableNumberOfComponents; // (G) NumberOfNodeVariables
917  int *MapToOriginalNodeVariableNames; // (G) NumberOfNodeVariables
918 
919  int *ElementVariableTruthTable; // (G) NumBlocks*OrigNumberOfElementVariables
920  int AllVariablesDefinedInAllBlocks;
921 
922 private:
923  vtkModelMetadata(const vtkModelMetadata&); // Not implemented
924  void operator=(const vtkModelMetadata&); // Not implemented
925 };
926 #endif