Ignore:
Timestamp:
02/16/16 10:14:23 (8 years ago)
Author:
mhnguyen
Message:

Implementing grid destination clone in case of two grid source

+) Clone attributes of grid destination as well as its transformation
+) Clean some redundant codes

Test
+) All tests pass

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/grid.cpp

    r821 r823  
    3232      , transformations_(0), isTransformed_(false) 
    3333      , axisPositionInGrid_(), positionDimensionDistributed_(1), hasDomainAxisBaseRef_(false) 
     34      , gridSrc_() 
    3435   { 
    3536     setVirtualDomainGroup(); 
     
    4647      , transformations_(0), isTransformed_(false) 
    4748      , axisPositionInGrid_(), positionDimensionDistributed_(1), hasDomainAxisBaseRef_(false) 
     49      , gridSrc_() 
    4850   { 
    4951     setVirtualDomainGroup(); 
     
    551553   } 
    552554 
     555   CGrid* CGrid::cloneGrid(const StdString& idNewGrid, CGrid* gridSrc) 
     556   { 
     557     std::vector<CAxis*> axisSrcTmp = gridSrc->getAxis(), axisSrc; 
     558     std::vector<CDomain*> domainSrcTmp = gridSrc->getDomains(), domainSrc; 
     559     for (int idx = 0; idx < axisSrcTmp.size(); ++idx) 
     560     { 
     561       CAxis* axis = CAxis::createAxis(); 
     562       axis->duplicateAttributes(axisSrcTmp[idx]); 
     563       axis->duplicateTransformation(axisSrcTmp[idx]); 
     564       axis->solveRefInheritance(true); 
     565       axis->solveInheritanceTransformation(); 
     566       axisSrc.push_back(axis); 
     567     } 
     568 
     569     for (int idx = 0; idx < domainSrcTmp.size(); ++idx) 
     570     { 
     571       CDomain* domain = CDomain::createDomain(); 
     572       domain->duplicateAttributes(domainSrcTmp[idx]); 
     573       domain->duplicateTransformation(domainSrcTmp[idx]); 
     574       domain->solveRefInheritance(true); 
     575       domain->solveInheritanceTransformation(); 
     576       domainSrc.push_back(domain); 
     577     } 
     578 
     579      CGrid* grid = CGrid::createGrid(idNewGrid, domainSrc, axisSrc, gridSrc->axis_domain_order); 
     580 
     581      return grid; 
     582   } 
     583 
    553584   StdString CGrid::generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    554585                               const CArray<bool,1>& axisDomainOrder) 
     
    588619 
    589620      return id.str(); 
     621   } 
     622 
     623   StdString CGrid::generateId(const CGrid* gridSrc, const CGrid* gridDest) 
     624   { 
     625     StdString idSrc  = gridSrc->getId(); 
     626     StdString idDest = gridDest->getId(); 
     627 
     628     std::ostringstream id; 
     629     id << idSrc << "__" << idDest; 
     630 
     631     return id.str(); 
    590632   } 
    591633 
     
    12981340  } 
    12991341 
     1342  void CGrid::addTransGridSource(CGrid* gridSrc) 
     1343  { 
     1344    if (gridSrc_.end() == gridSrc_.find(gridSrc)) 
     1345      gridSrc_.insert(make_pair(gridSrc,make_pair(false,""))); 
     1346  } 
     1347 
     1348  std::map<CGrid*,std::pair<bool,StdString> >& CGrid::getTransGridSource() 
     1349  { 
     1350    return gridSrc_; 
     1351  } 
     1352 
    13001353  /*! 
    13011354     Complete all the necessary (and lacking) attributes of a grid 
Note: See TracChangeset for help on using the changeset viewer.