Changeset 1009 for XIOS/dev/dev_olga/src/node/axis.cpp
- Timestamp:
- 12/05/16 17:47:54 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/axis.cpp
r987 r1009 889 889 { 890 890 CContext* context = CContext::getCurrent(); 891 892 CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer 893 : context->client; 894 895 896 int nbServer = contextClientTmp->serverSize; 897 898 CServerDistributionDescription serverDescription(globalDim, nbServer); 899 serverDescription.computeServerDistribution(); 900 901 std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 902 std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 903 904 globalDimGrid.resize(globalDim.size()); 905 for (int idx = 0; idx < globalDim.size(); ++idx) globalDimGrid(idx) = globalDim[idx]; 906 907 CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 908 if (contextClientTmp->isServerLeader()) 909 { 910 std::list<CMessage> msgs; 911 912 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 913 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 914 { 915 // Use const int to ensure CMessage holds a copy of the value instead of just a reference 916 const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 917 const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; 918 const int end = begin + ni - 1; 919 920 msgs.push_back(CMessage()); 921 CMessage& msg = msgs.back(); 922 msg << this->getId(); 923 msg << ni << begin << end; 924 msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 925 msg << isCompressible_; 926 msg << orderPositionInGrid; 927 msg << globalDimGrid; 928 929 event.push(*itRank,1,msg); 930 } 931 contextClientTmp->sendEvent(event); 932 } 933 else contextClientTmp->sendEvent(event); 891 int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 892 for (int i = 0; i < nbSrvPools; ++i) 893 { 894 CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 895 : context->client; 896 int nbServer = contextClientTmp->serverSize; 897 898 CServerDistributionDescription serverDescription(globalDim, nbServer); 899 serverDescription.computeServerDistribution(); 900 901 std::vector<std::vector<int> > serverIndexBegin = serverDescription.getServerIndexBegin(); 902 std::vector<std::vector<int> > serverDimensionSizes = serverDescription.getServerDimensionSizes(); 903 904 globalDimGrid.resize(globalDim.size()); 905 for (int idx = 0; idx < globalDim.size(); ++idx) globalDimGrid(idx) = globalDim[idx]; 906 907 CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 908 if (contextClientTmp->isServerLeader()) 909 { 910 std::list<CMessage> msgs; 911 912 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 913 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 914 { 915 // Use const int to ensure CMessage holds a copy of the value instead of just a reference 916 const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 917 const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; 918 const int end = begin + ni - 1; 919 920 msgs.push_back(CMessage()); 921 CMessage& msg = msgs.back(); 922 msg << this->getId(); 923 msg << ni << begin << end; 924 msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 925 msg << isCompressible_; 926 msg << orderPositionInGrid; 927 msg << globalDimGrid; 928 929 event.push(*itRank,1,msg); 930 } 931 contextClientTmp->sendEvent(event); 932 } 933 else contextClientTmp->sendEvent(event); 934 } 934 935 } 935 936
Note: See TracChangeset
for help on using the changeset viewer.