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 
00147 //BTX
00149 
00154   enum {
00155     SEARCH_TYPE_ELEMENT=0,
00156     SEARCH_TYPE_NODE,
00157     SEARCH_TYPE_ELEMENT_THEN_NODE,
00158     SEARCH_TYPE_NODE_THEN_ELEMENT,
00159     ID_NOT_FOUND=-234121312
00160   };
00161   // NOTE: GetNumberOfObjectTypes must be updated whenever you add an entry to enum ObjectType {...}
00162   enum ObjectType {
00163     // match Exodus macros from exodusII.h and exodusII_ext.h
00164     EDGE_BLOCK = 6,
00165     FACE_BLOCK = 8,
00166     ELEM_BLOCK = 1,
00167     NODE_SET = 2,
00168     EDGE_SET = 7,
00169     FACE_SET = 9,
00170     SIDE_SET = 3,
00171     ELEM_SET = 10,
00172     NODE_MAP = 5,
00173     EDGE_MAP = 11,
00174     FACE_MAP = 12,
00175     ELEM_MAP = 4,
00176     GLOBAL = 13,
00177     NODAL = 14,
00178     // extended values (not in Exodus headers) for use with SetAllArrayStatus:
00179     ASSEMBLY = 60,
00180     PART = 61,
00181     MATERIAL = 62,
00182     HIERARCHY = 63,
00183     // extended values (not in Exodus headers) for use in cache keys:
00184     QA_RECORDS = 103,          
00185     INFO_RECORDS = 104,        
00186     GLOBAL_TEMPORAL = 102,  
00187     NODAL_TEMPORAL = 101,      
00188     ELEM_BLOCK_TEMPORAL = 100,  
00189     GLOBAL_CONN = 99,          
00190     ELEM_BLOCK_ELEM_CONN = 98, 
00191     ELEM_BLOCK_FACE_CONN = 97, 
00192     ELEM_BLOCK_EDGE_CONN = 96, 
00193     FACE_BLOCK_CONN = 95,      
00194     EDGE_BLOCK_CONN = 94,      
00195     ELEM_SET_CONN = 93,        
00196     SIDE_SET_CONN = 92,        
00197     FACE_SET_CONN = 91,        
00198     EDGE_SET_CONN = 90,        
00199     NODE_SET_CONN = 89,        
00200     NODAL_COORDS = 88,         
00201     OBJECT_ID = 87,            
00202     IMPLICIT_ELEMENT_ID = 108, 
00203     IMPLICIT_NODE_ID = 107,    
00204     GLOBAL_ELEMENT_ID = 86,    
00205     GLOBAL_NODE_ID = 85,       
00206     ELEMENT_ID = 84,           
00207     NODE_ID = 83,              
00208     NODAL_SQUEEZEMAP = 82,     
00209     ELEM_BLOCK_ATTRIB = 81,    
00210     FACE_BLOCK_ATTRIB = 80,    
00211     EDGE_BLOCK_ATTRIB = 79,    
00212     FACE_ID = 105,             
00213     EDGE_ID = 106,             
00214     ENTITY_COUNTS = 109        
00215   };
00217   enum DecorationType {
00218     NONE = 0,         
00219     GLYPHS,           
00220     CORNER_AVERAGED   
00221   };
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"; }
00230 
00231   static const char* GetGlobalFaceIdArrayName() { return "GlobalFaceId"; }
00232   static const char* GetPedigreeFaceIdArrayName() { return "PedigreeFaceId"; }
00233   static int GetGlobalFaceID( vtkDataSet *data, int localID );
00234   static int GetGlobalFaceID ( vtkDataSet *data, int localID, 
00235       int searchType );
00236   static const char* GetImplicitFaceIdArrayName() { return "ImplicitFaceId"; }
00237 
00238   static const char* GetGlobalEdgeIdArrayName() { return "GlobalEdgeId"; }
00239   static const char* GetPedigreeEdgeIdArrayName() { return "PedigreeEdgeId"; }
00240   static int GetGlobalEdgeID( vtkDataSet *data, int localID );
00241   static int GetGlobalEdgeID ( vtkDataSet *data, int localID, 
00242       int searchType );
00243   static const char* GetImplicitEdgeIdArrayName() { return "ImplicitEdgeId"; }
00244 
00246 
00250   static const char* GetGlobalNodeIdArrayName() { return "GlobalNodeId"; }  
00251   static const char* GetPedigreeNodeIdArrayName() { return "PedigreeNodeId"; }  
00252   static int GetGlobalNodeID( vtkDataSet *data, int localID );
00253   static int GetGlobalNodeID( vtkDataSet *data, int localID, 
00254       int searchType );
00255   static const char* GetImplicitNodeIdArrayName() { return "ImplicitNodeId"; }  
00257 
00259 
00263   virtual void SetApplyDisplacements( int d );
00264   int GetApplyDisplacements();
00265   vtkBooleanMacro(ApplyDisplacements, int);
00266   virtual void SetDisplacementMagnitude( float s );
00267   float GetDisplacementMagnitude();
00269 
00271 
00274   virtual void SetHasModeShapes( int ms );
00275   int GetHasModeShapes();
00276   vtkBooleanMacro(HasModeShapes,int);
00278 
00280 
00286   virtual void SetModeShapeTime( double phase );
00287   double GetModeShapeTime();
00289 
00291 
00296   virtual void SetAnimateModeShapes(int flag);
00297   int GetAnimateModeShapes();
00298   vtkBooleanMacro(AnimateModeShapes, int);
00300 
00302 
00303   virtual void SetEdgeFieldDecorations( int d );
00304   int GetEdgeFieldDecorations();
00305   void EdgeFieldDecorationsNone() { this->SetEdgeFieldDecorations( NONE ); }
00306   void EdgeFieldDecorationsGlyphs() { this->SetEdgeFieldDecorations( GLYPHS ); }
00307   void EdgeFieldDecorationsCornerAveraged() { this->SetEdgeFieldDecorations( CORNER_AVERAGED ); }
00309 
00311 
00312   virtual void SetFaceFieldDecorations( int d );
00313   int GetFaceFieldDecorations();
00314   void FaceFieldDecorationsNone() { this->SetFaceFieldDecorations( NONE ); }
00315   void FaceFieldDecorationsGlyphs() { this->SetFaceFieldDecorations( GLYPHS ); }
00316   void FaceFieldDecorationsCornerAveraged() { this->SetFaceFieldDecorations( CORNER_AVERAGED ); }
00318 
00320 
00321   const char* GetTitle();
00322   int GetDimensionality();
00323   int GetNumberOfTimeSteps();
00325 
00326   int GetNumberOfNodesInFile();
00327   int GetNumberOfEdgesInFile();
00328   int GetNumberOfFacesInFile();
00329   int GetNumberOfElementsInFile();
00330 
00331   int GetObjectTypeFromName( const char* name );
00332   const char* GetObjectTypeName( int );
00333 
00334   int GetNumberOfNodes();
00335   int GetNumberOfObjects( int objectType );
00336   int GetNumberOfEntriesInObject( int objectType, int objectIndex );
00337   int GetObjectId( int objectType, int objectIndex );
00338   const char* GetObjectName( int objectType, int objectIndex );
00339   int GetObjectIndex( int objectType, const char* objectName );
00340   int GetObjectIndex( int objectType, int id );
00341   int GetObjectStatus( int objectType, int objectIndex );
00342   int GetObjectStatus( int objectType, const char* objectName )
00343     { return this->GetObjectStatus( objectType, this->GetObjectIndex( objectType, objectName ) ); }
00344   void SetObjectStatus( int objectType, int objectIndex, int status );
00345   void SetObjectStatus( int objectType, const char* objectName, int status );
00346 
00348 
00353   int GetNumberOfObjectArrays( int objectType );
00354   const char* GetObjectArrayName( int objectType, int arrayIndex );
00355   int GetObjectArrayIndex( int objectType, const char* arrayName );
00356   int GetNumberOfObjectArrayComponents( int objectType, int arrayIndex );
00357   int GetObjectArrayStatus( int objectType, int arrayIndex );
00358   int GetObjectArrayStatus( int objectType, const char* arrayName )
00359     { return this->GetObjectArrayStatus( objectType, this->GetObjectArrayIndex( objectType, arrayName ) ); }
00360   void SetObjectArrayStatus( int objectType, int arrayIndex, int status );
00361   void SetObjectArrayStatus( int objectType, const char* arrayName, int status ); 
00363 
00365 
00370   int GetNumberOfObjectAttributes( int objectType, int objectIndex );
00371   const char* GetObjectAttributeName( int objectType, int objectIndex, int attribIndex );
00372   int GetObjectAttributeIndex( int objectType, int objectIndex, const char* attribName );
00373   int GetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex );
00374   int GetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName )
00375     { return this->GetObjectAttributeStatus( objectType, objectIndex,
00376       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ) ); }
00377   void SetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex, int status );
00378   void SetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName, int status )
00379     { this->SetObjectAttributeStatus( objectType, objectIndex,
00380       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ), status ); }
00382 
00383   virtual vtkIdType GetTotalNumberOfNodes();
00384   virtual vtkIdType GetTotalNumberOfEdges();
00385   virtual vtkIdType GetTotalNumberOfFaces();
00386   virtual vtkIdType GetTotalNumberOfElements();
00387 
00389 
00393   int GetNumberOfPartArrays();
00394   const char* GetPartArrayName(int arrayIdx);
00395   int GetPartArrayID( const char *name );
00396   const char* GetPartBlockInfo(int arrayIdx);
00397   void SetPartArrayStatus(int index, int flag);
00398   void SetPartArrayStatus(const char*, int flag);
00399   int GetPartArrayStatus(int index);
00400   int GetPartArrayStatus(const char*);
00402   
00403 
00405 
00409   int GetNumberOfMaterialArrays();
00410   const char* GetMaterialArrayName(int arrayIdx);
00411   int GetMaterialArrayID( const char *name );
00412   void SetMaterialArrayStatus(int index, int flag);
00413   void SetMaterialArrayStatus(const char*, int flag);
00414   int GetMaterialArrayStatus(int index);
00415   int GetMaterialArrayStatus(const char*);
00417 
00419 
00423   int GetNumberOfAssemblyArrays();
00424   const char* GetAssemblyArrayName(int arrayIdx);
00425   int GetAssemblyArrayID( const char *name );
00426   void SetAssemblyArrayStatus(int index, int flag);
00427   void SetAssemblyArrayStatus(const char*, int flag);
00428   int GetAssemblyArrayStatus(int index);
00429   int GetAssemblyArrayStatus(const char*);
00431 
00433 
00440   int GetNumberOfHierarchyArrays();
00441   const char* GetHierarchyArrayName(int arrayIdx);
00442   void SetHierarchyArrayStatus(int index, int flag);
00443   void SetHierarchyArrayStatus(const char*, int flag);
00444   int GetHierarchyArrayStatus(int index);
00445   int GetHierarchyArrayStatus(const char*);
00447 
00448   vtkGetMacro(DisplayType,int);
00449   virtual void SetDisplayType(int type);
00450 
00456   vtkBooleanMacro(ExodusModelMetadata, int);
00457   vtkSetMacro(ExodusModelMetadata, int);
00458   vtkGetMacro(ExodusModelMetadata, int);
00459 
00461 
00462   vtkGetObjectMacro(ExodusModel,vtkExodusModel);
00464 
00472   vtkSetMacro(PackExodusModelOntoOutput, int);
00473   vtkGetMacro(PackExodusModelOntoOutput, int);
00474   vtkBooleanMacro(PackExodusModelOntoOutput, int);
00475 
00477   int IsValidVariable( const char *type, const char *name );
00478 
00480   int GetVariableID ( const char *type, const char *name );
00481 
00482   void SetAllArrayStatus( int otype, int status );
00483   // Helper functions
00484   //static int StringsEqual(const char* s1, char* s2);
00485   //static void StringUppercase(const char* str, char* upperstr);
00486   //static char *StrDupWithNew(const char *s);
00487 
00488   // time series query functions
00489   int GetTimeSeriesData( int ID, const char *vName, const char *vType, 
00490                          vtkFloatArray *result );
00491 
00492 
00493 
00494   int GetNumberOfEdgeBlockArrays()
00495     { return this->GetNumberOfObjects(EDGE_BLOCK); }
00496   const char* GetEdgeBlockArrayName(int index)
00497     { return this->GetObjectName(EDGE_BLOCK, index); }
00498   int GetEdgeBlockArrayStatus(const char* name)
00499     { return this->GetObjectStatus(EDGE_BLOCK, name); }
00500   void SetEdgeBlockArrayStatus(const char* name, int flag)
00501     { this->SetObjectStatus(EDGE_BLOCK, name, flag); }
00502   
00503   int GetNumberOfFaceBlockArrays()
00504     { return this->GetNumberOfObjects(FACE_BLOCK); }
00505   const char* GetFaceBlockArrayName(int index)
00506     { return this->GetObjectName(FACE_BLOCK, index); }
00507   int GetFaceBlockArrayStatus(const char* name)
00508     { return this->GetObjectStatus(FACE_BLOCK, name); }
00509   void SetFaceBlockArrayStatus(const char* name, int flag)
00510     { this->SetObjectStatus(FACE_BLOCK, name, flag); }
00511  
00512   int GetNumberOfElementBlockArrays()
00513     { return this->GetNumberOfObjects(ELEM_BLOCK); }
00514   const char* GetElementBlockArrayName(int index)
00515     { return this->GetObjectName(ELEM_BLOCK, index); }
00516   int GetElementBlockArrayStatus(const char* name)
00517     { return this->GetObjectStatus(ELEM_BLOCK, name); }
00518   void SetElementBlockArrayStatus(const char* name, int flag)
00519     { this->SetObjectStatus(ELEM_BLOCK, name, flag); }
00520 
00521   int GetNumberOfGlobalResultArrays()
00522     { return this->GetNumberOfObjectArrays(GLOBAL); }
00523   const char* GetGlobalResultArrayName(int index)
00524     { return this->GetObjectArrayName(GLOBAL, index); }
00525   int GetGlobalResultArrayStatus(const char* name)
00526     { return this->GetObjectArrayStatus(GLOBAL, name); }
00527   void SetGlobalResultArrayStatus(const char* name, int flag)
00528     { this->SetObjectArrayStatus(GLOBAL, name, flag); }
00529   
00530   int GetNumberOfPointResultArrays()
00531     { return this->GetNumberOfObjectArrays(NODAL); }
00532   const char* GetPointResultArrayName(int index)
00533     { return this->GetObjectArrayName(NODAL, index); }
00534   int GetPointResultArrayStatus(const char* name)
00535     { return this->GetObjectArrayStatus(NODAL, name); }
00536   void SetPointResultArrayStatus(const char* name, int flag)
00537     { this->SetObjectArrayStatus(NODAL, name, flag); }
00538   
00539   int GetNumberOfEdgeResultArrays()
00540     { return this->GetNumberOfObjectArrays(EDGE_BLOCK); }
00541   const char* GetEdgeResultArrayName(int index)
00542     { return this->GetObjectArrayName(EDGE_BLOCK, index); }
00543   int GetEdgeResultArrayStatus(const char* name)
00544     { return this->GetObjectArrayStatus(EDGE_BLOCK, name); }
00545   void SetEdgeResultArrayStatus(const char* name, int flag)
00546     { this->SetObjectArrayStatus(EDGE_BLOCK, name, flag); }
00547 
00548   int GetNumberOfFaceResultArrays()
00549     { return this->GetNumberOfObjectArrays(FACE_BLOCK); }
00550   const char* GetFaceResultArrayName(int index)
00551     { return this->GetObjectArrayName(FACE_BLOCK, index); }
00552   int GetFaceResultArrayStatus(const char* name)
00553     { return this->GetObjectArrayStatus(FACE_BLOCK, name); }
00554   void SetFaceResultArrayStatus(const char* name, int flag)
00555     { this->SetObjectArrayStatus(FACE_BLOCK, name, flag); }
00556 
00557   int GetNumberOfElementResultArrays()
00558     { return this->GetNumberOfObjectArrays(ELEM_BLOCK); }
00559   const char* GetElementResultArrayName(int index)
00560     { return this->GetObjectArrayName(ELEM_BLOCK, index); }
00561   int GetElementResultArrayStatus(const char* name)
00562     { return this->GetObjectArrayStatus(ELEM_BLOCK, name); }
00563   void SetElementResultArrayStatus(const char* name, int flag)
00564     { this->SetObjectArrayStatus(ELEM_BLOCK, name, flag); }
00565   
00566   
00567   int GetNumberOfNodeMapArrays()
00568     { return this->GetNumberOfObjects(NODE_MAP); }
00569   const char* GetNodeMapArrayName(int index)
00570     { return this->GetObjectName(NODE_MAP, index); }
00571   int GetNodeMapArrayStatus(const char* name)
00572     { return this->GetObjectStatus(NODE_MAP, name); }
00573   void SetNodeMapArrayStatus(const char* name, int flag)
00574     { this->SetObjectStatus(NODE_MAP, name, flag); }
00575   
00576   int GetNumberOfEdgeMapArrays()
00577     { return this->GetNumberOfObjects(EDGE_MAP); }
00578   const char* GetEdgeMapArrayName(int index)
00579     { return this->GetObjectName(EDGE_MAP, index); }
00580   int GetEdgeMapArrayStatus(const char* name)
00581     { return this->GetObjectStatus(EDGE_MAP, name); }
00582   void SetEdgeMapArrayStatus(const char* name, int flag)
00583     { this->SetObjectStatus(EDGE_MAP, name, flag); }
00584 
00585   int GetNumberOfFaceMapArrays()
00586     { return this->GetNumberOfObjects(FACE_MAP); }
00587   const char* GetFaceMapArrayName(int index)
00588     { return this->GetObjectName(FACE_MAP, index); }
00589   int GetFaceMapArrayStatus(const char* name)
00590     { return this->GetObjectStatus(FACE_MAP, name); }
00591   void SetFaceMapArrayStatus(const char* name, int flag)
00592     { this->SetObjectStatus(FACE_MAP, name, flag); }
00593 
00594   int GetNumberOfElementMapArrays()
00595     { return this->GetNumberOfObjects(ELEM_MAP); }
00596   const char* GetElementMapArrayName(int index)
00597     { return this->GetObjectName(ELEM_MAP, index); }
00598   int GetElementMapArrayStatus(const char* name)
00599     { return this->GetObjectStatus(ELEM_MAP, name); }
00600   void SetElementMapArrayStatus(const char* name, int flag)
00601     { this->SetObjectStatus(ELEM_MAP, name, flag); }
00602   
00603   int GetNumberOfNodeSetArrays()
00604     { return this->GetNumberOfObjects(NODE_SET); }
00605   const char* GetNodeSetArrayName(int index)
00606     { return this->GetObjectName(NODE_SET, index); }
00607   int GetNodeSetArrayStatus(const char* name)
00608     { return this->GetObjectStatus(NODE_SET, name); }
00609   void SetNodeSetArrayStatus(const char* name, int flag)
00610     { this->SetObjectStatus(NODE_SET, name, flag); }
00611   
00612   int GetNumberOfSideSetArrays()
00613     { return this->GetNumberOfObjects(SIDE_SET); }
00614   const char* GetSideSetArrayName(int index)
00615     { return this->GetObjectName(SIDE_SET, index); }
00616   int GetSideSetArrayStatus(const char* name)
00617     { return this->GetObjectStatus(SIDE_SET, name); }
00618   void SetSideSetArrayStatus(const char* name, int flag)
00619     { this->SetObjectStatus(SIDE_SET, name, flag); }
00620   
00621   int GetNumberOfEdgeSetArrays()
00622     { return this->GetNumberOfObjects(EDGE_SET); }
00623   const char* GetEdgeSetArrayName(int index)
00624     { return this->GetObjectName(EDGE_SET, index); }
00625   int GetEdgeSetArrayStatus(const char* name)
00626     { return this->GetObjectStatus(EDGE_SET, name); }
00627   void SetEdgeSetArrayStatus(const char* name, int flag)
00628     { this->SetObjectStatus(EDGE_SET, name, flag); }
00629 
00630   int GetNumberOfFaceSetArrays()
00631     { return this->GetNumberOfObjects(FACE_SET); }
00632   const char* GetFaceSetArrayName(int index)
00633     { return this->GetObjectName(FACE_SET, index); }
00634   int GetFaceSetArrayStatus(const char* name)
00635     { return this->GetObjectStatus(FACE_SET, name); }
00636   void SetFaceSetArrayStatus(const char* name, int flag)
00637     { this->SetObjectStatus(FACE_SET, name, flag); }
00638   
00639   int GetNumberOfElementSetArrays()
00640     { return this->GetNumberOfObjects(ELEM_SET); }
00641   const char* GetElementSetArrayName(int index)
00642     { return this->GetObjectName(ELEM_SET, index); }
00643   int GetElementSetArrayStatus(const char* name)
00644     { return this->GetObjectStatus(ELEM_SET, name); }
00645   void SetElementSetArrayStatus(const char* name, int flag)
00646     { this->SetObjectStatus(ELEM_SET, name, flag); }
00647   
00648   
00649   int GetNumberOfNodeSetResultArrays()
00650     { return this->GetNumberOfObjectArrays(NODE_SET); }
00651   const char* GetNodeSetResultArrayName(int index)
00652     { return this->GetObjectArrayName(NODE_SET, index); }
00653   int GetNodeSetResultArrayStatus(const char* name)
00654     { return this->GetObjectArrayStatus(NODE_SET, name); }
00655   void SetNodeSetResultArrayStatus(const char* name, int flag)
00656     { this->SetObjectArrayStatus(NODE_SET, name, flag); }
00657   
00658   int GetNumberOfSideSetResultArrays()
00659     { return this->GetNumberOfObjectArrays(SIDE_SET); }
00660   const char* GetSideSetResultArrayName(int index)
00661     { return this->GetObjectArrayName(SIDE_SET, index); }
00662   int GetSideSetResultArrayStatus(const char* name)
00663     { return this->GetObjectArrayStatus(SIDE_SET, name); }
00664   void SetSideSetResultArrayStatus(const char* name, int flag)
00665     { this->SetObjectArrayStatus(SIDE_SET, name, flag); }
00666   
00667   int GetNumberOfEdgeSetResultArrays()
00668     { return this->GetNumberOfObjectArrays(EDGE_SET); }
00669   const char* GetEdgeSetResultArrayName(int index)
00670     { return this->GetObjectArrayName(EDGE_SET, index); }
00671   int GetEdgeSetResultArrayStatus(const char* name)
00672     { return this->GetObjectArrayStatus(EDGE_SET, name); }
00673   void SetEdgeSetResultArrayStatus(const char* name, int flag)
00674     { this->SetObjectArrayStatus(EDGE_SET, name, flag); }
00675 
00676   int GetNumberOfFaceSetResultArrays()
00677     { return this->GetNumberOfObjectArrays(FACE_SET); }
00678   const char* GetFaceSetResultArrayName(int index)
00679     { return this->GetObjectArrayName(FACE_SET, index); }
00680   int GetFaceSetResultArrayStatus(const char* name)
00681     { return this->GetObjectArrayStatus(FACE_SET, name); }
00682   void SetFaceSetResultArrayStatus(const char* name, int flag)
00683     { this->SetObjectArrayStatus(FACE_SET, name, flag); }
00684   
00685   int GetNumberOfElementSetResultArrays()
00686     { return this->GetNumberOfObjectArrays(ELEM_SET); }
00687   const char* GetElementSetResultArrayName(int index)
00688     { return this->GetObjectArrayName(ELEM_SET, index); }
00689   int GetElementSetResultArrayStatus(const char* name)
00690     { return this->GetObjectArrayStatus(ELEM_SET, name); }
00691   void SetElementSetResultArrayStatus(const char* name, int flag)
00692     { this->SetObjectArrayStatus(ELEM_SET, name, flag); }
00693 
00706 
00707 
00710   void SetFastPathObjectType(const char *type);
00711   // Description:
00712   // Possible argument values: "INDEX","GLOBAL"
00713   // "GLOBAL" means the id refers to a global id
00714   // "INDEX" means the id refers to an index into the VTK array
00715   void SetFastPathIdType(const char *type);
00716   void SetFastPathObjectId(vtkIdType id);
00718 
00719 
00724   void Reset();
00725 
00731   void ResetSettings();
00732 
00734   void ResetCache();
00735 
00738   virtual void UpdateTimeInformation();
00739 
00740   virtual void Dump();
00741 
00744   vtkGraph* GetSIL();
00745 
00747 
00748   vtkGetMacro(SILUpdateStamp, int);
00750 
00752 
00754   vtkGetMacro(ProducedFastPathOutput, bool);
00756 
00757 protected:
00758   vtkExodusIIReader();
00759   ~vtkExodusIIReader();
00760 
00763   virtual void NewExodusModel();
00764 
00765   // helper for finding IDs
00766   static int GetIDHelper ( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00767   static int GetGlobalID( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00768 
00769   virtual void SetMetadata( vtkExodusIIReaderPrivate* );
00770   vtkGetObjectMacro(Metadata,vtkExodusIIReaderPrivate);
00771 
00777   bool FindXMLFile();
00778 
00779   // Time query function. Called by ExecuteInformation().
00780   // Fills the TimestepValues array.
00781   void GetAllTimes(vtkInformationVector*); 
00782 
00784   void AdvertiseTimeSteps( vtkInformation* outputInfo );
00785 
00786   virtual void SetExodusModel( vtkExodusModel* em );
00787 
00788   int ProcessRequest( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00789   int RequestInformation( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00790   int RequestData( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00791   //int RequestDataOverTime( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00792 
00793   // Parameters for controlling what is read in.
00794   char* FileName;
00795   char* XMLFileName;
00796   int TimeStep;
00797   int TimeStepRange[2];
00798   vtkTimeStamp FileNameMTime;
00799   vtkTimeStamp XMLFileNameMTime;
00800   
00801   // Information specific for exodus files.
00802 
00803   //1=display Block names
00804   //2=display Part names
00805   //3=display Material names
00806   int DisplayType;
00807  
00808   // Metadata containing a description of the currently open file.
00809   vtkExodusIIReaderPrivate* Metadata;
00810 
00811   vtkExodusModel *ExodusModel;
00812   int PackExodusModelOntoOutput;
00813   int ExodusModelMetadata;
00814 
00815   int SILUpdateStamp;
00816   bool ProducedFastPathOutput;
00817 private:
00818   vtkExodusIIReader(const vtkExodusIIReader&); // Not implemented
00819   void operator=(const vtkExodusIIReader&); // Not implemented
00820 
00821   void AddDisplacements(vtkUnstructuredGrid* output);
00822 };
00823 
00824 #endif