Ignore:
Timestamp:
03/28/23 16:42:11 (15 months ago)
Author:
ymipsl
Message:

First guess in supression of attached mode replaced by online reader and write filters

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/dev/XIOS_ATTACHED/src/node/grid.cpp

    r2397 r2482  
    2929#include "generic_algorithm_transformation.hpp" 
    3030#include "algo_types.hpp" 
     31#include "redistribute_domain.hpp" 
     32#include "redistribute_axis.hpp" 
     33#include "redistribute_scalar.hpp" 
     34 
    3135 
    3236#include <regex> 
     
    4852      , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) 
    4953      , gridSrc_(), order_() 
    50       , clients() 
    5154   { 
    5255     setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); 
     
    6669      , axisPositionInGrid_(), hasDomainAxisBaseRef_(false) 
    6770      , gridSrc_(), order_() 
    68       , clients() 
    6971   { 
    7072     setVirtualDomainGroup(CDomainGroup::create(getId() + "_virtual_domain_group")); 
     
    14681470    distributeGridToServer(client, false, fieldId) ; 
    14691471  } 
     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 
    14701527 
    14711528 
     
    23692426  TRY 
    23702427  { 
    2371     if (clientsSet.find(contextClient)==clientsSet.end()) 
    2372     { 
    2373       clients.push_back(contextClient) ; 
    2374       clientsSet.insert(contextClient); 
    2375     } 
    23762428    for (auto domain : getDomains()) domain->setContextClient(contextClient); 
    23772429    for (auto axis : getAxis()) axis->setContextClient(contextClient); 
    23782430    for (auto scalar : getScalars()) scalar->setContextClient(contextClient); 
    2379     
    23802431  } 
    23812432  CATCH_DUMP_ATTR 
     
    24732524  } 
    24742525 
     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  } 
    24752550   
    24762551} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.