parallel/MeshParalleliser.hpp

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

Generated on Tue May 29 17:13:48 2007 for DAPTA by  doxygen 1.5.1