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/scalar.cpp

    r2274 r2304  
    420420  } 
    421421  
    422   void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex,  
     422  void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut,  std::map<int, CArray<size_t,1>>& globalIndexIn,  
    423423                                   shared_ptr<CScattererConnector> &scattererConnector, const string& scalarId) 
    424424  { 
     
    428428    this->sendAllAttributesToServer(client, serverScalarId)  ; 
    429429 
    430     auto scatteredElement = make_shared<CDistributedElement>(1,globalIndex) ; 
     430    auto scatteredElement = make_shared<CDistributedElement>(1,globalIndexOut) ; 
    431431    scatteredElement->addFullView() ; 
    432432    scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     
    451451   
    452452    // phase 2 send the mask : data index + mask2D 
    453     CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
    454     CArray<bool,1> maskOut ; 
    455     auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
    456     workflowToFull->computeConnector() ; 
    457     maskIn=true ; 
    458     workflowToFull->transfer(maskIn,maskOut,false) ; 
    459  
    460     // phase 3 : prepare grid scatterer connector to send data from client to server 
    461     map<int,CArray<size_t,1>> workflowGlobalIndex ; 
    462     map<int,CArray<bool,1>> maskOut2 ;  
    463     scattererConnector->transfer(maskOut, maskOut2) ; 
    464     scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
    465     scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
    466     // create new workflow view for scattered element 
    467     auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
    468     clientToServerElement->addFullView() ; 
    469     CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 
    470     CMessage message2 ; 
    471     message2<<serverScalarId<<2 ;  
    472     clientToServerElement->sendToServer(client, event2, message2) ;  
    473     clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
    474                                                                         context->getIntraComm(), client->getRemoteSize()) ; 
    475     clientToServerConnector_[client]->computeConnector() ; 
    476  
    477     clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
    478     clientFromServerConnector_[client]->computeConnector() ; 
    479  
     453    { 
     454      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     455      CArray<bool,1> maskOut ; 
     456      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     457      workflowToFull->computeConnector() ; 
     458      maskIn=true ; 
     459      workflowToFull->transfer(maskIn,maskOut,false) ; 
     460 
     461      // prepare grid scatterer connector to send data from client to server 
     462      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     463      map<int,CArray<bool,1>> maskOut2 ;  
     464      scattererConnector->transfer(maskOut, maskOut2) ; 
     465      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     466      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     467      // create new workflow view for scattered element 
     468      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     469      clientToServerElement->addFullView() ; 
     470      CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 
     471      CMessage message2 ; 
     472      message2<<serverScalarId<<2 ;  
     473      clientToServerElement->sendToServer(client, event2, message2) ;  
     474      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
     475                                                                          context->getIntraComm(), client->getRemoteSize()) ; 
     476      clientToServerConnector_[client]->computeConnector() ; 
     477    } 
     478 
     479    //////////// 
     480    // phase 3 : compute connector to receive from server 
     481    //////////// 
     482    { 
     483      auto scatteredElement = make_shared<CDistributedElement>(1, globalIndexIn) ; 
     484      scatteredElement->addFullView() ; 
     485      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     486                                                                 context->getIntraComm(), client->getRemoteSize()) ; 
     487      scattererConnector->computeConnector() ; 
     488  
     489      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     490      CArray<bool,1> maskOut ; 
     491      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     492      workflowToFull->computeConnector() ; 
     493      maskIn=true ; 
     494      workflowToFull->transfer(maskIn,maskOut,false) ; 
     495 
     496      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     497      map<int,CArray<bool,1>> maskOut2 ;  
     498      scattererConnector->transfer(maskOut, maskOut2, false) ; 
     499      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     500      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     501      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     502      clientToServerElement->addFullView() ; 
     503      CEventClient event3(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 
     504      CMessage message3 ; 
     505      message3<<serverScalarId<<3 ;  
     506      clientToServerElement->sendToServer(client, event3, message3) ;  
     507 
     508      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     509      clientFromServerConnector_[client]->computeConnector() ;       
     510    } 
    480511  } 
    481512   
     
    518549//      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 
    519550//      gathererConnector_ -> computeConnector() ; 
     551    } 
     552    else if (phasis==3) 
     553    { 
     554      elementTo_ = make_shared<CDistributedElement>(event) ; 
     555      elementTo_->addFullView() ; 
    520556    } 
    521557  } 
     
    532568    serverFromClientConnector_->computeConnector() ; 
    533569       
    534     serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
     570    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 
    535571                                                                context->getIntraComm(), client->getRemoteSize()) ; 
    536572    serverToClientConnector_->computeConnector() ; 
Note: See TracChangeset for help on using the changeset viewer.