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 #include <cassert>
00030 #include "AbstractMeshWriter.hpp"
00031 #include "PetscTools.hpp"
00032
00034
00036
00037 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00038 AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::AbstractMeshWriter(const std::string &rDirectory,
00039 const std::string &rBaseName,
00040 const bool clearOutputDir)
00041 : mBaseName(rBaseName),
00042 mpMeshReader(NULL)
00043 {
00044 mpOutputFileHandler = new OutputFileHandler(rDirectory, clearOutputDir);
00045 }
00046
00047 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00048 AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::~AbstractMeshWriter()
00049 {
00050 delete mpOutputFileHandler;
00051 }
00052
00053 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00054 std::string AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetOutputDirectory()
00055 {
00056 return mpOutputFileHandler->GetOutputDirectoryFullPath();
00057 }
00058
00059 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00060 unsigned AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNumNodes()
00061 {
00062 return mNumNodes;
00063 }
00064
00065 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00066 unsigned AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNumElements()
00067 {
00068 return mNumElements;
00069 }
00070
00071 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00072 unsigned AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNumBoundaryFaces()
00073 {
00074 return mNumBoundaryElements;
00075 }
00076
00077 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00078 unsigned AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNumBoundaryEdges()
00079 {
00080 return mBoundaryFaceData.size();
00081 }
00082
00083
00084 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00085 std::vector<double> AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNextNode()
00086 {
00087 assert(mpMeshReader!=NULL);
00088 return mpMeshReader->GetNextNode();
00089 }
00090
00091 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00092 ElementData AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::GetNextElement()
00093 {
00094 assert(mpMeshReader!=NULL);
00095 return mpMeshReader->GetNextElementData();
00096 }
00097
00098 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00099 void AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::SetNextBoundaryFace(std::vector<unsigned> nextFace)
00100 {
00101 mBoundaryFaceData.push_back(nextFace);
00102 }
00103
00104 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00105 void AbstractMeshWriter<ELEMENT_DIM, SPACE_DIM>::WriteFilesUsingMeshReader(
00106 AbstractMeshReader<ELEMENT_DIM, SPACE_DIM>& rMeshReader)
00107 {
00108 mpMeshReader = &rMeshReader;
00109 mNumNodes = mpMeshReader->GetNumNodes();
00110 mNumElements = mpMeshReader->GetNumElements();
00111 mNumBoundaryElements = mpMeshReader->GetNumFaces();
00112
00113 if (!PetscTools::AmMaster())
00114 {
00115 return;
00116 }
00117
00118
00119 for (unsigned i=0; i<rMeshReader.GetNumFaces(); i++)
00120 {
00121 SetNextBoundaryFace(rMeshReader.GetNextFaceData().NodeIndices);
00122 }
00123 WriteFiles();
00124 }
00125
00127
00129
00130 template class AbstractMeshWriter<1,1>;
00131 template class AbstractMeshWriter<1,2>;
00132 template class AbstractMeshWriter<1,3>;
00133 template class AbstractMeshWriter<2,2>;
00134 template class AbstractMeshWriter<2,3>;
00135 template class AbstractMeshWriter<3,3>;