Changeset 1943 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
- Timestamp:
- 09/25/20 16:09:35 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
r1940 r1943 23 23 #include "grid_elements.hpp" 24 24 #include "grid_local_view.hpp" 25 #include "grid_mask_connector.hpp" 25 26 26 27 … … 275 276 TRY 276 277 { 278 setDomainList(); 277 279 std::vector<CDomain*> domList; 278 280 if (!domList_.empty()) … … 291 293 TRY 292 294 { 295 setAxisList(); 293 296 std::vector<CAxis*> aList; 294 297 if (!axisList_.empty()) … … 306 309 TRY 307 310 { 311 setScalarList() ; 308 312 std::vector<CScalar*> sList; 309 313 if (!scalarList_.empty()) … … 2597 2601 return true; 2598 2602 break; 2603 2604 case EVENT_ID_SEND_MASK : 2605 recvMask(event); 2606 return true; 2607 break; 2599 2608 default : 2600 ERROR("bool C Domain::dispatchEvent(CEventServer& event)",2609 ERROR("bool CGrid::dispatchEvent(CEventServer& event)", 2601 2610 << "Unknown Event"); 2602 2611 return false; … … 2671 2680 gridRemoteConnector.computeConnector() ; 2672 2681 2673 vector<CScattererConnector*> clientToServerConnectors ; 2674 vector<CGathererConnector*> clientFromServerConnectors ; 2682 vector<CScattererConnector*> scattererConnectors ; 2675 2683 for(int i=0 ; i<elements.size() ; i++) 2676 2684 { … … 2680 2688 sendAddDomain(domain->getId(),client) ; 2681 2689 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)) ; 2684 2691 } 2685 2692 else if (elements[i].type==TYPE_AXIS) … … 2688 2695 sendAddAxis(axis->getId(),client) ; 2689 2696 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)) ; 2693 2698 } 2694 2699 else if (elements[i].type==TYPE_SCALAR) … … 2697 2702 sendAddScalar(scalar->getId(),client) ; 2698 2703 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)) ; 2701 2740 } 2702 2741 } … … 2707 2746 2708 2747 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 } 2709 2797 } 2710 2798
Note: See TracChangeset
for help on using the changeset viewer.