VtkMeshWriter.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef VTKMESHWRITER_HPP_
00037 #define VTKMESHWRITER_HPP_
00038
00039 #ifdef CHASTE_VTK
00040
00041 #define _BACKWARD_BACKWARD_WARNING_H 1 //Cut out the strstream deprecated warning for now (gcc4.3)
00042 #include <vtkDoubleArray.h>
00043 #include <vtkCellData.h>
00044 #include <vtkPointData.h>
00045 #include <vtkTetra.h>
00046 #include <vtkTriangle.h>
00047 #include <vtkLine.h>
00048 #include <vtkUnstructuredGrid.h>
00049 #include <vtkUnstructuredGridWriter.h>
00050 #include <vtkXMLUnstructuredGridWriter.h>
00051 #include <vtkXMLPUnstructuredGridWriter.h>
00052
00053 #include <vtkDataCompressor.h>
00054 #include "AbstractTetrahedralMeshWriter.hpp"
00055 #include "Version.hpp"
00056
00057
00058 #include <map>
00059
00060
00061 template<unsigned SPACE_DIM>
00062 class NodesOnlyMesh;
00063
00070 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00071 class VtkMeshWriter : public AbstractTetrahedralMeshWriter<ELEMENT_DIM, SPACE_DIM>
00072 {
00073
00074
00075
00076 private:
00077 bool mWriteParallelFiles;
00079 std::map<unsigned, unsigned> mGlobalToNodeIndexMap;
00081 std::vector<std::vector<unsigned> > mNodesToSendPerProcess;
00082 std::vector<std::vector<unsigned> > mNodesToReceivePerProcess;
00085 NodesOnlyMesh<SPACE_DIM>* mpNodesOnlyMesh;
00086
00093 vtkUnstructuredGrid* mpVtkUnstructedMesh;
00094
00099 void MakeVtkMesh();
00100
00108 void AugmentCellData();
00109
00110 public:
00111
00119 VtkMeshWriter(const std::string& rDirectory, const std::string& rBaseName, const bool& rCleanDirectory=true);
00120
00124 void WriteFiles();
00125
00126
00134 void AddCellData(std::string name, std::vector<double> data);
00135
00143 void AddCellData(std::string name, std::vector<c_vector<double, SPACE_DIM> > data);
00144
00153 void AddTensorCellData(std::string name, std::vector<c_vector<double,SPACE_DIM*(SPACE_DIM+1)/2> > data);
00154
00162 void AddTensorCellData(std::string name, std::vector<c_matrix<double,SPACE_DIM,SPACE_DIM> > data);
00163
00164
00172 void AddPointData(std::string name, std::vector<double> data);
00173
00181 void AddPointData(std::string name, std::vector<c_vector<double, SPACE_DIM> > data);
00182
00190 void AddTensorPointData(std::string name, std::vector<c_matrix<double,SPACE_DIM,SPACE_DIM> > data);
00191
00198 void SetParallelFiles(AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>& rMesh);
00199
00212 void WriteFilesUsingMesh(AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM>& rMesh,
00213 bool keepOriginalElementIndexing=true);
00214
00220 void AddProvenance(std::string fileName);
00221
00225 virtual ~VtkMeshWriter();
00226 };
00227
00228 #endif //CHASTE_VTK
00229
00230 #endif