GenericMeshReader.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 _GENERICMESHREADER_HPP_
00037 #define _GENERICMESHREADER_HPP_
00038
00039 #include <memory>
00040 #include <string>
00041
00042 #include "AbstractMeshReader.hpp"
00043
00044
00045 #include "TrianglesMeshReader.hpp"
00046 #include "MemfemMeshReader.hpp"
00047 #include "VtkMeshReader.hpp"
00048
00067 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00068 std::auto_ptr<AbstractMeshReader<ELEMENT_DIM, SPACE_DIM> > GenericMeshReader(const std::string& rPathBaseName,
00069 unsigned orderOfElements=1,
00070 unsigned orderOfBoundaryElements=1,
00071 bool readContainingElementsForBoundaryElements=false)
00072 {
00073 std::auto_ptr<AbstractMeshReader<ELEMENT_DIM, SPACE_DIM> > p_reader;
00074 try
00075 {
00076 p_reader.reset(new TrianglesMeshReader<ELEMENT_DIM, SPACE_DIM>(rPathBaseName,
00077 orderOfElements,
00078 orderOfBoundaryElements,
00079 readContainingElementsForBoundaryElements));
00080 }
00081 catch (const Exception& r_triangles_exception)
00082 {
00083 if (orderOfElements!=1 || orderOfBoundaryElements!=1 || readContainingElementsForBoundaryElements)
00084 {
00085 EXCEPTION("Quadratic meshes are only supported in Triangles format.");
00086 }
00087
00088 try
00089 {
00090 p_reader.reset(new MemfemMeshReader<ELEMENT_DIM, SPACE_DIM>(rPathBaseName));
00091 }
00092 catch (const Exception& r_memfem_exception)
00093 {
00094 #ifdef CHASTE_VTK
00095 try
00096 {
00097 p_reader.reset(new VtkMeshReader<ELEMENT_DIM, SPACE_DIM>(rPathBaseName));
00098 }
00099 catch (const Exception& r_vtk_exception)
00100 {
00101 #endif // CHASTE_VTK
00102 std::string eol("\n");
00103 std::string combined_message = "Could not open appropriate mesh files for " + rPathBaseName + eol;
00104 combined_message += "Triangle format: " + r_triangles_exception.GetShortMessage() + eol;
00105 combined_message += "Memfem format: " + r_memfem_exception.GetShortMessage() + eol;
00106 #ifdef CHASTE_VTK
00107 combined_message += "Vtk format: " + r_vtk_exception.GetShortMessage() + eol;
00108 #endif // CHASTE_VTK
00109 EXCEPTION(combined_message);
00110 #ifdef CHASTE_VTK
00111 }
00112 #endif // CHASTE_VTK
00113 }
00114 }
00115 return p_reader;
00116 }
00117
00118 #endif //_GENERICMESHREADER_HPP_