• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/Parallel/vtkExodusIIWriter.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkExodusIIWriter.h,v $
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 
00070 #ifndef __vtkExodusIIWriter_h
00071 #define __vtkExodusIIWriter_h
00072 
00073 #include "vtkWriter.h"
00074 #include "vtkSmartPointer.h" // For vtkSmartPointer
00075 
00076 #include <vtkstd/vector> // For vector
00077 #include <vtkstd/map> // For map
00078 #include <vtkstd/string> // For string
00079 
00080 class vtkModelMetadata;
00081 class vtkDoubleArray;
00082 class vtkIntArray;
00083 class vtkUnstructuredGrid;
00084 
00085 class VTK_PARALLEL_EXPORT vtkExodusIIWriter : public vtkWriter
00086 {
00087 public:
00088   static vtkExodusIIWriter *New ();
00089   vtkTypeRevisionMacro (vtkExodusIIWriter, vtkWriter);
00090   void PrintSelf (ostream& os, vtkIndent indent);
00091  
00100   void SetModelMetadata (vtkModelMetadata*);
00101   vtkGetObjectMacro(ModelMetadata, vtkModelMetadata);
00102 
00108   vtkSetStringMacro(FileName);
00109   vtkGetStringMacro(FileName);
00110   
00116   vtkSetMacro(StoreDoubles, int);
00117   vtkGetMacro(StoreDoubles, int);
00118 
00122   vtkSetMacro(GhostLevel, int);
00123   vtkGetMacro(GhostLevel, int);
00124 
00130   vtkSetMacro(WriteOutBlockIdArray, int);
00131   vtkGetMacro(WriteOutBlockIdArray, int);
00132   vtkBooleanMacro(WriteOutBlockIdArray, int);
00133 
00138   vtkSetMacro(WriteOutGlobalNodeIdArray, int);
00139   vtkGetMacro(WriteOutGlobalNodeIdArray, int);
00140   vtkBooleanMacro(WriteOutGlobalNodeIdArray, int);
00141 
00146   vtkSetMacro(WriteOutGlobalElementIdArray, int);
00147   vtkGetMacro(WriteOutGlobalElementIdArray, int);
00148   vtkBooleanMacro(WriteOutGlobalElementIdArray, int);
00149 
00153   vtkSetMacro(WriteAllTimeSteps, int);
00154   vtkGetMacro(WriteAllTimeSteps, int);
00155   vtkBooleanMacro(WriteAllTimeSteps, int);
00156 
00157   vtkSetStringMacro(BlockIdArrayName);
00158   vtkGetStringMacro(BlockIdArrayName);
00159 
00160 protected:
00161   vtkExodusIIWriter ();
00162   ~vtkExodusIIWriter ();
00163 
00164   vtkModelMetadata* ModelMetadata;
00165 
00166   char *BlockIdArrayName;
00167 
00168   char *FileName;
00169   int fid;
00170 
00171   int NumberOfProcesses;
00172   int MyRank;
00173 
00174   int PassDoubles;
00175 
00176   int StoreDoubles;
00177   int GhostLevel;
00178   int WriteOutBlockIdArray;
00179   int WriteOutGlobalNodeIdArray;
00180   int WriteOutGlobalElementIdArray;
00181   int WriteAllTimeSteps;
00182   int NumberOfTimeSteps;
00183 
00184   vtkDoubleArray* TimeValues;
00185   int CurrentTimeIndex;
00186   int FileTimeOffset;
00187 
00188 //BTX 
00189   vtkDataObject *OriginalInput;
00190   vtkstd::vector< vtkSmartPointer<vtkUnstructuredGrid> > FlattenedInput;
00191   vtkstd::vector< vtkSmartPointer<vtkUnstructuredGrid> > NewFlattenedInput;
00192 
00193   vtkstd::vector< vtkIntArray* > BlockIdList;
00194 
00195   struct Block
00196   {
00197     Block () : ElementStartIndex (-1), OutputIndex(-1) { }
00198     char *Name;
00199     int NumElements;
00200     int ElementStartIndex;
00201     int NodesPerElements;
00202     size_t GridIndex;
00203     // vtkstd::vector<int> CellIndex;
00204     int OutputIndex;
00205     int NumAttributes;
00206     float *BlockAttributes; // Owned by metamodel or null.  Don't delete.
00207   };
00208   vtkstd::map<int, Block> BlockInfoMap;
00209   int NumCells, NumPoints, MaxId;
00210 
00211   vtkstd::vector<vtkIdType*> GlobalElementIdList;
00212   vtkstd::vector<vtkIdType*> GlobalNodeIdList;
00213 //ETX
00214   int AtLeastOneGlobalElementIdList;
00215   int AtLeastOneGlobalNodeIdList;
00216 
00217 //BTX
00218   struct VariableInfo
00219   {
00220     int NumComponents;
00221     int InIndex;
00222     int ScalarOutOffset;
00223     vtkstd::vector<vtkstd::string> OutNames;
00224   };
00225   vtkstd::map<vtkstd::string, VariableInfo> BlockVariableMap;
00226   vtkstd::map<vtkstd::string, VariableInfo> NodeVariableMap;
00227   int NumberOfScalarElementArrays;
00228   int NumberOfScalarNodeArrays;
00229 //ETX
00230   
00231 //BTX
00232   vtkstd::vector< vtkstd::vector<int> > CellToElementOffset;
00233 //ETX
00234   // By BlockId, and within block ID by element variable, with variables
00235   // appearing in the same order in which they appear in OutputElementArrayNames
00236   
00237   int *BlockElementVariableTruthTable;
00238   int AllVariablesDefinedInAllBlocks;
00239 
00240   int BlockVariableTruthValue(int blockIdx, int varIdx);
00241   
00242 //BTX
00243   char *StrDupWithNew (const char *s);
00244   void StringUppercase (vtkstd::string& str);
00245 //ETX
00246 
00247   int ProcessRequest (vtkInformation* request,
00248                       vtkInformationVector** inputVector,
00249                       vtkInformationVector* outputVector);
00250 
00251   int RequestInformation (vtkInformation* request,
00252                           vtkInformationVector** inputVector,
00253                           vtkInformationVector* outputVector);
00254 
00255   int FillInputPortInformation (int port, vtkInformation* info);
00256 
00257   int RequestData (vtkInformation* request,
00258                    vtkInformationVector** inputVector,
00259                    vtkInformationVector* outputVector);
00260 
00261   void WriteData ();
00262   
00263   int FlattenHierarchy (vtkDataObject* input, bool& changed);
00264 
00265   int CreateNewExodusFile ();
00266   void CloseExodusFile ();
00267 
00268   int IsDouble ();
00269   void RemoveGhostCells ();
00270   int CheckParameters ();
00271   int CheckInputArrays ();
00272   int ConstructBlockInfoMap ();
00273   int ConstructVariableInfoMaps ();
00274   int ParseMetadata ();
00275   int CreateDefaultMetadata ();
00276   char *GetCellTypeName (int t);
00277   
00278   int CreateBlockIdMetadata(vtkModelMetadata *em);
00279   int CreateBlockVariableMetadata (vtkModelMetadata* em);
00280   
00281 //BTX
00282   char **FlattenOutVariableNames (
00283             int nScalarArrays, 
00284             const vtkstd::map<vtkstd::string, VariableInfo>& variableMap);
00285   vtkstd::string CreateNameForScalarArray (const char *root,
00286                                            int component,
00287                                            int numComponents);
00288 
00289   vtkstd::map<vtkIdType, vtkIdType> *LocalNodeIdMap;
00290   vtkstd::map<vtkIdType, vtkIdType> *LocalElementIdMap;
00291 //ETX
00292   vtkIdType GetNodeLocalId(vtkIdType id);
00293   vtkIdType GetElementLocalId(vtkIdType id);
00294 
00295   int WriteInitializationParameters ();
00296   int WriteQARecords ();
00297   int WriteInformationRecords ();
00298   int WritePoints ();
00299   int WriteCoordinateNames ();
00300   int WriteGlobalPointIds ();
00301   int WriteBlockInformation ();
00302   int WriteGlobalElementIds ();
00303   int WriteVariableArrayNames ();
00304   int WriteNodeSetInformation ();
00305   int WriteSideSetInformation ();
00306   int WriteProperties ();
00307   int WriteNextTimeStep ();
00308 
00309 //BTX
00310   void ExtractCellData (const char *name, int comp, vtkDataArray *buffer);
00311   int WriteCellData (int timestep, vtkDataArray *buffer);
00312   void ExtractPointData (const char *name, int comp, vtkDataArray *buffer);
00313   int WritePointData (int timestep, vtkDataArray *buffer);
00314 //ETX
00315 
00316 
00317 private:
00318   vtkExodusIIWriter (const vtkExodusIIWriter&); // Not Implemented
00319   void operator= (const vtkExodusIIWriter&); // Not Implemented
00320 };
00321 
00322 #endif

Generated by  doxygen 1.7.1