VTK
dox/IO/Exodus/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 "vtkIOExodusModule.h" // For export macro
00043 #include "vtkMultiBlockDataSetAlgorithm.h"
00044 
00045 class vtkDataArray;
00046 class vtkDataSet;
00047 class vtkExodusIICache;
00048 class vtkExodusIIReaderPrivate;
00049 class vtkExodusModel;
00050 class vtkFloatArray;
00051 class vtkGraph;
00052 class vtkIntArray;
00053 class vtkPoints;
00054 class vtkUnstructuredGrid;
00055 
00056 class VTKIOEXODUS_EXPORT vtkExodusIIReader : public vtkMultiBlockDataSetAlgorithm
00057 {
00058 public:
00059   static vtkExodusIIReader *New();
00060   vtkTypeMacro(vtkExodusIIReader,vtkMultiBlockDataSetAlgorithm);
00061   void PrintSelf(ostream& os, vtkIndent indent);
00062 
00064   int CanReadFile(const char* fname);
00065 
00066   //virtual void Modified();
00067 
00070   virtual unsigned long GetMTime();
00071 
00075   virtual unsigned long GetMetadataMTime();
00076 
00078 
00079   virtual void SetFileName( const char* fname );
00080   vtkGetStringMacro(FileName);
00082 
00084 
00085   virtual void SetXMLFileName( const char* fname );
00086   vtkGetStringMacro(XMLFileName);
00088 
00090 
00091   vtkSetMacro(TimeStep, int);
00092   vtkGetMacro(TimeStep, int);
00094 
00096 
00098   void SetModeShape(int val)
00099     {
00100     this->SetTimeStep(val-1);
00101     }
00103 
00105 
00106   vtkGetVector2Macro(TimeStepRange,int);
00107   vtkSetVector2Macro(TimeStepRange,int);
00109 
00111 
00120   virtual void SetGenerateObjectIdCellArray( int g );
00121   int GetGenerateObjectIdCellArray();
00122   vtkBooleanMacro(GenerateObjectIdCellArray, int);
00123   static const char *GetObjectIdArrayName() { return "ObjectId"; }
00125 
00126   virtual void SetGenerateGlobalElementIdArray( int g );
00127   int GetGenerateGlobalElementIdArray();
00128   vtkBooleanMacro(GenerateGlobalElementIdArray, int);
00129 
00130   virtual void SetGenerateGlobalNodeIdArray( int g );
00131   int GetGenerateGlobalNodeIdArray();
00132   vtkBooleanMacro(GenerateGlobalNodeIdArray, int);
00133 
00134   virtual void SetGenerateImplicitElementIdArray( int g );
00135   int GetGenerateImplicitElementIdArray();
00136   vtkBooleanMacro(GenerateImplicitElementIdArray, int);
00137 
00138   virtual void SetGenerateImplicitNodeIdArray( int g );
00139   int GetGenerateImplicitNodeIdArray();
00140   vtkBooleanMacro(GenerateImplicitNodeIdArray, int);
00141 
00142   virtual void SetGenerateFileIdArray( int f );
00143   int GetGenerateFileIdArray();
00144   vtkBooleanMacro(GenerateFileIdArray, int);
00145   virtual void SetFileId( int f );
00146   int GetFileId();
00147 
00148 //BTX
00150 
00155   enum {
00156     SEARCH_TYPE_ELEMENT=0,
00157     SEARCH_TYPE_NODE,
00158     SEARCH_TYPE_ELEMENT_THEN_NODE,
00159     SEARCH_TYPE_NODE_THEN_ELEMENT,
00160     ID_NOT_FOUND=-234121312
00161   };
00162   // NOTE: GetNumberOfObjectTypes must be updated whenever you add an entry to enum ObjectType {...}
00163   enum ObjectType {
00164     // match Exodus macros from exodusII.h and exodusII_ext.h
00165     EDGE_BLOCK = 6,
00166     FACE_BLOCK = 8,
00167     ELEM_BLOCK = 1,
00168     NODE_SET = 2,
00169     EDGE_SET = 7,
00170     FACE_SET = 9,
00171     SIDE_SET = 3,
00172     ELEM_SET = 10,
00173     NODE_MAP = 5,
00174     EDGE_MAP = 11,
00175     FACE_MAP = 12,
00176     ELEM_MAP = 4,
00177     GLOBAL = 13,
00178     NODAL = 14,
00179     // extended values (not in Exodus headers) for use with SetAllArrayStatus:
00180     ASSEMBLY = 60,
00181     PART = 61,
00182     MATERIAL = 62,
00183     HIERARCHY = 63,
00184     // extended values (not in Exodus headers) for use in cache keys:
00185     QA_RECORDS = 103,          
00186     INFO_RECORDS = 104,        
00187     GLOBAL_TEMPORAL = 102,  
00188     NODAL_TEMPORAL = 101,      
00189     ELEM_BLOCK_TEMPORAL = 100,  
00190     GLOBAL_CONN = 99,          
00191     ELEM_BLOCK_ELEM_CONN = 98, 
00192     ELEM_BLOCK_FACE_CONN = 97, 
00193     ELEM_BLOCK_EDGE_CONN = 96, 
00194     FACE_BLOCK_CONN = 95,      
00195     EDGE_BLOCK_CONN = 94,      
00196     ELEM_SET_CONN = 93,        
00197     SIDE_SET_CONN = 92,        
00198     FACE_SET_CONN = 91,        
00199     EDGE_SET_CONN = 90,        
00200     NODE_SET_CONN = 89,        
00201     NODAL_COORDS = 88,         
00202     OBJECT_ID = 87,            
00203     IMPLICIT_ELEMENT_ID = 108, 
00204     IMPLICIT_NODE_ID = 107,    
00205     GLOBAL_ELEMENT_ID = 86,    
00206     GLOBAL_NODE_ID = 85,       
00207     ELEMENT_ID = 84,           
00208     NODE_ID = 83,              
00209     NODAL_SQUEEZEMAP = 82,     
00210     ELEM_BLOCK_ATTRIB = 81,    
00211     FACE_BLOCK_ATTRIB = 80,    
00212     EDGE_BLOCK_ATTRIB = 79,    
00213     FACE_ID = 105,             
00214     EDGE_ID = 106,             
00215     ENTITY_COUNTS = 109        
00216   };
00217 //ETX
00218   static const char* GetGlobalElementIdArrayName() { return "GlobalElementId"; }
00219   static const char* GetPedigreeElementIdArrayName() { return "PedigreeElementId"; }
00220   static int GetGlobalElementID( vtkDataSet *data, int localID );
00221   static int GetGlobalElementID ( vtkDataSet *data, int localID,
00222       int searchType );
00223   static const char* GetImplicitElementIdArrayName() { return "ImplicitElementId"; }
00225 
00226   static const char* GetGlobalFaceIdArrayName() { return "GlobalFaceId"; }
00227   static const char* GetPedigreeFaceIdArrayName() { return "PedigreeFaceId"; }
00228   static int GetGlobalFaceID( vtkDataSet *data, int localID );
00229   static int GetGlobalFaceID ( vtkDataSet *data, int localID,
00230       int searchType );
00231   static const char* GetImplicitFaceIdArrayName() { return "ImplicitFaceId"; }
00232 
00233   static const char* GetGlobalEdgeIdArrayName() { return "GlobalEdgeId"; }
00234   static const char* GetPedigreeEdgeIdArrayName() { return "PedigreeEdgeId"; }
00235   static int GetGlobalEdgeID( vtkDataSet *data, int localID );
00236   static int GetGlobalEdgeID ( vtkDataSet *data, int localID,
00237       int searchType );
00238   static const char* GetImplicitEdgeIdArrayName() { return "ImplicitEdgeId"; }
00239 
00241 
00245   static const char* GetGlobalNodeIdArrayName() { return "GlobalNodeId"; }
00246   static const char* GetPedigreeNodeIdArrayName() { return "PedigreeNodeId"; }
00247   static int GetGlobalNodeID( vtkDataSet *data, int localID );
00248   static int GetGlobalNodeID( vtkDataSet *data, int localID,
00249       int searchType );
00250   static const char* GetImplicitNodeIdArrayName() { return "ImplicitNodeId"; }
00252 
00255   static const char* GetSideSetSourceElementIdArrayName() { return "SourceElementId"; }
00256 
00259   static const char* GetSideSetSourceElementSideArrayName() { return "SourceElementSide"; }
00261 
00265   virtual void SetApplyDisplacements( int d );
00266   int GetApplyDisplacements();
00267   vtkBooleanMacro(ApplyDisplacements, int);
00268   virtual void SetDisplacementMagnitude( float s );
00269   float GetDisplacementMagnitude();
00271 
00273 
00276   virtual void SetHasModeShapes( int ms );
00277   int GetHasModeShapes();
00278   vtkBooleanMacro(HasModeShapes,int);
00280 
00282 
00288   virtual void SetModeShapeTime( double phase );
00289   double GetModeShapeTime();
00291 
00293 
00298   virtual void SetAnimateModeShapes(int flag);
00299   int GetAnimateModeShapes();
00300   vtkBooleanMacro(AnimateModeShapes, int);
00302 
00304 
00305   const char* GetTitle();
00306   int GetDimensionality();
00307   int GetNumberOfTimeSteps();
00309 
00310   int GetNumberOfNodesInFile();
00311   int GetNumberOfEdgesInFile();
00312   int GetNumberOfFacesInFile();
00313   int GetNumberOfElementsInFile();
00314 
00315   int GetObjectTypeFromName( const char* name );
00316   const char* GetObjectTypeName( int );
00317 
00318   int GetNumberOfNodes();
00319   int GetNumberOfObjects( int objectType );
00320   int GetNumberOfEntriesInObject( int objectType, int objectIndex );
00321   int GetObjectId( int objectType, int objectIndex );
00322   const char* GetObjectName( int objectType, int objectIndex );
00323   int GetObjectIndex( int objectType, const char* objectName );
00324   int GetObjectIndex( int objectType, int id );
00325   int GetObjectStatus( int objectType, int objectIndex );
00326   int GetObjectStatus( int objectType, const char* objectName )
00327     { return this->GetObjectStatus( objectType, this->GetObjectIndex( objectType, objectName ) ); }
00328   void SetObjectStatus( int objectType, int objectIndex, int status );
00329   void SetObjectStatus( int objectType, const char* objectName, int status );
00330 
00332 
00337   int GetNumberOfObjectArrays( int objectType );
00338   const char* GetObjectArrayName( int objectType, int arrayIndex );
00339   int GetObjectArrayIndex( int objectType, const char* arrayName );
00340   int GetNumberOfObjectArrayComponents( int objectType, int arrayIndex );
00341   int GetObjectArrayStatus( int objectType, int arrayIndex );
00342   int GetObjectArrayStatus( int objectType, const char* arrayName )
00343     { return this->GetObjectArrayStatus( objectType, this->GetObjectArrayIndex( objectType, arrayName ) ); }
00344   void SetObjectArrayStatus( int objectType, int arrayIndex, int status );
00345   void SetObjectArrayStatus( int objectType, const char* arrayName, int status );
00347 
00349 
00354   int GetNumberOfObjectAttributes( int objectType, int objectIndex );
00355   const char* GetObjectAttributeName( int objectType, int objectIndex, int attribIndex );
00356   int GetObjectAttributeIndex( int objectType, int objectIndex, const char* attribName );
00357   int GetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex );
00358   int GetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName )
00359     { return this->GetObjectAttributeStatus( objectType, objectIndex,
00360       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ) ); }
00361   void SetObjectAttributeStatus( int objectType, int objectIndex, int attribIndex, int status );
00362   void SetObjectAttributeStatus( int objectType, int objectIndex, const char* attribName, int status )
00363     { this->SetObjectAttributeStatus( objectType, objectIndex,
00364       this->GetObjectAttributeIndex( objectType, objectIndex, attribName ), status ); }
00366 
00367   virtual vtkIdType GetTotalNumberOfNodes();
00368   virtual vtkIdType GetTotalNumberOfEdges();
00369   virtual vtkIdType GetTotalNumberOfFaces();
00370   virtual vtkIdType GetTotalNumberOfElements();
00371 
00373 
00377   int GetNumberOfPartArrays();
00378   const char* GetPartArrayName(int arrayIdx);
00379   int GetPartArrayID( const char *name );
00380   const char* GetPartBlockInfo(int arrayIdx);
00381   void SetPartArrayStatus(int index, int flag);
00382   void SetPartArrayStatus(const char*, int flag);
00383   int GetPartArrayStatus(int index);
00384   int GetPartArrayStatus(const char*);
00386 
00387 
00389 
00393   int GetNumberOfMaterialArrays();
00394   const char* GetMaterialArrayName(int arrayIdx);
00395   int GetMaterialArrayID( const char *name );
00396   void SetMaterialArrayStatus(int index, int flag);
00397   void SetMaterialArrayStatus(const char*, int flag);
00398   int GetMaterialArrayStatus(int index);
00399   int GetMaterialArrayStatus(const char*);
00401 
00403 
00407   int GetNumberOfAssemblyArrays();
00408   const char* GetAssemblyArrayName(int arrayIdx);
00409   int GetAssemblyArrayID( const char *name );
00410   void SetAssemblyArrayStatus(int index, int flag);
00411   void SetAssemblyArrayStatus(const char*, int flag);
00412   int GetAssemblyArrayStatus(int index);
00413   int GetAssemblyArrayStatus(const char*);
00415 
00417 
00424   int GetNumberOfHierarchyArrays();
00425   const char* GetHierarchyArrayName(int arrayIdx);
00426   void SetHierarchyArrayStatus(int index, int flag);
00427   void SetHierarchyArrayStatus(const char*, int flag);
00428   int GetHierarchyArrayStatus(int index);
00429   int GetHierarchyArrayStatus(const char*);
00431 
00432   vtkGetMacro(DisplayType,int);
00433   virtual void SetDisplayType(int type);
00434 
00440   vtkBooleanMacro(ExodusModelMetadata, int);
00441   vtkSetMacro(ExodusModelMetadata, int);
00442   vtkGetMacro(ExodusModelMetadata, int);
00443 
00445 
00446   vtkGetObjectMacro(ExodusModel,vtkExodusModel);
00448 
00456   vtkSetMacro(PackExodusModelOntoOutput, int);
00457   vtkGetMacro(PackExodusModelOntoOutput, int);
00458   vtkBooleanMacro(PackExodusModelOntoOutput, int);
00459 
00461   int IsValidVariable( const char *type, const char *name );
00462 
00464   int GetVariableID ( const char *type, const char *name );
00465 
00466   void SetAllArrayStatus( int otype, int status );
00467   // Helper functions
00468   //static int StringsEqual(const char* s1, char* s2);
00469   //static void StringUppercase(const char* str, char* upperstr);
00470   //static char *StrDupWithNew(const char *s);
00471 
00472   // time series query functions
00473   int GetTimeSeriesData( int ID, const char *vName, const char *vType,
00474                          vtkFloatArray *result );
00475 
00476 
00477 
00478   int GetNumberOfEdgeBlockArrays()
00479     { return this->GetNumberOfObjects(EDGE_BLOCK); }
00480   const char* GetEdgeBlockArrayName(int index)
00481     { return this->GetObjectName(EDGE_BLOCK, index); }
00482   int GetEdgeBlockArrayStatus(const char* name)
00483     { return this->GetObjectStatus(EDGE_BLOCK, name); }
00484   void SetEdgeBlockArrayStatus(const char* name, int flag)
00485     { this->SetObjectStatus(EDGE_BLOCK, name, flag); }
00486 
00487   int GetNumberOfFaceBlockArrays()
00488     { return this->GetNumberOfObjects(FACE_BLOCK); }
00489   const char* GetFaceBlockArrayName(int index)
00490     { return this->GetObjectName(FACE_BLOCK, index); }
00491   int GetFaceBlockArrayStatus(const char* name)
00492     { return this->GetObjectStatus(FACE_BLOCK, name); }
00493   void SetFaceBlockArrayStatus(const char* name, int flag)
00494     { this->SetObjectStatus(FACE_BLOCK, name, flag); }
00495 
00496   int GetNumberOfElementBlockArrays()
00497     { return this->GetNumberOfObjects(ELEM_BLOCK); }
00498   const char* GetElementBlockArrayName(int index)
00499     { return this->GetObjectName(ELEM_BLOCK, index); }
00500   int GetElementBlockArrayStatus(const char* name)
00501     { return this->GetObjectStatus(ELEM_BLOCK, name); }
00502   void SetElementBlockArrayStatus(const char* name, int flag)
00503     { this->SetObjectStatus(ELEM_BLOCK, name, flag); }
00504 
00505   int GetNumberOfGlobalResultArrays()
00506     { return this->GetNumberOfObjectArrays(GLOBAL); }
00507   const char* GetGlobalResultArrayName(int index)
00508     { return this->GetObjectArrayName(GLOBAL, index); }
00509   int GetGlobalResultArrayStatus(const char* name)
00510     { return this->GetObjectArrayStatus(GLOBAL, name); }
00511   void SetGlobalResultArrayStatus(const char* name, int flag)
00512     { this->SetObjectArrayStatus(GLOBAL, name, flag); }
00513 
00514   int GetNumberOfPointResultArrays()
00515     { return this->GetNumberOfObjectArrays(NODAL); }
00516   const char* GetPointResultArrayName(int index)
00517     { return this->GetObjectArrayName(NODAL, index); }
00518   int GetPointResultArrayStatus(const char* name)
00519     { return this->GetObjectArrayStatus(NODAL, name); }
00520   void SetPointResultArrayStatus(const char* name, int flag)
00521     { this->SetObjectArrayStatus(NODAL, name, flag); }
00522 
00523   int GetNumberOfEdgeResultArrays()
00524     { return this->GetNumberOfObjectArrays(EDGE_BLOCK); }
00525   const char* GetEdgeResultArrayName(int index)
00526     { return this->GetObjectArrayName(EDGE_BLOCK, index); }
00527   int GetEdgeResultArrayStatus(const char* name)
00528     { return this->GetObjectArrayStatus(EDGE_BLOCK, name); }
00529   void SetEdgeResultArrayStatus(const char* name, int flag)
00530     { this->SetObjectArrayStatus(EDGE_BLOCK, name, flag); }
00531 
00532   int GetNumberOfFaceResultArrays()
00533     { return this->GetNumberOfObjectArrays(FACE_BLOCK); }
00534   const char* GetFaceResultArrayName(int index)
00535     { return this->GetObjectArrayName(FACE_BLOCK, index); }
00536   int GetFaceResultArrayStatus(const char* name)
00537     { return this->GetObjectArrayStatus(FACE_BLOCK, name); }
00538   void SetFaceResultArrayStatus(const char* name, int flag)
00539     { this->SetObjectArrayStatus(FACE_BLOCK, name, flag); }
00540 
00541   int GetNumberOfElementResultArrays()
00542     { return this->GetNumberOfObjectArrays(ELEM_BLOCK); }
00543   const char* GetElementResultArrayName(int index)
00544     { return this->GetObjectArrayName(ELEM_BLOCK, index); }
00545   int GetElementResultArrayStatus(const char* name)
00546     { return this->GetObjectArrayStatus(ELEM_BLOCK, name); }
00547   void SetElementResultArrayStatus(const char* name, int flag)
00548     { this->SetObjectArrayStatus(ELEM_BLOCK, name, flag); }
00549 
00550 
00551   int GetNumberOfNodeMapArrays()
00552     { return this->GetNumberOfObjects(NODE_MAP); }
00553   const char* GetNodeMapArrayName(int index)
00554     { return this->GetObjectName(NODE_MAP, index); }
00555   int GetNodeMapArrayStatus(const char* name)
00556     { return this->GetObjectStatus(NODE_MAP, name); }
00557   void SetNodeMapArrayStatus(const char* name, int flag)
00558     { this->SetObjectStatus(NODE_MAP, name, flag); }
00559 
00560   int GetNumberOfEdgeMapArrays()
00561     { return this->GetNumberOfObjects(EDGE_MAP); }
00562   const char* GetEdgeMapArrayName(int index)
00563     { return this->GetObjectName(EDGE_MAP, index); }
00564   int GetEdgeMapArrayStatus(const char* name)
00565     { return this->GetObjectStatus(EDGE_MAP, name); }
00566   void SetEdgeMapArrayStatus(const char* name, int flag)
00567     { this->SetObjectStatus(EDGE_MAP, name, flag); }
00568 
00569   int GetNumberOfFaceMapArrays()
00570     { return this->GetNumberOfObjects(FACE_MAP); }
00571   const char* GetFaceMapArrayName(int index)
00572     { return this->GetObjectName(FACE_MAP, index); }
00573   int GetFaceMapArrayStatus(const char* name)
00574     { return this->GetObjectStatus(FACE_MAP, name); }
00575   void SetFaceMapArrayStatus(const char* name, int flag)
00576     { this->SetObjectStatus(FACE_MAP, name, flag); }
00577 
00578   int GetNumberOfElementMapArrays()
00579     { return this->GetNumberOfObjects(ELEM_MAP); }
00580   const char* GetElementMapArrayName(int index)
00581     { return this->GetObjectName(ELEM_MAP, index); }
00582   int GetElementMapArrayStatus(const char* name)
00583     { return this->GetObjectStatus(ELEM_MAP, name); }
00584   void SetElementMapArrayStatus(const char* name, int flag)
00585     { this->SetObjectStatus(ELEM_MAP, name, flag); }
00586 
00587   int GetNumberOfNodeSetArrays()
00588     { return this->GetNumberOfObjects(NODE_SET); }
00589   const char* GetNodeSetArrayName(int index)
00590     { return this->GetObjectName(NODE_SET, index); }
00591   int GetNodeSetArrayStatus(const char* name)
00592     { return this->GetObjectStatus(NODE_SET, name); }
00593   void SetNodeSetArrayStatus(const char* name, int flag)
00594     { this->SetObjectStatus(NODE_SET, name, flag); }
00595 
00596   int GetNumberOfSideSetArrays()
00597     { return this->GetNumberOfObjects(SIDE_SET); }
00598   const char* GetSideSetArrayName(int index)
00599     { return this->GetObjectName(SIDE_SET, index); }
00600   int GetSideSetArrayStatus(const char* name)
00601     { return this->GetObjectStatus(SIDE_SET, name); }
00602   void SetSideSetArrayStatus(const char* name, int flag)
00603     { this->SetObjectStatus(SIDE_SET, name, flag); }
00604 
00605   int GetNumberOfEdgeSetArrays()
00606     { return this->GetNumberOfObjects(EDGE_SET); }
00607   const char* GetEdgeSetArrayName(int index)
00608     { return this->GetObjectName(EDGE_SET, index); }
00609   int GetEdgeSetArrayStatus(const char* name)
00610     { return this->GetObjectStatus(EDGE_SET, name); }
00611   void SetEdgeSetArrayStatus(const char* name, int flag)
00612     { this->SetObjectStatus(EDGE_SET, name, flag); }
00613 
00614   int GetNumberOfFaceSetArrays()
00615     { return this->GetNumberOfObjects(FACE_SET); }
00616   const char* GetFaceSetArrayName(int index)
00617     { return this->GetObjectName(FACE_SET, index); }
00618   int GetFaceSetArrayStatus(const char* name)
00619     { return this->GetObjectStatus(FACE_SET, name); }
00620   void SetFaceSetArrayStatus(const char* name, int flag)
00621     { this->SetObjectStatus(FACE_SET, name, flag); }
00622 
00623   int GetNumberOfElementSetArrays()
00624     { return this->GetNumberOfObjects(ELEM_SET); }
00625   const char* GetElementSetArrayName(int index)
00626     { return this->GetObjectName(ELEM_SET, index); }
00627   int GetElementSetArrayStatus(const char* name)
00628     { return this->GetObjectStatus(ELEM_SET, name); }
00629   void SetElementSetArrayStatus(const char* name, int flag)
00630     { this->SetObjectStatus(ELEM_SET, name, flag); }
00631 
00632 
00633   int GetNumberOfNodeSetResultArrays()
00634     { return this->GetNumberOfObjectArrays(NODE_SET); }
00635   const char* GetNodeSetResultArrayName(int index)
00636     { return this->GetObjectArrayName(NODE_SET, index); }
00637   int GetNodeSetResultArrayStatus(const char* name)
00638     { return this->GetObjectArrayStatus(NODE_SET, name); }
00639   void SetNodeSetResultArrayStatus(const char* name, int flag)
00640     { this->SetObjectArrayStatus(NODE_SET, name, flag); }
00641 
00642   int GetNumberOfSideSetResultArrays()
00643     { return this->GetNumberOfObjectArrays(SIDE_SET); }
00644   const char* GetSideSetResultArrayName(int index)
00645     { return this->GetObjectArrayName(SIDE_SET, index); }
00646   int GetSideSetResultArrayStatus(const char* name)
00647     { return this->GetObjectArrayStatus(SIDE_SET, name); }
00648   void SetSideSetResultArrayStatus(const char* name, int flag)
00649     { this->SetObjectArrayStatus(SIDE_SET, name, flag); }
00650 
00651   int GetNumberOfEdgeSetResultArrays()
00652     { return this->GetNumberOfObjectArrays(EDGE_SET); }
00653   const char* GetEdgeSetResultArrayName(int index)
00654     { return this->GetObjectArrayName(EDGE_SET, index); }
00655   int GetEdgeSetResultArrayStatus(const char* name)
00656     { return this->GetObjectArrayStatus(EDGE_SET, name); }
00657   void SetEdgeSetResultArrayStatus(const char* name, int flag)
00658     { this->SetObjectArrayStatus(EDGE_SET, name, flag); }
00659 
00660   int GetNumberOfFaceSetResultArrays()
00661     { return this->GetNumberOfObjectArrays(FACE_SET); }
00662   const char* GetFaceSetResultArrayName(int index)
00663     { return this->GetObjectArrayName(FACE_SET, index); }
00664   int GetFaceSetResultArrayStatus(const char* name)
00665     { return this->GetObjectArrayStatus(FACE_SET, name); }
00666   void SetFaceSetResultArrayStatus(const char* name, int flag)
00667     { this->SetObjectArrayStatus(FACE_SET, name, flag); }
00668 
00669   int GetNumberOfElementSetResultArrays()
00670     { return this->GetNumberOfObjectArrays(ELEM_SET); }
00671   const char* GetElementSetResultArrayName(int index)
00672     { return this->GetObjectArrayName(ELEM_SET, index); }
00673   int GetElementSetResultArrayStatus(const char* name)
00674     { return this->GetObjectArrayStatus(ELEM_SET, name); }
00675   void SetElementSetResultArrayStatus(const char* name, int flag)
00676     { this->SetObjectArrayStatus(ELEM_SET, name, flag); }
00677 
00693   void SetFastPathObjectType(const char *type);
00695 
00698   void SetFastPathIdType(const char *type);
00699   void SetFastPathObjectId(vtkIdType id);
00701 
00702 
00707   void Reset();
00708 
00714   void ResetSettings();
00715 
00717   void ResetCache();
00718 
00720   void SetCacheSize(double CacheSize);
00721 
00723   double GetCacheSize();
00724 
00726 
00735   void SetSqueezePoints(bool sp);
00736   bool GetSqueezePoints();
00738 
00739 
00742   virtual void UpdateTimeInformation();
00743 
00744   virtual void Dump();
00745 
00748   vtkGraph* GetSIL();
00749 
00751 
00752   vtkGetMacro(SILUpdateStamp, int);
00754 
00756 
00758   vtkGetMacro(ProducedFastPathOutput, bool);
00760 
00761 protected:
00762   vtkExodusIIReader();
00763   ~vtkExodusIIReader();
00764 
00767   virtual void NewExodusModel();
00768 
00769   // helper for finding IDs
00770   static int GetIDHelper ( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00771   static int GetGlobalID( const char *arrayName, vtkDataSet *data, int localID, int searchType );
00772 
00773   virtual void SetMetadata( vtkExodusIIReaderPrivate* );
00774   vtkGetObjectMacro(Metadata,vtkExodusIIReaderPrivate);
00775 
00781   bool FindXMLFile();
00782 
00783   // Time query function. Called by ExecuteInformation().
00784   // Fills the TimestepValues array.
00785   void GetAllTimes(vtkInformationVector*);
00786 
00788   void AdvertiseTimeSteps( vtkInformation* outputInfo );
00789 
00790   virtual void SetExodusModel( vtkExodusModel* em );
00791 
00792   int ProcessRequest( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00793   int RequestInformation( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00794   int RequestData( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00795   //int RequestDataOverTime( vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00796 
00797   // Parameters for controlling what is read in.
00798   char* FileName;
00799   char* XMLFileName;
00800   int TimeStep;
00801   int TimeStepRange[2];
00802   vtkTimeStamp FileNameMTime;
00803   vtkTimeStamp XMLFileNameMTime;
00804 
00805   // Information specific for exodus files.
00806 
00807   //1=display Block names
00808   //2=display Part names
00809   //3=display Material names
00810   int DisplayType;
00811 
00812   // Metadata containing a description of the currently open file.
00813   vtkExodusIIReaderPrivate* Metadata;
00814 
00815   vtkExodusModel *ExodusModel;
00816   int PackExodusModelOntoOutput;
00817   int ExodusModelMetadata;
00818 
00819   int SILUpdateStamp;
00820   bool ProducedFastPathOutput;
00821 private:
00822   vtkExodusIIReader(const vtkExodusIIReader&); // Not implemented
00823   void operator=(const vtkExodusIIReader&); // Not implemented
00824 
00825   void AddDisplacements(vtkUnstructuredGrid* output);
00826 };
00827 
00828 #endif