Ignore:
Timestamp:
03/07/22 16:41:48 (3 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/axis.cpp

    r2291 r2304  
    927927  } 
    928928  
    929   void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex,  
     929  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn,  
    930930                                 shared_ptr<CScattererConnector> &scattererConnector, const string& axisId) 
    931931  { 
     
    935935    this->sendAllAttributesToServer(client, serverAxisId)  ; 
    936936 
    937     auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndex) ; 
     937    auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndexOut) ; 
    938938    scatteredElement->addFullView() ; 
    939939    scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     
    958958   
    959959    // phase 2 send the mask : data index + mask2D 
    960     CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
    961     CArray<bool,1> maskOut ; 
    962     auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
    963     workflowToFull->computeConnector() ; 
    964     maskIn=true ; 
    965     workflowToFull->transfer(maskIn,maskOut,false) ; 
    966  
    967     // phase 3 : prepare grid scatterer connector to send data from client to server 
    968     map<int,CArray<size_t,1>> workflowGlobalIndex ; 
    969     map<int,CArray<bool,1>> maskOut2 ;  
    970     scattererConnector->transfer(maskOut, maskOut2) ; 
    971     scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
    972     scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
    973     // create new workflow view for scattered element 
    974     auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
    975     clientToServerElement->addFullView() ; 
    976     CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION); 
    977     CMessage message2 ; 
    978     message2<<serverAxisId<<2 ;  
    979     clientToServerElement->sendToServer(client, event2, message2) ;  
    980     clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),  
     960    { 
     961      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     962      CArray<bool,1> maskOut ; 
     963      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     964      workflowToFull->computeConnector() ; 
     965      maskIn=true ; 
     966      workflowToFull->transfer(maskIn,maskOut,false) ; 
     967 
     968      //  prepare grid scatterer connector to send data from client to server 
     969      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     970      map<int,CArray<bool,1>> maskOut2 ;  
     971      scattererConnector->transfer(maskOut, maskOut2) ; 
     972      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     973      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     974      // create new workflow view for scattered element 
     975      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     976      clientToServerElement->addFullView() ; 
     977      CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION); 
     978      CMessage message2 ; 
     979      message2<<serverAxisId<<2 ;  
     980      clientToServerElement->sendToServer(client, event2, message2) ;  
     981      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),  
    981982                                                                        context->getIntraComm(), client->getRemoteSize()) ; 
    982     clientToServerConnector_[client]->computeConnector() ; 
    983  
    984     clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
    985     clientFromServerConnector_[client]->computeConnector() ; 
     983      clientToServerConnector_[client]->computeConnector() ; 
     984    } 
     985 
     986    //////////// 
     987    // phase 3 : compute connector to receive from server 
     988    //////////// 
     989    { 
     990      auto scatteredElement = make_shared<CDistributedElement>(n_glo, globalIndexIn) ; 
     991      scatteredElement->addFullView() ; 
     992      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL),  
     993                                                                 context->getIntraComm(), client->getRemoteSize()) ; 
     994      scattererConnector->computeConnector() ; 
     995      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 
     996      CArray<bool,1> maskOut ; 
     997      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 
     998      workflowToFull->computeConnector() ; 
     999      maskIn=true ; 
     1000      workflowToFull->transfer(maskIn,maskOut,false) ; 
     1001 
     1002      map<int,CArray<size_t,1>> workflowGlobalIndex ; 
     1003      map<int,CArray<bool,1>> maskOut2 ;  
     1004      scattererConnector->transfer(maskOut, maskOut2, false) ; 
     1005      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 
     1006      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 
     1007      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 
     1008      clientToServerElement->addFullView() ; 
     1009      CEventClient event3(getType(), EVENT_ID_AXIS_DISTRIBUTION); 
     1010      CMessage message3 ; 
     1011      message3<<serverAxisId<<3 ;  
     1012      clientToServerElement->sendToServer(client, event3, message3) ;  
     1013 
     1014      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     1015      clientFromServerConnector_[client]->computeConnector() ;       
     1016    } 
     1017 
     1018//    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 
     1019//    clientFromServerConnector_[client]->computeConnector() ; 
    9861020 
    9871021 
     
    10391073//      gathererConnector_ -> computeConnector() ; 
    10401074    } 
    1041    
     1075    else if (phasis==3) 
     1076    { 
     1077      elementTo_ = make_shared<CDistributedElement>(event) ; 
     1078      elementTo_->addFullView() ; 
     1079    } 
    10421080  } 
    10431081  CATCH 
     
    10531091    serverFromClientConnector_->computeConnector() ; 
    10541092       
    1055     serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL), 
     1093    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 
    10561094                                                                context->getIntraComm(), client->getRemoteSize()) ; 
    10571095    serverToClientConnector_->computeConnector() ; 
Note: See TracChangeset for help on using the changeset viewer.