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_