VTK
dox/Hybrid/vtkExodusIIReader.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkExodusIIReader.h
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*----------------------------------------------------------------------------
00016  Copyright (c) Sandia Corporation
00017  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
00018 ----------------------------------------------------------------------------*/
00019 
00039 #ifndef __vtkExodusIIReader_h
00040 #define __vtkExodusIIReader_h
00041 
00042 #include "vtkMultiBlockDataSetAlgorithm.h"
00043 
00044 class vtkDataArray;
00045 class vtkDataSet;
00046 class vtkExodusIICache;
00047 class vtkExodusIIReaderPrivate;
00048 class vtkExodusModel;
00049 class vtkFloatArray;
00050 class vtkGraph;
00051 class vtkIntArray;
00052 class vtkPoints;
00053 class vtkUnstructuredGrid;
00054 
00055 class VTK_HYBRID_EXPORT vtkExodusIIReader : public vtkMultiBlockDataSetAlgorithm 
00056 {
00057 public:
00058   static vtkExodusIIReader *New();
00059   vtkTypeMacro(vtkExodusIIReader,vtkMultiBlockDataSetAlgorithm);
00060   void PrintSelf(ostream& os, vtkIndent indent);
00061 
00063   int CanReadFile(const char* fname);
00064 
00065   //virtual void Modified();
00066 
00069   virtual unsigned long GetMTime();
00070   
00074   virtual unsigned long GetMetadataMTime();
00075 
00077 
00078   virtual void SetFileName( const char* fname );
00079   vtkGetStringMacro(FileName);
00081 
00083 
00084   virtual void SetXMLFileName( const char* fname );
00085   vtkGetStringMacro(XMLFileName);
00087 
00089 
00090   vtkSetMacro(TimeStep, int);
00091   vtkGetMacro(TimeStep, int);
00093 
00095 
00097   void SetModeShape(int val)
00098     {
00099     this->SetTimeStep(val-1);
00100     }
00102 
00104 
00105   vtkGetVector2Macro(TimeStepRange,int);
00106   vtkSetVector2Macro(TimeStepRange,int);
00108 
00110 
00119   virtual void SetGenerateObjectIdCellArray( int g );
00120   int GetGenerateObjectIdCellArray();
00121   vtkBooleanMacro(GenerateObjectIdCellArray, int);
00122   static const char *GetObjectIdArrayName() { return "ObjectId"; }  
00124 
00125   virtual void SetGenerateGlobalElementIdArray( int g );
00126   int GetGenerateGlobalElementIdArray();
00127   vtkBooleanMacro(GenerateGlobalElementIdArray, int);
00128 
00129   virtual void SetGenerateGlobalNodeIdArray( int g );
00130   int GetGenerateGlobalNodeIdArray();
00131   vtkBooleanMacro(GenerateGlobalNodeIdArray, int);
00132 
00133   virtual void SetGenerateImplicitElementIdArray( int g );
00134   int GetGenerateImplicitElementIdArray();
00135   vtkBooleanMacro(GenerateImplicitElementIdArray, int);
00136 
00137   virtual void SetGenerateImplicitNodeIdArray( int g );
00138   int GetGenerateImplicitNodeIdArray();
00139   vtkBooleanMacro(GenerateImplicitNodeIdArray, int);
00140 
00141   virtual void SetGenerateFileIdArray( int f );
00142   int GetGenerateFileIdArray();
00143   vtkBooleanMacro(GenerateFileIdArray, int);
00144   virtual void SetFileId( int f );
00145   int GetFileId();
00146 
00148 
00153   enum {
00154     SEARCH_TYPE_ELEMENT=0,
00155     SEARCH_TYPE_NODE,
00156     SEARCH_TYPE_ELEMENT_THEN_NODE,
00157     SEARCH_TYPE_NODE_THEN_ELEMENT,
00158     ID_NOT_FOUND=-234121312
00159   };
00160   // NOTE: GetNumberOfObjectTypes must be updated whenever you add an entry to enum ObjectType {...}
00161   enum ObjectType {
00162     // match Exodus macros from exodusII.h and exodusII_ext.h
00163     EDGE_BLOCK = 6,
00164     FACE_BLOCK = 8,
00165     ELEM_BLOCK = 1,
00166     NODE_SET = 2,
00167     EDGE_SET = 7,
00168     FACE_SET = 9,
00169     SIDE_SET = 3,
00170     ELEM_SET = 10,
00171     NODE_MAP = 5,
00172     EDGE_MAP = 11,
00173     FACE_MAP = 12,
00174     ELEM_MAP = 4,
00175     GLOBAL = 13,
00176     NODAL = 14,
00177     // extended values (not in Exodus headers) for use with SetAllArrayStatus:
00178     ASSEMBLY = 60,
00179     PART = 61,
00180     MATERIAL = 62,
00181     HIERARCHY = 63,
00182     // extended values (not in Exodus headers) for use in cache keys:
00183     QA_RECORDS = 103,          
00184     INFO_RECORDS = 104,        
00185     GLOBAL_TEMPORAL = 102,  
00186     NODAL_TEMPORAL = 101,      
00187     ELEM_BLOCK_TEMPORAL = 100,  
00188     GLOBAL_CONN = 99,          
00189     ELEM_BLOCK_ELEM_CONN = 98, 
00190     ELEM_BLOCK_FACE_CONN = 97, 
00191     ELEM_BLOCK_EDGE_CONN = 96, 
00192     FACE_BLOCK_CONN = 95,      
00193     EDGE_BLOCK_CONN = 94,      
00194     ELEM_SET_CONN = 93,        
00195     SIDE_SET_CONN = 92,        
00196     FACE_SET_CONN = 91,        
00197     EDGE_SET_CONN = 90,        
00198     NODE_SET_CONN = 89,        
00199     NODAL_COORDS = 88,         
00200     OBJECT_ID = 87,            
00201     IMPLICIT_ELEMENT_ID = 108, 
00202     IMPLICIT_NODE_ID = 107,    
00203     GLOBAL_ELEMENT_ID = 86,    
00204     GLOBAL_NODE_ID = 85,       
00205     ELEMENT_ID = 84,           
00206     NODE_ID = 83,              
00207     NODAL_SQUEEZEMAP = 82,     
00208     ELEM_BLOCK_ATTRIB = 81,    
00209     FACE_BLOCK_ATTRIB = 80,    
00210     EDGE_BLOCK_ATTRIB = 79,    
00211     FACE_ID = 105,             
00212     EDGE_ID = 106,             
00213     ENTITY_COUNTS = 109        
00214   };
00216   enum DecorationType {
00217     NONE = 0,         
00218     GLYPHS,           
00219     CORNER_AVERAGED   
00220   };
00222 //ETX
00223   static const char* GetGlobalElementIdArrayName() { return "GlobalElementId"; }
00224   static const char* GetPedigreeElementIdArrayName() { return "PedigreeElementId"; }
00225   static int GetGlobalElementID( vtkDataSet *data, int localID );
00226   static int GetGlobalElementID ( vtkDataSet *data, int localID, 
00227       int searchType );
00228   static const char* GetImplicitElementIdArrayName() { return "ImplicitElementId"; }
00229 
00230   static const char* GetGlobalFaceIdArrayName() { return "GlobalFaceId"; }
00231   static const char* GetPedigreeFaceIdArrayName() { return "PedigreeFaceId"; }
00232   static int GetGlobalFaceID( vtkDataSet *data, int localID );
00233   static int GetGlobalFaceID ( vtkDataSet *data, int localID, 
00234       int searchType );
00235   static const char* GetImplicitFaceIdArrayName() { return "ImplicitFaceId"; }
00236 
00237   static const char* GetGlobalEdgeIdArrayName() { return "GlobalEdgeId"; }
00238   static const char* GetPedigreeEdgeIdArrayName() { return "PedigreeEdgeId"; }
00239   static int GetGlobalEdgeID( vtkDataSet *data, int localID );
00240   static int GetGlobalEdgeID ( vtkDataSet *data, int localID, 
00241       int searchType );
00242   static const char* GetImplicitEdgeIdArrayName() { return "ImplicitEdgeId"; }
00243 
00245 
00249   static const char* GetGlobalNodeIdArrayName() { return "GlobalNodeId"; }  
00250   static const char* GetPedigreeNodeIdArrayName() { return "PedigreeNodeId"; }  
00251   static int GetGlobalNodeID( vtkDataSet *data, int localID );
00252   static int GetGlobalNodeID( vtkDataSet *data, int localID, 
00253       int searchType );
00254   static const char* GetImplicitNodeIdArrayName() { return "ImplicitNodeId"; }  
00256 
00258 
00262   virtual void SetApplyDisplacements( int d );
00263   int GetApplyDisplacements();
00264   vtkBooleanMacro(ApplyDisplacements, int);
00265   virtual void SetDisplacementMagnitude( float s );
00266   float GetDisplacementMagnitude();
00268 
00270 
00273   virtual void SetHasModeShapes( int ms );
00274   int GetHasModeShapes();
00275   vtkBooleanMacro(HasModeShapes,int);
00277 
00279 
00285   virtual void SetModeShapeTime( double phase );
00286   double GetModeShapeTime();
00288 
00290 
00295   virtual void SetAnimateModeShapes(int flag);
00296   int GetAnimateModeShapes();
00297   vtkBooleanMacro(AnimateModeShapes, int);
00299 
00301 
00302   virtual void SetEdgeFieldDecorations( int d );
00303   int GetEdgeFieldDecorations();
00304   void EdgeFieldDecorationsNone() { this->SetEdgeFieldDecorations( NONE ); }
00305   void EdgeFieldDecorationsGlyphs() { this->SetEdgeFieldDecorations( GLYPHS ); }
00306   void EdgeFieldDecorationsCornerAveraged() { this->SetEdgeFieldDecorations( CORNER_AVERAGED ); }
00308 
00310 
00311   virtual void SetFaceFieldDecorations( int d );
00312   int GetFaceFieldDecorations();
00313   void FaceFieldDecorationsNone() { this->SetFaceFieldDecorations( NONE ); }
00314   void FaceFieldDecorationsGlyphs() { this->SetFaceFieldDecorations( GLYPHS ); }
00315   void FaceFieldDecorationsCornerAveraged() { this->SetFaceFieldDecorations( CORNER_AVERAGED ); }
00317 
00319 
00320   const char* GetTitle();
00321   int GetDimensionality();
00322   int GetNumberOfTimeSteps();
00324 
00325   int GetNumberOfNodesInFile();
00326   int GetNumberOfEdgesInFile();
00327   int GetNumberOfFacesInFile();
00328   int GetNumberOfElementsInFile();
00329 
00330   int GetObjectTypeFromName( const char* name );
00331   const char* GetObjectTypeName( int );
00332 
00333   int GetNumberOfNodes();
00334   int GetNumberOfObjects( int objectType );
00335   int GetNumberOfEntriesInObject( int objectType, int objectIndex );
00336   int GetObjectId( int objectType, int objectIndex );
00337   const char* GetObjectName( int objectType, int objectIndex );
00338   int GetObjectIndex( int objectType, const char* objectName );
00339   int GetObjectIndex( int objectType, int id );
00340   int GetObjectStatus( int objectType, int objectIndex );
00341   int GetObjectStatus( int objectType, const char* objectName )
00342     { return this->GetObjectStatus( objectType, this->GetObjectIndex( objectType, objectName ) ); }
00343   void SetObjectStatus( int objectType, int objectIndex, int status );
00344   void SetObjectStatus( int objectType, const char* objectName, int status );
00345 
00347 
00352   int GetNumberOfObjectArrays( int objectType );
00353   const char* GetObjectArrayName( int objectType, int arrayIndex );
00354   int GetObjectArrayIndex( int objectType, const char* arrayName );
00355   int GetNumberOfObjectArrayComponents( int objectType, int arrayIndex );
00356   int GetObjectArrayStatus( int objectType, int arrayIndex );
00357   int GetObjectArrayStatus( int objectType, const char* arrayName )
00358     { return this->GetObjectArrayStatus( objectType, this->GetObjectArrayIndex( objectType, arrayName ) ); }
00359   void SetObjectArrayStatus( int objectType, int arrayIndex, int status );
00360   void SetObjectArrayStatus( int objectType, const char* arrayName, int status ); 
00362 
00364 
00369   int GetNumberOfObjectAttributes( int objectType, int objectIndex );
00370   const char* GetObjectAttributeName( int objectType, int objectIndex, int attribIndex );
00371   int GetObjectAttributeIndex( int objectType, int objectIndex, const char* attribName );
00372   int GetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex );
00373   int GetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName )
00374     { return this->GetObjectAttributeStatus( objectType, objectIndex,
00375       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ) ); }
00376   void SetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex, int status );
00377   void SetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName, int status )
00378     { this->SetObjectAttributeStatus( objectType, objectIndex,
00379       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ), status ); }
00381 
00382   virtual vtkIdType GetTotalNumberOfNodes();
00383   virtual vtkIdType GetTotalNumberOfEdges();
00384   virtual vtkIdType GetTotalNumberOfFaces();
00385   virtual vtkIdType GetTotalNumberOfElements();
00386 
00388 
00392   int GetNumberOfPartArrays();
00393   const char* GetPartArrayName(int arrayIdx);
00394   int GetPartArrayID( const char *name );
00395   const char* GetPartBlockInfo(int arrayIdx);
00396   void SetPartArrayStatus(int index, int flag);
00397   void SetPartArrayStatus(const char*, int flag);
00398   int GetPartArrayStatus(int index);
00399   int GetPartArrayStatus(const char*);
00401   
00402 
00404 
00408   int GetNumberOfMaterialArrays();
00409   const char* GetMaterialArrayName(int arrayIdx);
00410   int GetMaterialArrayID( const char *name );
00411   void SetMaterialArrayStatus(int index, int flag);
00412   void SetMaterialArrayStatus(const char*, int flag);
00413   int GetMaterialArrayStatus(int index);
00414   int GetMaterialArrayStatus(const char*);
00416 
00418 
00422   int GetNumberOfAssemblyArrays();
00423   const char* GetAssemblyArrayName(int arrayIdx);
00424   int GetAssemblyArrayID( const char *name );
00425   void SetAssemblyArrayStatus(int index, int flag);
00426   void SetAssemblyArrayStatus(const char*, int flag);
00427   int GetAssemblyArrayStatus(int index);
00428   int GetAssemblyArrayStatus(const char*);
00430 
00432 
00439   int GetNumberOfHierarchyArrays();
00440   const char* GetHierarchyArrayName(int arrayIdx);
00441   void SetHierarchyArrayStatus(int index, int flag);
00442   void SetHierarchyArrayStatus(const char*, int flag);
00443   int GetHierarchyArrayStatus(int index);
00444   int GetHierarchyArrayStatus(const char*);
00446 
00447   vtkGetMacro(DisplayType,int);
00448   virtual void SetDisplayType(int type);
00449 
00455   vtkBooleanMacro(ExodusModelMetadata, int);
00456   vtkSetMacro(ExodusModelMetadata, int);
00457   vtkGetMacro(ExodusModelMetadata, int);
00458 
00460 
00461   vtkGetObjectMacro(ExodusModel,vtkExodusModel);
00463 
00471   vtkSetMacro(PackExodusModelOntoOutput, int);
00472   vtkGetMacro(PackExodusModelOntoOutput, int);
00473   vtkBooleanMacro(PackExodusModelOntoOutput, int);
00474 
00476   int IsValidVariable( const char *type, const char *name );
00477 
00479   int GetVariableID ( const char *type, const char *name );
00480 
00481   void SetAllArrayStatus( int otype, int status );
00482   // Helper functions
00483   //static int StringsEqual(const char* s1, char* s2);
00484   //static void StringUppercase(const char* str, char* upperstr);
00485   //static char *StrDupWithNew(const char *s);
00486 
00487   // time series query functions
00488   int GetTimeSeriesData( int ID, const char *vName, const char *vType, 
00489                          vtkFloatArray *result );
00490 
00491 
00492 
00493   int GetNumberOfEdgeBlockArrays()
00494     { return this->GetNumberOfObjects(EDGE_BLOCK); }
00495   const char* GetEdgeBlockArrayName(int index)
00496     { return this->GetObjectName(EDGE_BLOCK, index); }
00497   int GetEdgeBlockArrayStatus(const char* name)
00498     { return this->GetObjectStatus(EDGE_BLOCK, name); }
00499   void SetEdgeBlockArrayStatus(const char* name, int flag)
00500     { this->SetObjectStatus(EDGE_BLOCK, name, flag); }
00501   
00502   int GetNumberOfFaceBlockArrays()
00503     { return this->GetNumberOfObjects(FACE_BLOCK); }
00504   const char* GetFaceBlockArrayName(int index)
00505     { return this->GetObjectName(FACE_BLOCK, index); }
00506   int GetFaceBlockArrayStatus(const char* name)
00507     { return this->GetObjectStatus(FACE_BLOCK, name); }
00508   void SetFaceBlockArrayStatus(const char* name, int flag)
00509     { this->SetObjectStatus(FACE_BLOCK, name, flag); }
00510  
00511   int GetNumberOfElementBlockArrays()
00512     { return this->GetNumberOfObjects(ELEM_BLOCK); }
00513   const char* GetElementBlockArrayName(int index)
00514     { return this->GetObjectName(ELEM_BLOCK, index); }
00515   int GetElementBlockArrayStatus(const char* name)
00516     { return this->GetObjectStatus(ELEM_BLOCK, name); }
00517   void SetElementBlockArrayStatus(const char* name, int flag)
00518     { this->SetObjectStatus(ELEM_BLOCK, name, flag); }
00519 
00520   int GetNumberOfGlobalResultArrays()
00521     { return this->GetNumberOfObjectArrays(GLOBAL); }
00522   const char* GetGlobalResultArrayName(int index)
00523     { return this->GetObjectArrayName(GLOBAL, index); }
00524   int GetGlobalResultArrayStatus(const char* name)
00525     { return this->GetObjectArrayStatus(GLOBAL, name); }
00526   void SetGlobalResultArrayStatus(const char* name, int flag)
00527     { this->SetObjectArrayStatus(GLOBAL, name, flag); }
00528   
00529   int GetNumberOfPointResultArrays()
00530     { return this->GetNumberOfObjectArrays(NODAL); }
00531   const char* GetPointResultArrayName(int index)
00532     { return this->GetObjectArrayName(NODAL, index); }
00533   int GetPointResultArrayStatus(const char* name)
00534     { return this->GetObjectArrayStatus(NODAL, name); }
00535   void SetPointResultArrayStatus(const char* name, int flag)
00536     { this->SetObjectArrayStatus(NODAL, name, flag); }
00537   
00538   int GetNumberOfEdgeResultArrays()
00539     { return this->GetNumberOfObjectArrays(EDGE_BLOCK); }
00540   const char* GetEdgeResultArrayName(int index)
00541     { return this->GetObjectArrayName(EDGE_BLOCK, index); }
00542   int GetEdgeResultArrayStatus(const char* name)
00543     { return this->GetObjectArrayStatus(EDGE_BLOCK, name); }
00544   void SetEdgeResultArrayStatus(const char* name, int flag)
00545     { this->SetObjectArrayStatus(EDGE_BLOCK, name, flag); }
00546 
00547   int GetNumberOfFaceResultArrays()
00548     { return this->GetNumberOfObjectArrays(FACE_BLOCK); }
00549   const char* GetFaceResultArrayName(int index)
00550     { return this->GetObjectArrayName(FACE_BLOCK, index); }
00551   int GetFaceResultArrayStatus(const char* name)
00552     { return this->GetObjectArrayStatus(FACE_BLOCK, name); }
00553   void SetFaceResultArrayStatus(const char* name, int flag)
00554     { this->SetObjectArrayStatus(FACE_BLOCK, name, flag); }
00555 
00556   int GetNumberOfElementResultArrays()
00557     { return this->GetNumberOfObjectArrays(ELEM_BLOCK); }
00558   const char* GetElementResultArrayName(int index)
00559     { return this->GetObjectArrayName(ELEM_BLOCK, index); }
00560   int GetElementResultArrayStatus(const char* name)
00561     { return this->GetObjectArrayStatus(ELEM_BLOCK, name); }
00562   void SetElementResultArrayStatus(const char* name, int flag)
00563     { this->SetObjectArrayStatus(ELEM_BLOCK, name, flag); }
00564   
00565   
00566   int GetNumberOfNodeMapArrays()
00567     { return this->GetNumberOfObjects(NODE_MAP); }
00568   const char* GetNodeMapArrayName(int index)
00569     { return this->GetObjectName(NODE_MAP, index); }
00570   int GetNodeMapArrayStatus(const char* name)
00571     { return this->GetObjectStatus(NODE_MAP, name); }
00572   void SetNodeMapArrayStatus(const char* name, int flag)
00573     { this->SetObjectStatus(NODE_MAP, name, flag); }
00574   
00575   int GetNumberOfEdgeMapArrays()
00576     { return this->GetNumberOfObjects(EDGE_MAP); }
00577   const char* GetEdgeMapArrayName(int index)
00578     { return this->GetObjectName(EDGE_MAP, index); }
00579   int GetEdgeMapArrayStatus(const char* name)
00580     { return this->GetObjectStatus(EDGE_MAP, name); }
00581   void SetEdgeMapArrayStatus(const char* name, int flag)
00582     { this->SetObjectStatus(EDGE_MAP, name, flag); }
00583 
00584   int GetNumberOfFaceMapArrays()
00585     { return this->GetNumberOfObjects(FACE_MAP); }
00586   const char* GetFaceMapArrayName(int index)
00587     { return this->GetObjectName(FACE_MAP, index); }
00588   int GetFaceMapArrayStatus(const char* name)
00589     { return this->GetObjectStatus(FACE_MAP, name); }
00590   void SetFaceMapArrayStatus(const char* name, int flag)
00591     { this->SetObjectStatus(FACE_MAP, name, flag); }
00592 
00593   int GetNumberOfElementMapArrays()
00594     { return this->GetNumberOfObjects(ELEM_MAP); }
00595   const char* GetElementMapArrayName(int index)
00596     { return this->GetObjectName(ELEM_MAP, index); }
00597   int GetElementMapArrayStatus(const char* name)
00598     { return this->GetObjectStatus(ELEM_MAP, name); }
00599   void SetElementMapArrayStatus(const char* name, int flag)
00600     { this->SetObjectStatus(ELEM_MAP, name, flag); }
00601   
00602   int GetNumberOfNodeSetArrays()
00603     { return this->GetNumberOfObjects(NODE_SET); }
00604   const char* GetNodeSetArrayName(int index)
00605     { return this->GetObjectName(NODE_SET, index); }
00606   int GetNodeSetArrayStatus(const char* name)
00607     { return this->GetObjectStatus(NODE_SET, name); }
00608   void SetNodeSetArrayStatus(const char* name, int flag)
00609     { this->SetObjectStatus(NODE_SET, name, flag); }
00610   
00611   int GetNumberOfSideSetArrays()
00612     { return this->GetNumberOfObjects(SIDE_SET); }
00613   const char* GetSideSetArrayName(int index)
00614     { return this->GetObjectName(SIDE_SET, index); }
00615   int GetSideSetArrayStatus(const char* name)
00616     { return this->GetObjectStatus(SIDE_SET, name); }
00617   void SetSideSetArrayStatus(const char* name, int flag)
00618     { this->SetObjectStatus(SIDE_SET, name, flag); }
00619   
00620   int GetNumberOfEdgeSetArrays()
00621     { return this->GetNumberOfObjects(EDGE_SET); }
00622   const char* GetEdgeSetArrayName(int index)
00623     { return this->GetObjectName(EDGE_SET, index); }
00624   int GetEdgeSetArrayStatus(const char* name)
00625     { return this->GetObjectStatus(EDGE_SET, name); }
00626   void SetEdgeSetArrayStatus(const char* name, int flag)
00627     { this->SetObjectStatus(EDGE_SET, name, flag); }
00628 
00629   int GetNumberOfFaceSetArrays()
00630     { return this->GetNumberOfObjects(FACE_SET); }
00631   const char* GetFaceSetArrayName(int index)
00632     { return this->GetObjectName(FACE_SET, index); }
00633   int GetFaceSetArrayStatus(const char* name)
00634     { return this->GetObjectStatus(FACE_SET, name); }
00635   void SetFaceSetArrayStatus(const char* name, int flag)
00636     { this->SetObjectStatus(FACE_SET, name, flag); }
00637   
00638   int GetNumberOfElementSetArrays()
00639     { return this->GetNumberOfObjects(ELEM_SET); }
00640   const char* GetElementSetArrayName(int index)
00641     { return this->GetObjectName(ELEM_SET, index); }
00642   int GetElementSetArrayStatus(const char* name)
00643     { return this->GetObjectStatus(ELEM_SET, name); }
00644   void SetElementSetArrayStatus(const char* name, int flag)
00645     { this->SetObjectStatus(ELEM_SET, name, flag); }
00646   
00647   
00648   int GetNumberOfNodeSetResultArrays()
00649     { return this->GetNumberOfObjectArrays(NODE_SET); }
00650   const char* GetNodeSetResultArrayName(int index)
00651     { return this->GetObjectArrayName(NODE_SET, index); }
00652   int GetNodeSetResultArrayStatus(const char* name)
00653     { return this->GetObjectArrayStatus(NODE_SET, name); }
00654   void SetNodeSetResultArrayStatus(const char* name, int flag)
00655     { this->SetObjectArrayStatus(NODE_SET, name, flag); }
00656   
00657   int GetNumberOfSideSetResultArrays()
00658     { return this->GetNumberOfObjectArrays(SIDE_SET); }
00659   const char* GetSideSetResultArrayName(int index)
00660     { return this->GetObjectArrayName(SIDE_SET, index); }
00661   int GetSideSetResultArrayStatus(const char* name)
00662     { return this->GetObjectArrayStatus(SIDE_SET, name); }
00663   void SetSideSetResultArrayStatus(const char* name, int flag)
00664     { this->SetObjectArrayStatus(SIDE_SET, name, flag); }
00665   
00666   int GetNumberOfEdgeSetResultArrays()
00667     { return this->GetNumberOfObjectArrays(EDGE_SET); }
00668   const char* GetEdgeSetResultArrayName(int index)
00669     { return this->GetObjectArrayName(EDGE_SET, index); }
00670   int GetEdgeSetResultArrayStatus(const char* name)
00671     { return this->GetObjectArrayStatus(EDGE_SET, name); }
00672   void SetEdgeSetResultArrayStatus(const char* name, int flag)
00673     { this->SetObjectArrayStatus(EDGE_SET, name, flag); }
00674 
00675   int GetNumberOfFaceSetResultArrays()
00676     { return this->GetNumberOfObjectArrays(FACE_SET); }
00677   const char* GetFaceSetResultArrayName(int index)
00678     { return this->GetObjectArrayName(FACE_SET, index); }
00679   int GetFaceSetResultArrayStatus(const char* name)
00680     { return this->GetObjectArrayStatus(FACE_SET, name); }
00681   void SetFaceSetResultArrayStatus(const char* name, int flag)
00682     { this->SetObjectArrayStatus(FACE_SET, name, flag); }
00683   
00684   int GetNumberOfElementSetResultArrays()
00685     { return this->GetNumberOfObjectArrays(ELEM_SET); }
00686   const char* GetElementSetResultArrayName(int index)
00687     { return this->GetObjectArrayName(ELEM_SET, index); }
00688   int GetElementSetResultArrayStatus(const char* name)
00689     { return this->GetObjectArrayStatus(ELEM_SET, name); }
00690   void SetElementSetResultArrayStatus(const char* name, int flag)
00691     { this->SetObjectArrayStatus(ELEM_SET, name, flag); }
00692 
00705 
00706 
00709   void SetFastPathObjectType(const char *type);
00710   // Description:
00711   // Possible argument values: "INDEX","GLOBAL"
00712   // "GLOBAL" means the id refers to a global id
00713   // "INDEX" means the id refers to an index into the VTK array
00714   void SetFastPathIdType(const char *type);
00715   void SetFastPathObjectId(vtkIdType id);
00717 
00718 
00723   void Reset();
00724 
00730   void ResetSettings();
00731 
00733   void ResetCache();
00734 
00737   virtual void UpdateTimeInformation();
00738 
00739   virtual void Dump();
00740 
00743   vtkGraph* GetSIL();
00744 
00746 
00747   vtkGetMacro(SILUpdateStamp, int);
00749 
00751 
00753   vtkGetMacro(ProducedFastPathOutput, bool);
00755 
00756 protected:
00757   vtkExodusIIReader();
00758   ~vtkExodusIIReader();
00759 
00762   virtual void NewExodusModel();
00763 
00764   // helper for finding IDs
00765   static int GetIDHelper ( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00766   static int GetGlobalID( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00767 
00768   virtual void SetMetadata( vtkExodusIIReaderPrivate* );
00769   vtkGetObjectMacro(Metadata,vtkExodusIIReaderPrivate);
00770 
00776   bool FindXMLFile();
00777 
00778   // Time query function. Called by ExecuteInformation().
00779   // Fills the TimestepValues array.
00780   void GetAllTimes(vtkInformationVector*); 
00781 
00783   void AdvertiseTimeSteps( vtkInformation* outputInfo );
00784 
00785   virtual void SetExodusModel( vtkExodusModel* em );
00786 
00787   int ProcessRequest( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00788   int RequestInformation( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00789   int RequestData( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00790   //int RequestDataOverTime( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00791 
00792   // Parameters for controlling what is read in.
00793   char* FileName;
00794   char* XMLFileName;
00795   int TimeStep;
00796   int TimeStepRange[2];
00797   vtkTimeStamp FileNameMTime;
00798   vtkTimeStamp XMLFileNameMTime;
00799   
00800   // Information specific for exodus files.
00801 
00802   //1=display Block names
00803   //2=display Part names
00804   //3=display Material names
00805   int DisplayType;
00806  
00807   // Metadata containing a description of the currently open file.
00808   vtkExodusIIReaderPrivate* Metadata;
00809 
00810   vtkExodusModel *ExodusModel;
00811   int PackExodusModelOntoOutput;
00812   int ExodusModelMetadata;
00813 
00814   int SILUpdateStamp;
00815   bool ProducedFastPathOutput;
00816 private:
00817   vtkExodusIIReader(const vtkExodusIIReader&); // Not implemented
00818   void operator=(const vtkExodusIIReader&); // Not implemented
00819 
00820   void AddDisplacements(vtkUnstructuredGrid* output);
00821 };
00822 
00823 #endif