Changeset 2304 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.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/scalar.cpp
r2274 r2304 420 420 } 421 421 422 void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex ,422 void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 423 423 shared_ptr<CScattererConnector> &scattererConnector, const string& scalarId) 424 424 { … … 428 428 this->sendAllAttributesToServer(client, serverScalarId) ; 429 429 430 auto scatteredElement = make_shared<CDistributedElement>(1,globalIndex ) ;430 auto scatteredElement = make_shared<CDistributedElement>(1,globalIndexOut) ; 431 431 scatteredElement->addFullView() ; 432 432 scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), … … 451 451 452 452 // phase 2 send the mask : data index + mask2D 453 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 454 CArray<bool,1> maskOut ; 455 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 456 workflowToFull->computeConnector() ; 457 maskIn=true ; 458 workflowToFull->transfer(maskIn,maskOut,false) ; 459 460 // phase 3 : prepare grid scatterer connector to send data from client to server 461 map<int,CArray<size_t,1>> workflowGlobalIndex ; 462 map<int,CArray<bool,1>> maskOut2 ; 463 scattererConnector->transfer(maskOut, maskOut2) ; 464 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 465 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 466 // create new workflow view for scattered element 467 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 468 clientToServerElement->addFullView() ; 469 CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 470 CMessage message2 ; 471 message2<<serverScalarId<<2 ; 472 clientToServerElement->sendToServer(client, event2, message2) ; 473 clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 474 context->getIntraComm(), client->getRemoteSize()) ; 475 clientToServerConnector_[client]->computeConnector() ; 476 477 clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 478 clientFromServerConnector_[client]->computeConnector() ; 479 453 { 454 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 455 CArray<bool,1> maskOut ; 456 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 457 workflowToFull->computeConnector() ; 458 maskIn=true ; 459 workflowToFull->transfer(maskIn,maskOut,false) ; 460 461 // prepare grid scatterer connector to send data from client to server 462 map<int,CArray<size_t,1>> workflowGlobalIndex ; 463 map<int,CArray<bool,1>> maskOut2 ; 464 scattererConnector->transfer(maskOut, maskOut2) ; 465 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 466 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 467 // create new workflow view for scattered element 468 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 469 clientToServerElement->addFullView() ; 470 CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 471 CMessage message2 ; 472 message2<<serverScalarId<<2 ; 473 clientToServerElement->sendToServer(client, event2, message2) ; 474 clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 475 context->getIntraComm(), client->getRemoteSize()) ; 476 clientToServerConnector_[client]->computeConnector() ; 477 } 478 479 //////////// 480 // phase 3 : compute connector to receive from server 481 //////////// 482 { 483 auto scatteredElement = make_shared<CDistributedElement>(1, globalIndexIn) ; 484 scatteredElement->addFullView() ; 485 auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 486 context->getIntraComm(), client->getRemoteSize()) ; 487 scattererConnector->computeConnector() ; 488 489 CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize()); 490 CArray<bool,1> maskOut ; 491 auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ; 492 workflowToFull->computeConnector() ; 493 maskIn=true ; 494 workflowToFull->transfer(maskIn,maskOut,false) ; 495 496 map<int,CArray<size_t,1>> workflowGlobalIndex ; 497 map<int,CArray<bool,1>> maskOut2 ; 498 scattererConnector->transfer(maskOut, maskOut2, false) ; 499 scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ; 500 scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ; 501 auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ; 502 clientToServerElement->addFullView() ; 503 CEventClient event3(getType(), EVENT_ID_SCALAR_DISTRIBUTION); 504 CMessage message3 ; 505 message3<<serverScalarId<<3 ; 506 clientToServerElement->sendToServer(client, event3, message3) ; 507 508 clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW)); 509 clientFromServerConnector_[client]->computeConnector() ; 510 } 480 511 } 481 512 … … 518 549 // gathererConnector_ = make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ; 519 550 // gathererConnector_ -> computeConnector() ; 551 } 552 else if (phasis==3) 553 { 554 elementTo_ = make_shared<CDistributedElement>(event) ; 555 elementTo_->addFullView() ; 520 556 } 521 557 } … … 532 568 serverFromClientConnector_->computeConnector() ; 533 569 534 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), element From_->getView(CElementView::FULL),570 serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL), 535 571 context->getIntraComm(), client->getRemoteSize()) ; 536 572 serverToClientConnector_->computeConnector() ;
Note: See TracChangeset
for help on using the changeset viewer.