Ignore:
Timestamp:
09/25/20 16:09:35 (4 years ago)
Author:
ymipsl
Message:

Solve issues for grid mask on server side.

YM

File:
1 edited

Legend:

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

    r1940 r1943  
    2323#include "grid_elements.hpp" 
    2424#include "grid_local_view.hpp" 
     25#include "grid_mask_connector.hpp" 
    2526 
    2627 
     
    275276  TRY 
    276277  { 
     278    setDomainList(); 
    277279    std::vector<CDomain*> domList; 
    278280    if (!domList_.empty()) 
     
    291293  TRY 
    292294  { 
     295    setAxisList(); 
    293296    std::vector<CAxis*> aList; 
    294297    if (!axisList_.empty()) 
     
    306309  TRY 
    307310  { 
     311    setScalarList() ; 
    308312    std::vector<CScalar*> sList; 
    309313    if (!scalarList_.empty()) 
     
    25972601           return true; 
    25982602           break; 
     2603 
     2604         case EVENT_ID_SEND_MASK : 
     2605           recvMask(event); 
     2606           return true; 
     2607           break; 
    25992608        default : 
    2600           ERROR("bool CDomain::dispatchEvent(CEventServer& event)", 
     2609          ERROR("bool CGrid::dispatchEvent(CEventServer& event)", 
    26012610                << "Unknown Event"); 
    26022611          return false; 
     
    26712680    gridRemoteConnector.computeConnector() ; 
    26722681     
    2673     vector<CScattererConnector*> clientToServerConnectors ; 
    2674     vector<CGathererConnector*>  clientFromServerConnectors ; 
     2682    vector<CScattererConnector*> scattererConnectors ; 
    26752683    for(int i=0 ; i<elements.size() ; i++) 
    26762684    { 
     
    26802688         sendAddDomain(domain->getId(),client) ; 
    26812689         domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 
    2682          clientToServerConnectors.push_back(domain->getClientToServerConnector(client)) ; 
    2683          clientFromServerConnectors.push_back(domain->getClientFromServerConnector(client)) ; 
     2690         scattererConnectors.push_back(domain->getClientToServerConnector(client)) ; 
    26842691      } 
    26852692      else if (elements[i].type==TYPE_AXIS) 
     
    26882695        sendAddAxis(axis->getId(),client) ; 
    26892696        axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 
    2690         clientToServerConnectors.push_back(axis->getClientToServerConnector(client)) ; 
    2691         clientFromServerConnectors.push_back(axis->getClientFromServerConnector(client)) ; 
    2692  
     2697        scattererConnectors.push_back(axis->getClientToServerConnector(client)) ; 
    26932698      } 
    26942699      else if (elements[i].type==TYPE_SCALAR) 
     
    26972702        sendAddScalar(scalar->getId(),client) ; 
    26982703        scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ; 
    2699         clientToServerConnectors.push_back(scalar->getClientToServerConnector(client)) ; 
    2700         clientFromServerConnectors.push_back(scalar->getClientFromServerConnector(client)) ; 
     2704        scattererConnectors.push_back(scalar->getClientToServerConnector(client)) ; 
     2705      } 
     2706    } 
     2707 
     2708    CGridScattererConnector gridScattererConnector(scattererConnectors) ; 
     2709    CGridLocalConnector* workflowToFull = getGridLocalElements()->getConnector(CElementView::WORKFLOW, CElementView::FULL) ; 
     2710    CArray<bool,1> maskIn(workflowToFull->getSrcSize()) ; 
     2711    CArray<bool,1> maskOut(workflowToFull->getDstSize()) ; 
     2712    maskIn = true ; 
     2713    workflowToFull->transfer(maskIn,maskOut,false) ; 
     2714 
     2715    CEventClient event(getType(), EVENT_ID_SEND_MASK); 
     2716    CMessage message ; 
     2717    message<<getId() ;  
     2718    gridScattererConnector.transfer(maskOut, client, event, message) ; 
     2719 
     2720 
     2721    vector<CScattererConnector*> clientToServerConnectors ; 
     2722    vector<CGathererConnector*>  clientFromServerConnectors ; 
     2723    for(auto& element : elements) 
     2724    { 
     2725      if (element.type==TYPE_DOMAIN)  
     2726      {  
     2727         clientToServerConnectors.push_back(element.domain->getClientToServerConnector(client)) ; 
     2728         clientFromServerConnectors.push_back(element.domain->getClientFromServerConnector(client)) ; 
     2729      } 
     2730      else if (element.type==TYPE_AXIS) 
     2731      { 
     2732        clientToServerConnectors.push_back(element.axis->getClientToServerConnector(client)) ; 
     2733        clientFromServerConnectors.push_back(element.axis->getClientFromServerConnector(client)) ; 
     2734 
     2735      } 
     2736      else if (element.type==TYPE_SCALAR) 
     2737      { 
     2738        clientToServerConnectors.push_back(element.scalar->getClientToServerConnector(client)) ; 
     2739        clientFromServerConnectors.push_back(element.scalar->getClientFromServerConnector(client)) ; 
    27012740      } 
    27022741    } 
     
    27072746 
    27082747 
     2748  } 
     2749 
     2750  void CGrid::recvMask(CEventServer& event) 
     2751  { 
     2752    string gridId; 
     2753    for (auto& subEvent : event.subEvents) (*subEvent.buffer) >> gridId  ; 
     2754    get(gridId)->receiveMask(event); 
     2755  } 
     2756   
     2757  void CGrid::receiveMask(CEventServer& event) 
     2758  { 
     2759    vector<CGathererConnector*> gathererConnectors ; 
     2760    vector<CLocalView*> fullViews ; 
     2761 
     2762    for(auto& element : getElements()) 
     2763    { 
     2764      if (element.type==TYPE_DOMAIN)  
     2765      { 
     2766        gathererConnectors.push_back(element.domain->getGathererConnector()); 
     2767        fullViews.push_back(element.domain->getLocalElement()->getView(CElementView::FULL)); 
     2768         
     2769      } 
     2770      else if (element.type==TYPE_AXIS) 
     2771      { 
     2772       gathererConnectors.push_back(element.axis->getGathererConnector()); 
     2773       fullViews.push_back(element.axis->getLocalElement()->getView(CElementView::FULL)); 
     2774      } 
     2775      else if (element.type==TYPE_SCALAR)  
     2776      { 
     2777        gathererConnectors.push_back(element.scalar->getGathererConnector()); 
     2778        fullViews.push_back(element.scalar->getLocalElement()->getView(CElementView::FULL)); 
     2779      } 
     2780    } 
     2781    CGridGathererConnector gridGathererConnector(gathererConnectors) ; 
     2782    CGridMaskConnector gridMaskConnector(fullViews) ; 
     2783 
     2784    CArray<bool,1> maskOut ; 
     2785    gridGathererConnector.transfer(event,maskOut,false) ; 
     2786    gridMaskConnector.computeConnector(maskOut) ; 
     2787 
     2788    CContextClient* client = event.getContextServer()->getAssociatedClient() ; 
     2789    int i=0 ; 
     2790    for(auto& element : getElements()) 
     2791    { 
     2792      if (element.type==TYPE_DOMAIN) element.domain->setServerMask(gridMaskConnector.getElementMask(i),client); 
     2793      else if (element.type==TYPE_AXIS) element.axis->setServerMask(gridMaskConnector.getElementMask(i),client); 
     2794      else if (element.type==TYPE_SCALAR) element.scalar->setServerMask(gridMaskConnector.getElementMask(i),client); 
     2795      i++ ; 
     2796    } 
    27092797  } 
    27102798 
Note: See TracChangeset for help on using the changeset viewer.