Changeset 2304 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
- Timestamp:
- 03/07/22 16:41:48 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
r2274 r2304 2003 2003 2004 2004 2005 void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndex ,2005 void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 2006 2006 shared_ptr<CScattererConnector> &scattererConnector, const string& domainId) 2007 2007 TRY … … 2012 2012 this->sendAllAttributesToServer(client, serverDomainId) ; 2013 2013 2014 auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndex ) ;2014 auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexOut) ; 2015 2015 scatteredElement->addFullView() ; 2016 2016 scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), … … 2036 2036 2037 2037 // phase 2 send the mask : data index + mask2D 2038 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 2039 CArray<bool,1> maskOut ; 2040 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 2041 workflowToFull->computeConnector() ; 2042 maskIn=true ; 2043 workflowToFull->transfer(maskIn,maskOut,false) ; 2044 2045 2046 // phase 3 : prepare grid scatterer connector to send data from client to server 2047 map<int,CArray<size_t,1>> workflowGlobalIndex ; 2048 map<int,CArray<bool,1>> maskOut2 ; 2049 scattererConnector->transfer(maskOut, maskOut2, false) ; 2050 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 2051 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 2052 // create new workflow view for scattered element 2053 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 2054 clientToServerElement->addFullView() ; 2055 CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2056 CMessage message2 ; 2057 message2<<serverDomainId<<2 ; 2058 clientToServerElement->sendToServer(client, event2, message2) ; 2059 clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 2038 { 2039 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 2040 CArray<bool,1> maskOut ; 2041 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 2042 workflowToFull->computeConnector() ; 2043 maskIn=true ; 2044 workflowToFull->transfer(maskIn,maskOut,false) ; 2045 2046 2047 // prepare grid scatterer connector to send data from client to server 2048 map<int,CArray<size_t,1>> workflowGlobalIndex ; 2049 map<int,CArray<bool,1>> maskOut2 ; 2050 scattererConnector->transfer(maskOut, maskOut2, false) ; 2051 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 2052 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 2053 // create new workflow view for scattered element 2054 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 2055 clientToServerElement->addFullView() ; 2056 CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2057 CMessage message2 ; 2058 message2<<serverDomainId<<2 ; 2059 clientToServerElement->sendToServer(client, event2, message2) ; 2060 clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 2060 2061 context->getIntraComm(), client->getRemoteSize()) ; 2061 2062 clientToServerConnector_[client]->computeConnector() ; 2062 2063 clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 2064 clientFromServerConnector_[client]->computeConnector() ; 2065 2063 } 2064 //////////// 2065 // phase 3 : compute connector to receive from server 2066 //////////// 2067 { 2068 auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexIn) ; 2069 scatteredElement->addFullView() ; 2070 auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 2071 context->getIntraComm(), client->getRemoteSize()) ; 2072 scattererConnector->computeConnector() ; 2073 2074 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 2075 CArray<bool,1> maskOut ; 2076 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 2077 workflowToFull->computeConnector() ; 2078 maskIn=true ; 2079 workflowToFull->transfer(maskIn,maskOut,false) ; 2080 2081 map<int,CArray<size_t,1>> workflowGlobalIndex ; 2082 map<int,CArray<bool,1>> maskOut2 ; 2083 scattererConnector->transfer(maskOut, maskOut2, false) ; 2084 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 2085 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 2086 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 2087 clientToServerElement->addFullView() ; 2088 CEventClient event3(getType(), EVENT_ID_DOMAIN_DISTRIBUTION); 2089 CMessage message3 ; 2090 message3<<serverDomainId<<3 ; 2091 clientToServerElement->sendToServer(client, event3, message3) ; 2092 2093 clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 2094 clientFromServerConnector_[client]->computeConnector() ; 2095 } 2066 2096 } 2067 2097 CATCH … … 2116 2146 else if (phasis==2) 2117 2147 { 2118 // delete gathererConnector_ ;2119 2148 elementFrom_ = make_shared<CDistributedElement>(event) ; 2120 2149 elementFrom_->addFullView() ; 2121 // gathererConnector_ = make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 2122 // gathererConnector_ -> computeConnector() ; 2150 } 2151 else if (phasis==3) 2152 { 2153 elementTo_ = make_shared<CDistributedElement>(event) ; 2154 elementTo_->addFullView() ; 2123 2155 } 2124 2156 } … … 2137 2169 serverFromClientConnector_->computeConnector() ; 2138 2170 2139 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), element From_->getView(CElementView::FULL),2171 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 2140 2172 context->getIntraComm(), client->getRemoteSize()) ; 2141 2173 serverToClientConnector_->computeConnector() ;
Note: See TracChangeset
for help on using the changeset viewer.