ESyS-Particle
4.0.1
|
00001 00002 // // 00003 // Copyright (c) 2003-2011 by The University of Queensland // 00004 // Earth Systems Science Computational Centre (ESSCC) // 00005 // http://www.uq.edu.au/esscc // 00006 // // 00007 // Primary Business: Brisbane, Queensland, Australia // 00008 // Licensed under the Open Software License version 3.0 // 00009 // http://www.opensource.org/licenses/osl-3.0.php // 00010 // // 00012 00013 #ifndef __BROADCAST_CMD_H 00014 #define __BROADCAST_CMD_H 00015 00016 #include "Parallel/mpicmdbuf.h" 00017 #include "Parallel/mpivbuf.h" 00018 #include "Parallel/mpibarrier.h" 00019 #include "Parallel/RankAndComm.h" 00020 00024 class BroadcastCommand 00025 { 00026 private: 00027 int m_commandId; 00028 CVarMPIBuffer m_varBuffer; 00029 CMPIBarrier m_barrier; 00030 CMPILCmdBuffer m_cmdBuffer; 00031 00032 public: 00033 BroadcastCommand(const MpiRankAndComm &rankAndComm, int cmdId); 00034 virtual ~BroadcastCommand(){} 00035 00040 template <typename TmplData> 00041 void appendTypeAndName(const TmplData &namedWithType); 00042 00046 template <typename TmplData> 00047 void append(const TmplData &basicTypeData); 00048 00052 template <typename TmplPackable> 00053 void packInto(const TmplPackable&); 00054 00058 const int& getCommandId() const; 00059 00063 void broadcastCommand(); 00064 00068 void broadcastBuffer(); 00069 00073 void wait(const std::string &barrierName); 00074 00079 void broadcast(); 00080 00081 }; 00082 #include "Parallel/BroadCast_cmd.hpp" 00083 00084 #endif // BROADCAST_CMD_H