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 #ifndef _ABSTRACTTETRAHEDRALMESHWRITER_HPP_
00031 #define _ABSTRACTTETRAHEDRALMESHWRITER_HPP_
00032
00033
00034 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00035 class AbstractTetrahedralMesh;
00036
00037 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00038 class DistributedTetrahedralMesh;
00039
00040 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00041 class MixedDimensionMesh;
00042
00043 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00044 struct MeshWriterIterators;
00045
00046 #include <fstream>
00047 #include <sstream>
00048 #include <iostream>
00049
00050 #include "Exception.hpp"
00051 #include "AbstractMeshWriter.hpp"
00052 #include "AbstractMesh.hpp"
00053 #include "NodeMap.hpp"
00054
00055
00056
00057
00058
00062 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00063 class AbstractTetrahedralMeshWriter : public AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>
00064 {
00065 private:
00066
00073 virtual void WriteFilesUsingParallelMesh(bool keepOriginalElementIndexing=true);
00074
00078 virtual void CreateFilesWithHeaders();
00079
00083 virtual void AppendLocalDataToFiles();
00084
00088 virtual void WriteFilesFooter();
00089
00090 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* mpMesh;
00092 NodeMap* mpNodeMap;
00094 protected:
00095
00096 unsigned mNodesPerElement;
00097 unsigned mNodesPerBoundaryElement;
00099 DistributedTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>* mpDistributedMesh;
00100 MixedDimensionMesh<ELEMENT_DIM,SPACE_DIM>* mpMixedMesh;
00101 MeshWriterIterators<ELEMENT_DIM,SPACE_DIM>* mpIters;
00103 bool mIndexFromZero;
00104 bool mWriteMetaFile;
00105 unsigned mNodeCounterForParallelMesh;
00106 unsigned mElementCounterForParallelMesh;
00107 unsigned mBoundaryElementCounterForParallelMesh;
00108 unsigned mCableElementCounterForParallelMesh;
00109 bool mFilesAreBinary;
00111 public:
00112
00120 AbstractTetrahedralMeshWriter(const std::string& rDirectory,
00121 const std::string& rBaseName,
00122 const bool clearOutputDir=true);
00123
00127 ~AbstractTetrahedralMeshWriter();
00128
00138 virtual void WriteFilesUsingMesh(AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM>& rMesh,
00139 bool keepOriginalElementIndexing=true);
00140
00141
00145 std::vector<double> GetNextNode();
00146
00147
00151 ElementData GetNextElement();
00152
00156 ElementData GetNextBoundaryElement();
00157
00161 ElementData GetNextCableElement();
00162 };
00163
00164 #endif //_ABSTRACTTETRAHEDRALMESHWRITER_HPP_