Ignore:
Timestamp:
03/07/22 16:41:48 (2 years ago)
Author:
ymipsl
Message:

Fix problem in remote connector for read variable : supress redondance optimisation on remote connector in read case.
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp

    r2274 r2304  
    20032003  
    20042004 
    2005   void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndex, 
     2005  void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 
    20062006                                   shared_ptr<CScattererConnector> &scattererConnector, const string& domainId) 
    20072007  TRY 
     
    20122012    this->sendAllAttributesToServer(client, serverDomainId)  ; 
    20132013 
    2014     auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndex) ; 
     2014    auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexOut) ; 
    20152015    scatteredElement->addFullView() ; 
    20162016    scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     
    20362036   
    20372037    // phase 2 send the mask : data index + mask2D 
    2038     CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
    2039     CArray<bool,1> maskOut ; 
    2040     auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
    2041     workflowToFull->computeConnector() ; 
    2042     maskIn=true ; 
    2043     workflowToFull->transfer(maskIn,maskOut,false) ; 
    2044  
    2045  
    2046     // phase 3 : prepare grid scatterer connector to send data from client to server 
    2047     map<int,CArray<size_t,1>> workflowGlobalIndex ; 
    2048     map<int,CArray<bool,1>> maskOut2 ;  
    2049     scattererConnector->transfer(maskOut, maskOut2, false) ; 
    2050     scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
    2051     scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
    2052     // create new workflow view for scattered element 
    2053     auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
    2054     clientToServerElement->addFullView() ; 
    2055     CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 
    2056     CMessage message2 ; 
    2057     message2<<serverDomainId<<2 ;  
    2058     clientToServerElement->sendToServer(client, event2, message2) ;  
    2059     clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
     2038    { 
     2039      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     2040      CArray<bool,1> maskOut ; 
     2041      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     2042      workflowToFull->computeConnector() ; 
     2043      maskIn=true ; 
     2044      workflowToFull->transfer(maskIn,maskOut,false) ; 
     2045 
     2046 
     2047      // prepare grid scatterer connector to send data from client to server 
     2048      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     2049      map<int,CArray<bool,1>> maskOut2 ;  
     2050      scattererConnector->transfer(maskOut, maskOut2, false) ; 
     2051      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     2052      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     2053      // create new workflow view for scattered element 
     2054      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     2055      clientToServerElement->addFullView() ; 
     2056      CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 
     2057      CMessage message2 ; 
     2058      message2<<serverDomainId<<2 ;  
     2059      clientToServerElement->sendToServer(client, event2, message2) ;  
     2060      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
    20602061                                                                        context->getIntraComm(), client->getRemoteSize()) ; 
    20612062    clientToServerConnector_[client]->computeConnector() ; 
    2062  
    2063     clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
    2064     clientFromServerConnector_[client]->computeConnector() ; 
    2065  
     2063    } 
     2064    //////////// 
     2065    // phase 3 : compute connector to receive from server 
     2066    //////////// 
     2067    { 
     2068      auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexIn) ; 
     2069      scatteredElement->addFullView() ; 
     2070      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     2071                                                                 context->getIntraComm(), client->getRemoteSize()) ; 
     2072      scattererConnector->computeConnector() ; 
     2073 
     2074      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     2075      CArray<bool,1> maskOut ; 
     2076      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     2077      workflowToFull->computeConnector() ; 
     2078      maskIn=true ; 
     2079      workflowToFull->transfer(maskIn,maskOut,false) ; 
     2080 
     2081      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     2082      map<int,CArray<bool,1>> maskOut2 ;  
     2083      scattererConnector->transfer(maskOut, maskOut2, false) ; 
     2084      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     2085      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     2086      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     2087      clientToServerElement->addFullView() ; 
     2088      CEventClient event3(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 
     2089      CMessage message3 ; 
     2090      message3<<serverDomainId<<3 ;  
     2091      clientToServerElement->sendToServer(client, event3, message3) ;  
     2092 
     2093      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     2094      clientFromServerConnector_[client]->computeConnector() ;       
     2095    } 
    20662096  } 
    20672097  CATCH 
     
    21162146    else if (phasis==2) 
    21172147    { 
    2118 //      delete gathererConnector_ ; 
    21192148      elementFrom_ = make_shared<CDistributedElement>(event) ; 
    21202149      elementFrom_->addFullView() ; 
    2121 //      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    2122 //      gathererConnector_ -> computeConnector() ; 
     2150    } 
     2151    else if (phasis==3) 
     2152    { 
     2153      elementTo_ = make_shared<CDistributedElement>(event) ; 
     2154      elementTo_->addFullView() ; 
    21232155    } 
    21242156  } 
     
    21372169    serverFromClientConnector_->computeConnector() ; 
    21382170       
    2139     serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
     2171    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 
    21402172                                                                context->getIntraComm(), client->getRemoteSize()) ; 
    21412173    serverToClientConnector_->computeConnector() ; 
Note: See TracChangeset for help on using the changeset viewer.