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/group_template_impl.hpp

    r595 r1460  
    373373   void CGroupTemplate<U, V, W>::sendCreateChild(const string& id) 
    374374   { 
     375    CContext* context=CContext::getCurrent() ;   
     376 
     377    if (context->hasClient) 
     378    // if (!context->hasServer ) 
     379    { 
     380      // Use correct context client to send message 
     381//      CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer : context->client; 
     382      int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     383      for (int i = 0; i < nbSrvPools; ++i) 
     384      { 
     385         CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; 
     386 
     387         CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; 
     388         if (contextClientTmp->isServerLeader()) 
     389         { 
     390           CMessage msg ; 
     391           msg<<this->getId() ; 
     392           msg<<id ; 
     393           const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     394           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     395             event.push(*itRank,1,msg) ; 
     396           contextClientTmp->sendEvent(event) ; 
     397         } 
     398         else contextClientTmp->sendEvent(event) ; 
     399      } 
     400    } 
     401       
     402   } 
     403 
     404   template <class U, class V, class W> 
     405   void CGroupTemplate<U, V, W>::sendCreateChild(const string& id, CContextClient* client) 
     406   { 
     407 
     408    CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; 
     409    if (client->isServerLeader()) 
     410    { 
     411      CMessage msg ; 
     412      msg<<this->getId() ; 
     413      msg<<id ; 
     414      const std::list<int>& ranks = client->getRanksServerLeader(); 
     415      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     416       event.push(*itRank,1,msg) ; 
     417      client->sendEvent(event) ; 
     418    } 
     419    else client->sendEvent(event) ; 
     420   } 
     421 
     422 
     423   template <class U, class V, class W> 
     424   void CGroupTemplate<U, V, W>::sendCreateChildGroup(const string& id) 
     425   { 
    375426    CContext* context=CContext::getCurrent() ; 
    376      
    377     if (! context->hasServer ) 
     427    if (context->hasClient) 
    378428    { 
    379        CContextClient* client=context->client ; 
    380  
    381        CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ;    
    382        if (client->isServerLeader()) 
    383        { 
    384          CMessage msg ; 
    385          msg<<this->getId() ; 
    386          msg<<id ; 
    387          const std::list<int>& ranks = client->getRanksServerLeader(); 
    388          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    389            event.push(*itRank,1,msg) ; 
    390          client->sendEvent(event) ; 
    391        } 
    392        else client->sendEvent(event) ; 
     429      // Use correct context client to send message 
     430      // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     431      int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
     432      for (int i = 0; i < nbSrvPools; ++i) 
     433      { 
     434        CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; 
     435        CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ; 
     436        if (contextClientTmp->isServerLeader()) 
     437        { 
     438          CMessage msg ; 
     439          msg<<this->getId() ; 
     440          msg<<id ; 
     441          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     442          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     443            event.push(*itRank,1,msg) ; 
     444          contextClientTmp->sendEvent(event) ; 
     445        } 
     446        else contextClientTmp->sendEvent(event) ; 
     447      } 
    393448    } 
    394        
    395    } 
    396     
    397    template <class U, class V, class W> 
    398    void CGroupTemplate<U, V, W>::sendCreateChildGroup(const string& id) 
    399    { 
    400     CContext* context=CContext::getCurrent() ; 
    401     if (! context->hasServer ) 
    402     { 
    403        CContextClient* client=context->client ; 
    404  
    405        CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ;    
    406        if (client->isServerLeader()) 
    407        { 
    408          CMessage msg ; 
    409          msg<<this->getId() ; 
    410          msg<<id ; 
    411          const std::list<int>& ranks = client->getRanksServerLeader(); 
    412          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    413            event.push(*itRank,1,msg) ; 
    414          client->sendEvent(event) ; 
    415        } 
    416        else client->sendEvent(event) ; 
    417     } 
    418        
    419449   } 
    420450    
     
    422452   void CGroupTemplate<U, V, W>::recvCreateChild(CEventServer& event) 
    423453   { 
    424        
    425454      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    426455      string id; 
Note: See TracChangeset for help on using the changeset viewer.