00001 #ifndef __MESHPARALLELISER_HPP__ 00002 #define __MESHPARALLELISER_HPP__ 00003 00004 #include "mesh/Mesh.hpp" 00005 #include "parallel/DomainDecomposer.hpp" 00006 #include "parallel/pico/DomainCoupler.hpp" 00007 #include "parallel/pico/FieldExchanger.hpp" 00008 00009 #include <vector> 00010 #include <set> 00011 00012 #include "mpi.h" 00013 00014 namespace DAPTA { // Define namespace DAPTA 00015 00017 00020 template <typename Traits> 00021 class MeshParalleliser { 00022 public: 00023 // TYPE DEFINITIONS 00024 typedef typename Traits::VertexType VertexType; 00025 typedef typename Traits::VertexHandle VertexHandle; 00026 00027 typedef typename Traits::ElementType ElementType; 00028 typedef typename Traits::ElementHandle ElementHandle; 00029 00030 typedef typename Traits::CohElementType CohElementType; 00031 typedef typename Traits::CohElementHandle CohElementHandle; 00032 00033 typedef typename Traits::FaceElementType FaceElementType; 00034 typedef typename Traits::FaceElementHandle FaceElementHandle; 00035 00036 typedef typename Traits::EdgeElementType EdgeElementType; 00037 typedef typename Traits::EdgeElementHandle EdgeElementHandle; 00038 00039 typedef typename Traits::ElementConListType ElementConListType; 00040 typedef typename Traits::ElementConListHandle ElementConListHandle; 00041 00042 typedef typename Traits::DomainDecomposerType DomainDecomposerType; 00043 typedef typename Traits::DomainDecomposerHandle DomainDecomposerHandle; 00044 00045 MeshParalleliser(MPI_Comm _comm, Mesh<Traits> *_mesh); 00046 ~MeshParalleliser(); 00047 00048 void initialiseCommunication(); 00049 void exchange(); 00050 private: 00051 friend class Mesh<Traits>; 00052 00053 typedef std::vector<typename VertexType::CoordType> _BufferCont; 00054 typedef typename _BufferCont::iterator _BufferIt; 00055 typedef std::vector<VertexHandle> _VertexCont; 00056 typedef typename _VertexCont::iterator _VertexIt; 00057 typedef std::vector<EdgeElementType> _EdgeCont; 00058 typedef typename _EdgeCont::iterator _EdgeIt; 00059 00060 MPI_Comm communicator; 00061 Mesh<Traits> *mesh; 00062 DomainDecomposerHandle decomposer; 00063 00064 pico::DomainCoupler<VertexType> *coupler; 00065 pico::FieldExchanger<VertexType> *exchanger; 00066 00067 _VertexCont verticesConnected; 00068 _EdgeCont edgesConnected; 00069 00070 }; 00071 00072 } // namespace DAPTA 00073 00074 #include "MeshParalleliser.cpp" 00075 00076 #endif
1.5.1