Changeset 2304 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
- Timestamp:
- 03/07/22 16:41:48 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
r2291 r2304 927 927 } 928 928 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, 930 930 shared_ptr<CScattererConnector> &scattererConnector, const string& axisId) 931 931 { … … 935 935 this->sendAllAttributesToServer(client, serverAxisId) ; 936 936 937 auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndex ) ;937 auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndexOut) ; 938 938 scatteredElement->addFullView() ; 939 939 scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), … … 958 958 959 959 // 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), 981 982 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() ; 986 1020 987 1021 … … 1039 1073 // gathererConnector_ -> computeConnector() ; 1040 1074 } 1041 1075 else if (phasis==3) 1076 { 1077 elementTo_ = make_shared<CDistributedElement>(event) ; 1078 elementTo_->addFullView() ; 1079 } 1042 1080 } 1043 1081 CATCH … … 1053 1091 serverFromClientConnector_->computeConnector() ; 1054 1092 1055 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), element From_->getView(CElementView::FULL),1093 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 1056 1094 context->getIntraComm(), client->getRemoteSize()) ; 1057 1095 serverToClientConnector_->computeConnector() ;
Note: See TracChangeset
for help on using the changeset viewer.