00001 #ifndef TRANSFERER_HPP_
00002 #define TRANSFERER_HPP_
00003
00004 #include <vector>
00005 #include <map>
00006
00007 #include "mmh_intf.h"
00008 #include "mmph_mesh.h"
00009 #include "TransferData.hpp"
00010
00011 namespace mmpt
00012 {
00013
00014 enum MSG_IDS {
00015 MMPC_MSG_ID_COPYING,
00016 MMPC_TRANSFER_MSG_ID,
00017 MMPC_DISTIRB_MSG_ID,
00018 MMPC_ADAPT_REF_MSG_ID,
00019 MMPC_ADAPT_PROJ_READY_MSG_ID,
00020 MMPC_ADAPT_HS_MSG_ID,
00021 MMPC_MSG_ID_OWNERSHIP,
00022 MMPC_MSG_ID_COMPOSITE_ORDER,
00023 MMPC_MSG_ID_MESH_BASE
00024 };
00025
00026
00027
00032 class Transferer
00033 {
00034 public:
00035 Transferer(int my_id, const mmpt_mesh & parallel_mesh);
00036 virtual ~Transferer();
00037
00038 virtual const TransferResult& doTransfer(const TransferOrder& order);
00039 void doTransfer(const std::vector<TransferOrder>& orders, std::vector<const TransferResult*> &results);
00040
00041
00042 protected:
00043
00044 void doSend(const TransferOrder& order,TransferResult& r) const ;
00045 void doRecv(const TransferOrder& order,TransferResult& r) const ;
00046
00047 virtual void doMassTransferInit(const std::vector<TransferOrder>& orders);
00048 virtual void doMassTransferClear(const std::vector<TransferOrder>& orders,
00049 std::vector<const TransferResult*> &results);
00050
00051 const mmpt_mesh & pmesh;
00052 int my_subdomain_id;
00053 int last_applaied_transfer;
00054 std::vector<TransferOrder> transfers_history;
00055 std::vector<TransferResult*> transfers_results;
00056 const std::vector<TransferOrder>* current_orders;
00057 };
00058
00059 }
00060
00061 #endif //TRANSFERER_HPP_