Ignore:
Timestamp:
03/22/18 10:43:20 (6 years ago)
Author:
yushan
Message:

branch_openmp merged with XIOS_DEV_CMIP6@1459

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/node/variable.cpp

    r1075 r1460  
    9797   { 
    9898     CContext* context=CContext::getCurrent() ; 
    99      if (!context->hasServer) 
     99 
     100     if (context->hasClient) 
    100101     { 
    101        CContextClient* client=context->client ; 
    102  
    103        CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
    104        if (client->isServerLeader()) 
     102       // Use correct context client to send message 
     103       // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     104      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
     105       for (int i = 0; i < nbSrvPools; ++i) 
    105106       { 
    106          CMessage msg ; 
    107          msg<<this->getId() ; 
    108          msg<<content ; 
    109          const std::list<int>& ranks = client->getRanksServerLeader(); 
    110          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    111            event.push(*itRank,1,msg); 
    112          client->sendEvent(event) ; 
    113        } 
    114        else client->sendEvent(event) ; 
    115     } 
     107//       CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer 
     108         CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
     109                                                                             : context->client; 
     110 
     111         CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
     112         if (contextClientTmp->isServerLeader()) 
     113         { 
     114           CMessage msg ; 
     115           msg<<this->getId() ; 
     116           msg<<content ; 
     117           const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     118           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     119             event.push(*itRank,1,msg); 
     120           contextClientTmp->sendEvent(event) ; 
     121         } 
     122         else contextClientTmp->sendEvent(event) ; 
     123      } 
     124     } 
     125   } 
     126 
     127   void CVariable::sendValue(CContextClient* client, bool clientPrim /*= false*/) 
     128   { 
     129     CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
     130     if (client->isServerLeader()) 
     131     { 
     132       CMessage msg ; 
     133       msg<<this->getId() ; 
     134       msg<<content ; 
     135       const std::list<int>& ranks = client->getRanksServerLeader(); 
     136       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     137         event.push(*itRank,1,msg); 
     138       client->sendEvent(event) ; 
     139     } 
     140     else client->sendEvent(event) ; 
    116141   } 
    117142 
Note: See TracChangeset for help on using the changeset viewer.