00001 #ifndef __vtkExodusIIReaderPrivate_h
00002 #define __vtkExodusIIReaderPrivate_h
00003
00004
00005
00006
00007 #include "vtkToolkits.h"
00008 #include "vtkExodusIICache.h"
00009 #ifdef VTK_USE_PARALLEL
00010 # include "vtkMultiProcessController.h"
00011 #else // VTK_USE_PARALLEL
00012 class vtkMultiProcessController;
00013 #endif // VTK_USE_PARALLEL
00014
00015 #include "vtksys/RegularExpression.hxx"
00016
00017 #include <vtkstd/map>
00018 #include <vtkstd/vector>
00019
00020 #include "vtk_exodusII.h"
00021
00022 class vtkExodusIIReaderParser;
00023 class vtkMutableDirectedGraph;
00024
00028 class vtkExodusIIReaderPrivate : public vtkObject
00029 {
00030 public:
00031 static vtkExodusIIReaderPrivate* New();
00032 void PrintData( ostream& os, vtkIndent indent );
00033 vtkTypeMacro(vtkExodusIIReaderPrivate,vtkObject);
00034
00035
00037 int OpenFile( const char* filename );
00038
00040 int CloseFile();
00041
00043 int RequestInformation();
00044
00046 vtkMutableDirectedGraph* GetSIL()
00047 { return this->SIL; }
00048
00050 void Broadcast( vtkMultiProcessController* controller );
00051
00053 void Receive( vtkMultiProcessController* controller );
00054
00056 int RequestData( vtkIdType timeStep, vtkMultiBlockDataSet* output );
00057
00058
00059
00060
00061 int SetUpEmptyGrid( vtkMultiBlockDataSet* output );
00062
00074 void Reset();
00075
00080 void ResetSettings();
00081
00083 void ResetCache();
00084
00089 int GetNumberOfTimeSteps() { return (int) this->Times.size(); }
00090
00092 vtkGetMacro(TimeStep,int);
00093
00095 vtkSetMacro(TimeStep,int);
00096
00099 vtkGetMacro(SqueezePoints,int);
00100
00103 void SetSqueezePoints( int sp );
00104
00107 vtkBooleanMacro(SqueezePoints,int);
00108
00110 int GetNumberOfNodes();
00111
00116 int GetNumberOfObjectsOfType( int otype );
00117
00128 int GetNumberOfObjectArraysOfType( int otype );
00129
00134 const char* GetObjectName( int otype, int i );
00135
00140 int GetObjectId( int otype, int i );
00141
00148 int GetObjectSize( int otype, int i );
00149
00154 int GetObjectStatus( int otype, int i );
00155
00161 int GetUnsortedObjectStatus( int otype, int i );
00162
00167 void SetObjectStatus( int otype, int i, int stat );
00168
00174 void SetUnsortedObjectStatus( int otype, int i, int stat );
00175
00180 const char* GetObjectArrayName( int otype, int i );
00181
00186 int GetNumberOfObjectArrayComponents( int otype, int i );
00187
00192 int GetObjectArrayStatus( int otype, int i );
00193
00198 void SetObjectArrayStatus( int otype, int i, int stat );
00199
00206 int GetNumberOfObjectAttributes( int objectType, int objectIndex );
00207 const char* GetObjectAttributeName( int objectType,
00208 int objectIndex,
00209 int attributeIndex );
00210 int GetObjectAttributeIndex( int objectType,
00211 int objectIndex,
00212 const char* attribName );
00213 int GetObjectAttributeStatus( int objectType,
00214 int objectIndex,
00215 int attribIndex );
00216 void SetObjectAttributeStatus( int objectType,
00217 int objectIndex,
00218 int attribIndex, int status );
00219
00221 vtkGetMacro(GenerateObjectIdArray,int);
00222 vtkSetMacro(GenerateObjectIdArray,int);
00223 static const char* GetObjectIdArrayName() { return "ObjectId"; }
00224
00225 vtkSetMacro(GenerateGlobalElementIdArray,int);
00226 vtkGetMacro(GenerateGlobalElementIdArray,int);
00227 static const char* GetGlobalElementIdArrayName() { return "GlobalElementId"; }
00228
00229 vtkSetMacro(GenerateGlobalNodeIdArray,int);
00230 vtkGetMacro(GenerateGlobalNodeIdArray,int);
00231 static const char* GetGlobalNodeIdArrayName() { return "GlobalNodeId"; }
00232
00233 vtkSetMacro(GenerateImplicitElementIdArray,int);
00234 vtkGetMacro(GenerateImplicitElementIdArray,int);
00235 static const char* GetImplicitElementIdArrayName() { return "ImplicitElementId"; }
00236
00237 vtkSetMacro(GenerateImplicitNodeIdArray,int);
00238 vtkGetMacro(GenerateImplicitNodeIdArray,int);
00239 static const char* GetImplicitNodeIdArrayName() { return "ImplicitNodeId"; }
00240
00244 vtkSetMacro(GenerateFileIdArray,int);
00245 vtkGetMacro(GenerateFileIdArray,int);
00246 static const char* GetFileIdArrayName() { return "FileId"; }
00247
00249 vtkSetMacro(FileId,int);
00250 vtkGetMacro(FileId,int);
00251
00252 static const char *GetGlobalVariableValuesArrayName()
00253 { return "GlobalVariableValues"; }
00254 static const char *GetGlobalVariableNamesArrayName()
00255 { return "GlobalVariableNames"; }
00256
00257 virtual void SetApplyDisplacements( int d );
00258 vtkGetMacro(ApplyDisplacements,int);
00259
00260 virtual void SetDisplacementMagnitude( double s );
00261 vtkGetMacro(DisplacementMagnitude,double);
00262
00263 vtkSetMacro(HasModeShapes,int);
00264 vtkGetMacro(HasModeShapes,int);
00265
00266 vtkSetMacro(ModeShapeTime,double);
00267 vtkGetMacro(ModeShapeTime,double);
00268
00269 vtkSetMacro(AnimateModeShapes, int);
00270 vtkGetMacro(AnimateModeShapes, int);
00271
00272 vtkDataArray* FindDisplacementVectors( int timeStep );
00273
00274 vtkSetMacro(EdgeFieldDecorations,int);
00275 vtkGetMacro(EdgeFieldDecorations,int);
00276
00277 vtkSetMacro(FaceFieldDecorations,int);
00278 vtkGetMacro(FaceFieldDecorations,int);
00279
00280 const struct ex_init_params* GetModelParams() const
00281 { return &this->ModelParameters; }
00282
00284 struct ArrayInfoType {
00286 vtkStdString Name;
00288 int Components;
00295 int GlomType;
00298 int StorageType;
00300 int Source;
00302 int Status;
00305 vtkstd::vector<vtkStdString> OriginalNames;
00308 vtkstd::vector<int> OriginalIndices;
00317 vtkstd::vector<int> ObjectTruth;
00319 void Reset();
00320 };
00321
00323 struct ObjectInfoType {
00325 int Size;
00327 int Status;
00329 int Id;
00331 vtkStdString Name;
00332 };
00333
00335 struct MapInfoType : public ObjectInfoType {
00336 };
00337
00340 struct BlockSetInfoType : public ObjectInfoType {
00342 vtkIdType FileOffset;
00347 vtkstd::map<vtkIdType,vtkIdType> PointMap;
00352 vtkstd::map<vtkIdType,vtkIdType> ReversePointMap;
00356 vtkIdType NextSqueezePoint;
00358 vtkUnstructuredGrid* CachedConnectivity;
00359
00360 BlockSetInfoType(){this->CachedConnectivity=0;}
00361 BlockSetInfoType(const BlockSetInfoType& block);
00362 ~BlockSetInfoType();
00363 };
00364
00366 struct BlockInfoType : public BlockSetInfoType {
00367 vtkStdString OriginalName;
00368 vtkStdString TypeName;
00369
00370
00371 int BdsPerEntry[3];
00372 int AttributesPerEntry;
00373 vtkstd::vector<vtkStdString> AttributeNames;
00374 vtkstd::vector<int> AttributeStatus;
00375
00376 int CellType;
00377
00378
00379 int PointsPerCell;
00380 };
00381
00383 struct PartInfoType : public ObjectInfoType {
00384 vtkstd::vector<int> BlockIndices;
00385 };
00386 struct AssemblyInfoType : public ObjectInfoType {
00387 vtkstd::vector<int> BlockIndices;
00388 };
00389 struct MaterialInfoType : public ObjectInfoType {
00390 vtkstd::vector<int> BlockIndices;
00391 };
00392
00394 struct SetInfoType : public BlockSetInfoType {
00395 int DistFact;
00396
00397 };
00398
00401 enum GlomTypes {
00402 Scalar=0,
00403 Vector2=1,
00404 Vector3=2,
00405 SymmetricTensor=3,
00406
00407 IntegrationPoint=4
00408 };
00409
00411 enum ArraySourceTypes {
00412 Result=0,
00413
00414 Attribute=1,
00415
00416 Map=2,
00417 Generated=3
00418 };
00419
00421 vtkTimeStamp InformationTimeStamp;
00422
00423 friend class vtkExodusIIReader;
00424 friend class vtkPExodusIIReader;
00425
00426 virtual void SetParser( vtkExodusIIReaderParser* );
00427 vtkGetObjectMacro(Parser,vtkExodusIIReaderParser);
00428
00429
00430
00431
00432
00433 int GetNumberOfParts();
00434 const char* GetPartName(int idx);
00435 const char* GetPartBlockInfo(int idx);
00436 int GetPartStatus(int idx);
00437 int GetPartStatus(vtkStdString name);
00438 void SetPartStatus(int idx, int on);
00439 void SetPartStatus(vtkStdString name, int flag);
00440
00441 int GetNumberOfMaterials();
00442 const char* GetMaterialName(int idx);
00443 int GetMaterialStatus(int idx);
00444 int GetMaterialStatus(vtkStdString name);
00445 void SetMaterialStatus(int idx, int on);
00446 void SetMaterialStatus(vtkStdString name, int flag);
00447
00448 int GetNumberOfAssemblies();
00449 const char* GetAssemblyName(int idx);
00450 int GetAssemblyStatus(int idx);
00451 int GetAssemblyStatus(vtkStdString name);
00452 void SetAssemblyStatus(int idx, int on);
00453 void SetAssemblyStatus(vtkStdString name, int flag);
00454
00455 void SetFastPathObjectType(vtkExodusIIReader::ObjectType type)
00456 {this->FastPathObjectType = type;};
00457 void SetFastPathObjectId(vtkIdType id){this->FastPathObjectId = id;};
00458 vtkSetStringMacro(FastPathIdType);
00459
00460 bool IsXMLMetadataValid();
00461
00469 void GetInitialObjectStatus( int otype, ObjectInfoType *info );
00470
00478 void GetInitialObjectArrayStatus( int otype, ArrayInfoType *info );
00479
00486 void SetInitialObjectStatus( int otype, const char *name, int stat );
00487
00493 void SetInitialObjectArrayStatus( int otype, const char *name, int stat );
00494
00495 int UpdateTimeInformation();
00496
00497 bool ProducedFastPathOutput;
00498
00499 protected:
00500 vtkExodusIIReaderPrivate();
00501 ~vtkExodusIIReaderPrivate();
00502
00504 void BuildSIL();
00505
00508 int VerifyIntegrationPointGlom( int nn,
00509 char** np,
00510 vtksys::RegularExpression& re,
00511 vtkStdString& field,
00512 vtkStdString& ele );
00513
00515 void GlomArrayNames( int i,
00516 int num_obj,
00517 int num_vars,
00518 char** var_names,
00519 int* truth_tab );
00520
00522 void PrepareGeneratedArrayInfo();
00523
00539 int AssembleOutputConnectivity( vtkIdType timeStep,
00540 int otyp, int oidx, int conntypidx, BlockSetInfoType* bsinfop,
00541 vtkUnstructuredGrid* output );
00548 int AssembleOutputPoints( vtkIdType timeStep,
00549 BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00553 int AssembleOutputPointArrays( vtkIdType timeStep,
00554 BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00558 int AssembleOutputCellArrays( vtkIdType timeStep,
00559 int otyp, int oidx, BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00564 int AssembleOutputProceduralArrays( vtkIdType timeStep,
00565 int otyp, int oidx, vtkUnstructuredGrid* output );
00567 int AssembleOutputGlobalArrays( vtkIdType timeStep,
00568 int otyp, int oidx, BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00575 int AssembleOutputPointMaps( vtkIdType timeStep,
00576 BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00577 int AssembleOutputCellMaps( vtkIdType timeStep,
00578 int otyp, int oidx, BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00581 int AssembleArraysOverTime(vtkMultiBlockDataSet* output);
00582
00583
00584 void AssembleOutputEdgeDecorations();
00585
00586
00587 void AssembleOutputFaceDecorations();
00588
00590 void InsertBlockCells(
00591 int otyp, int obj, int conn_type, int timeStep, BlockInfoType* binfop );
00592
00594 void InsertSetCells(
00595 int otyp, int obj, int conn_type, int timeStep, SetInfoType* sinfop );
00596
00598 void AddPointArray(
00599 vtkDataArray* src, BlockSetInfoType* bsinfop, vtkUnstructuredGrid* output );
00600
00602 void InsertSetNodeCopies(
00603 vtkIntArray* refs, int otyp, int obj, SetInfoType* sinfo );
00604
00606 void InsertSetCellCopies(
00607 vtkIntArray* refs, int otyp, int obj, SetInfoType* sinfo );
00608
00610 void InsertSetSides(
00611 vtkIntArray* refs, int otyp, int obj, SetInfoType* sinfo );
00612
00618 vtkDataArray* GetCacheOrRead( vtkExodusIICacheKey );
00619
00624 int GetConnTypeIndexFromConnType( int ctyp );
00625
00630 int GetObjectTypeIndexFromObjectType( int otyp );
00631
00637 int GetNumberOfObjectsAtTypeIndex( int typeIndex );
00638
00646 ObjectInfoType* GetObjectInfo( int typeIndex, int objectIndex );
00647
00654 ObjectInfoType* GetSortedObjectInfo( int objectType, int objectIndex );
00655
00662 ObjectInfoType* GetUnsortedObjectInfo( int objectType, int objectIndex );
00663
00668 int GetBlockIndexFromFileGlobalId( int otyp, int refId );
00669
00674 BlockInfoType* GetBlockFromFileGlobalId( int otyp, int refId );
00675
00679 vtkIdType GetSqueezePointId( BlockSetInfoType* bsinfop, int i );
00680
00682 void DetermineVtkCellType( BlockInfoType& binfo );
00683
00687 ArrayInfoType* FindArrayInfoByName( int otyp, const char* name );
00688
00692 int IsObjectTypeBlock( int otyp );
00693 int IsObjectTypeSet( int otyp );
00694 int IsObjectTypeMap( int otyp );
00695
00699 int GetObjectTypeFromMapType( int mtyp );
00700 int GetMapTypeFromObjectType( int otyp );
00701 int GetTemporalTypeFromObjectType( int otyp );
00702
00706 int GetSetTypeFromSetConnType( int sctyp );
00707
00711 int GetBlockConnTypeFromBlockType( int btyp );
00712
00718 void RemoveBeginningAndTrailingSpaces( int len, char **names );
00719
00721 void ClearConnectivityCaches();
00722
00726 vtkstd::map<int,vtkstd::vector<BlockInfoType> > BlockInfo;
00730 vtkstd::map<int,vtkstd::vector<SetInfoType> > SetInfo;
00736 vtkstd::map<int,vtkstd::vector<MapInfoType> > MapInfo;
00737
00738 vtkstd::vector<PartInfoType> PartInfo;
00739 vtkstd::vector<MaterialInfoType> MaterialInfo;
00740 vtkstd::vector<AssemblyInfoType> AssemblyInfo;
00741
00746 vtkstd::map<int,vtkstd::vector<int> > SortedObjectIndices;
00748
00749 vtkstd::map<int,vtkstd::vector<ArrayInfoType> > ArrayInfo;
00750
00755 vtkstd::map<int,vtkstd::vector<ArrayInfoType> > InitialArrayInfo;
00756
00761 vtkstd::map<int,vtkstd::vector<ObjectInfoType> > InitialObjectInfo;
00762
00764 int AppWordSize;
00765 int DiskWordSize;
00766
00770 float ExodusVersion;
00771
00773 int Exoid;
00774
00776 struct ex_init_params ModelParameters;
00777
00779 vtkstd::vector<double> Times;
00780
00782 int TimeStep;
00783
00787 double ModeShapeTime;
00788
00789 int GenerateObjectIdArray;
00790 int GenerateGlobalIdArray;
00791 int GenerateFileIdArray;
00792 int GenerateGlobalElementIdArray;
00793 int GenerateGlobalNodeIdArray;
00794 int GenerateImplicitElementIdArray;
00795 int GenerateImplicitNodeIdArray;
00796
00800 int FileId;
00801
00803 vtkExodusIICache* Cache;
00804
00805 int ApplyDisplacements;
00806 float DisplacementMagnitude;
00807 int HasModeShapes;
00808 int AnimateModeShapes;
00809
00810
00811 int EdgeFieldDecorations;
00812 int FaceFieldDecorations;
00813
00814
00815 vtkPolyData* EdgeDecorationMesh;
00816 vtkPolyData* FaceDecorationMesh;
00817
00829 int SqueezePoints;
00830
00834 vtkExodusIIReader* Parent;
00835
00836 vtkExodusIIReaderParser* Parser;
00837
00838 vtkExodusIIReader::ObjectType FastPathObjectType;
00839 vtkIdType FastPathObjectId;
00840 char* FastPathIdType;
00841
00842 vtkMutableDirectedGraph* SIL;
00843 private:
00844 vtkExodusIIReaderPrivate( const vtkExodusIIReaderPrivate& );
00845 void operator = ( const vtkExodusIIReaderPrivate& );
00846 };
00847
00848 #endif // __vtkExodusIIReaderPrivate_h