Changeset 2507 for XIOS3/trunk/src/node/grid.cpp
- Timestamp:
- 06/01/23 10:58:08 (16 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/node/grid.cpp
r2397 r2507 29 29 #include "generic_algorithm_transformation.hpp" 30 30 #include "algo_types.hpp" 31 #include "redistribute_domain.hpp" 32 #include "redistribute_axis.hpp" 33 #include "redistribute_scalar.hpp" 34 31 35 32 36 #include <regex> … … 48 52 , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) 49 53 , gridSrc_(), order_() 50 , clients()51 54 { 52 55 setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); … … 66 69 , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) 67 70 , gridSrc_(), order_() 68 , clients()69 71 { 70 72 setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); … … 1468 1470 distributeGridToServer(client, false, fieldId) ; 1469 1471 } 1472 1473 CGrid* CGrid::redistributeGridToWriter(void) 1474 { 1475 CContext* context = CContext::getCurrent(); 1476 CGrid* redistributedGrid ; 1477 string redistributeGridId="redistributedToWriter__"+getId() ; 1478 if (has(redistributeGridId)) redistributedGrid = get(redistributeGridId) ; 1479 else 1480 { 1481 redistributedGrid = CGrid::create(redistributeGridId) ; 1482 // simple Distribution for now 1483 // distribute over the fisrt element except if it is a scalar 1484 auto& elements = getElements() ; 1485 int posDistributed = 0 ; 1486 for(auto& element : elements) 1487 { 1488 if (element.type==TYPE_DOMAIN) break ; 1489 else if (element.type==TYPE_AXIS) break ; 1490 else if (element.type==TYPE_SCALAR) posDistributed++ ; 1491 } 1492 if (posDistributed==elements.size()) posDistributed=0 ; // grid composed only of scalar 1493 1494 for(int i=0 ; i<elements.size() ; i++) 1495 { 1496 if (elements[i].type==TYPE_DOMAIN) 1497 { 1498 CDomain* domain = redistributedGrid->addDomain() ; 1499 domain->domain_ref=elements[i].domain->getId() ; 1500 domain->name = elements[i].domain->getDomainOutputName() ; 1501 CRedistributeDomain* redistributeDomain = dynamic_cast<CRedistributeDomain *>(domain->addTransformation(TRANS_REDISTRIBUTE_DOMAIN, "")) ; 1502 redistributeDomain->type.setValue(posDistributed==i ? CRedistributeDomain::type_attr::bands : CRedistributeDomain::type_attr::full); 1503 } 1504 else if (elements[i].type==TYPE_AXIS) 1505 { 1506 CAxis* axis = redistributedGrid->addAxis() ; 1507 axis->axis_ref=elements[i].axis->getId() ; 1508 axis->name = elements[i].axis->getAxisOutputName() ; 1509 CRedistributeAxis* redistributeAxis = dynamic_cast<CRedistributeAxis *>(axis->addTransformation(TRANS_REDISTRIBUTE_AXIS, "")) ; 1510 redistributeAxis->type.setValue(posDistributed==i ? CRedistributeAxis::type_attr::bands : CRedistributeAxis::type_attr::full); 1511 } 1512 else if (elements[i].type==TYPE_SCALAR) 1513 { 1514 CScalar* scalar = redistributedGrid->addScalar() ; 1515 scalar->scalar_ref=elements[i].scalar->getId() ; 1516 scalar->name = elements[i].scalar->getScalarOutputName() ; 1517 CRedistributeScalar* redistributeScalar = dynamic_cast<CRedistributeScalar *>(scalar->addTransformation(TRANS_REDISTRIBUTE_SCALAR, "")) ; 1518 redistributeScalar->type.setValue(posDistributed==i ? CRedistributeScalar::type_attr::root : CRedistributeScalar::type_attr::full); 1519 } 1520 } 1521 } 1522 1523 return redistributedGrid ; 1524 } 1525 1526 1470 1527 1471 1528 … … 2369 2426 TRY 2370 2427 { 2371 if (clientsSet.find(contextClient)==clientsSet.end())2372 {2373 clients.push_back(contextClient) ;2374 clientsSet.insert(contextClient);2375 }2376 2428 for (auto domain : getDomains()) domain->setContextClient(contextClient); 2377 2429 for (auto axis : getAxis()) axis->setContextClient(contextClient); 2378 2430 for (auto scalar : getScalars()) scalar->setContextClient(contextClient); 2379 2380 2431 } 2381 2432 CATCH_DUMP_ATTR … … 2473 2524 } 2474 2525 2526 void CGrid::computeRedistributeToWriterConnector(CGrid* gridSrc) 2527 { 2528 CContext* context = CContext::getCurrent(); 2529 2530 vector<shared_ptr<CLocalView>> srcViews ; 2531 vector<shared_ptr<CLocalView>> dstViews ; 2532 2533 for(auto& element : gridSrc->getElements()) 2534 { 2535 if (element.type==TYPE_DOMAIN) srcViews.push_back(element.domain->getLocalView(CElementView::WORKFLOW)) ; 2536 else if (element.type==TYPE_AXIS) srcViews.push_back(element.axis->getLocalView(CElementView::WORKFLOW)) ; 2537 else if (element.type==TYPE_SCALAR) srcViews.push_back(element.scalar->getLocalView(CElementView::WORKFLOW)) ; 2538 } 2539 2540 for(auto& element : this->getElements()) 2541 { 2542 if (element.type==TYPE_DOMAIN) dstViews.push_back(element.domain->getLocalView(CElementView::WORKFLOW)) ; 2543 else if (element.type==TYPE_AXIS) dstViews.push_back(element.axis->getLocalView(CElementView::WORKFLOW)) ; 2544 else if (element.type==TYPE_SCALAR) dstViews.push_back(element.scalar->getLocalView(CElementView::WORKFLOW)) ; 2545 } 2546 2547 redistributeToWriterConnector_ = make_shared<CGridTransformConnector>(srcViews, dstViews, context->getIntraComm()) ; 2548 redistributeToWriterConnector_ -> computeConnector(true) ; 2549 } 2475 2550 2476 2551 } // namespace xios
Note: See TracChangeset
for help on using the changeset viewer.