Ignore:
Timestamp:
07/05/16 15:59:02 (8 years ago)
Author:
mhnguyen
Message:

Adding a new type of element into grid: Scalar

+) Add a new node Scalar for xml
+) Make some change on writing scalar value
+) Reorganize some codes
+) Remove some redundant codes

Test
+) On Curie
+) All tests pass

File:
1 edited

Legend:

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

    r865 r887  
    2626      : CObjectTemplate<CGrid>(), CGridAttributes() 
    2727      , isChecked(false), isDomainAxisChecked(false) 
    28       , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false) 
     28      , vDomainGroup_(), domList_(), isDomListSet(false) 
     29      , vAxisGroup_(), axisList_(), isAxisListSet(false) 
     30      , vScalarGroup_(), scalarList_(), isScalarListSet(false) 
    2931      , clientDistribution_(0), isIndexSent(false) , serverDistribution_(0), clientServerMap_(0) 
    3032      , writtenDataSize_(0), numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 
     
    3638     setVirtualDomainGroup(); 
    3739     setVirtualAxisGroup(); 
     40     setVirtualScalarGroup(); 
    3841   } 
    3942 
     
    4144      : CObjectTemplate<CGrid>(id), CGridAttributes() 
    4245      , isChecked(false), isDomainAxisChecked(false) 
    43       , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false) 
     46      , vDomainGroup_(), domList_(), isDomListSet(false) 
     47      , vAxisGroup_(), axisList_(), isAxisListSet(false) 
     48      , vScalarGroup_(), scalarList_(), isScalarListSet(false) 
    4449      , clientDistribution_(0), isIndexSent(false) , serverDistribution_(0), clientServerMap_(0) 
    4550      , writtenDataSize_(0), numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 
     
    5156     setVirtualDomainGroup(); 
    5257     setVirtualAxisGroup(); 
     58     setVirtualScalarGroup(); 
    5359   } 
    5460 
     
    201207     if (this->isDomainAxisChecked) return; 
    202208 
     209     this->solveScalarRef(areAttributesChecked); 
    203210     this->solveAxisRef(areAttributesChecked); 
    204211     this->solveDomainRef(areAttributesChecked); 
    205      computeGridGlobalDimension(getDomains(), getAxis(), axis_domain_order); 
     212     computeGridGlobalDimension(getDomains(), getAxis(), getScalars(), axis_domain_order); 
    206213     this->isDomainAxisChecked = areAttributesChecked; 
    207214   } 
     
    210217   { 
    211218     if (this->hasDomainAxisBaseRef_) return; 
     219     // Account for the scalar attributes 
     220     std::vector<CScalar*> scalarList = getScalars(); 
     221     for (size_t i = 0; i < scalarList.size(); ++i) 
     222     { 
     223       scalarList[i]->setAttributesReference(); 
     224     } 
     225 
    212226     // Account for the axis attributes 
    213227     std::vector<CAxis*> axisList = getAxis(); 
     
    223237       domList[i]->setAttributesReference(); 
    224238     } 
     239 
    225240     this->hasDomainAxisBaseRef_ = true; 
    226241   } 
     
    383398        for (int i = 0; i < axis_domain_order.numElements(); ++i) 
    384399        { 
    385           if (false == axis_domain_order(i)) 
     400          int elementDimension = axis_domain_order(i); 
     401          if (1 == elementDimension) 
    386402          { 
    387403            axisPositionInGrid_.push_back(idx); 
    388404            ++idx; 
    389405          } 
    390           else idx += 2; 
     406          else if (2 == elementDimension) idx += 2; 
    391407        } 
    392408 
     
    397413          else 
    398414            axisListP[i]->checkAttributesOnClient(); 
    399           ++idx; 
     415        } 
     416      } 
     417   } 
     418 
     419   //--------------------------------------------------------------- 
     420 
     421   void CGrid::solveScalarRef(bool sendAtt) 
     422   { 
     423      setScalarList(); 
     424      std::vector<CScalar*> scalarListP = this->getScalars(); 
     425      if (!scalarListP.empty()) 
     426      { 
     427        for (int i = 0; i < scalarListP.size(); ++i) 
     428        { 
     429          /*Nothing to do for now */ 
     430//          if (sendAtt) scalarListP[i]->sendCheckedAttributes(); 
     431//          else scalarListP[i]->checkAttributesOnClient(); 
    400432        } 
    401433      } 
     
    502534     int nbElement = axis_domain_order.numElements(); 
    503535     std::vector<CArray<size_t,1> > globalIndexElement(nbElement); 
    504      int domainIdx = 0, axisIdx = 0; 
     536     int domainIdx = 0, axisIdx = 0, scalarIdx = 0; 
    505537     std::vector<size_t> elementNGlobal(nbElement); 
    506538     elementNGlobal[0] = 1; 
     
    511543       size_t elementSize; 
    512544       size_t elementGlobalSize = 1; 
    513        if (axis_domain_order(idx)) 
     545       if (2 == axis_domain_order(idx)) 
    514546       { 
    515547         elementSize = domList[domainIdx]->i_index.numElements(); 
     
    522554         ++domainIdx; 
    523555       } 
    524        else 
     556       else if (1 == axis_domain_order(idx)) 
    525557       { 
    526558         elementSize = axisList[axisIdx]->index.numElements(); 
     
    532564         elementGlobalSize = axisList[axisIdx]->n_glo.getValue(); 
    533565         ++axisIdx; 
     566       } 
     567       else 
     568       { 
     569         globalIndexElement[idx].resize(1); 
     570         globalIndexElement[idx](0) = 0; 
     571         elementGlobalSize = 1; 
    534572       } 
    535573       globalSize *= elementGlobalSize; 
     
    657695 
    658696   CGrid* CGrid::createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    659                             const CArray<bool,1>& axisDomainOrder) 
    660    { 
    661       return createGrid(generateId(domains, axis, axisDomainOrder), domains, axis, axisDomainOrder); 
    662    } 
     697                            const CArray<int,1>& axisDomainOrder) 
     698   { 
     699     std::vector<CScalar*> vecScalar; 
     700     return createGrid(generateId(domains, axis, vecScalar, axisDomainOrder), domains, axis, vecScalar, axisDomainOrder); 
     701   } 
     702 
     703   CGrid* CGrid::createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
     704                            const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder) 
     705   { 
     706     return createGrid(generateId(domains, axis, scalars, axisDomainOrder), domains, axis, scalars, axisDomainOrder); 
     707   } 
     708 
     709//   CGrid* CGrid::createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
     710//                            const CArray<int,1>& axisDomainOrder) 
     711//   { 
     712//      if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size())) 
     713//        ERROR("CGrid* CGrid::createGrid(...)", 
     714//              << "The size of axisDomainOrder (" << axisDomainOrder.numElements() 
     715//              << ") is not coherent with the number of elements (" << domains.size() + axis.size() <<")."); 
     716// 
     717//      CGrid* grid = CGridGroup::get("grid_definition")->createChild(id); 
     718//      grid->setDomainList(domains); 
     719//      grid->setAxisList(axis); 
     720// 
     721//      // By default, domains are always the first elements of a grid 
     722//      if (0 == axisDomainOrder.numElements()) 
     723//      { 
     724//        int size = domains.size() + axis.size(); 
     725//        grid->axis_domain_order.resize(size); 
     726//        for (int i = 0; i < size; ++i) 
     727//        { 
     728//          if (i < domains.size()) grid->axis_domain_order(i) = 2; 
     729//          else grid->axis_domain_order(i) = 1; 
     730//        } 
     731//      } 
     732//      else 
     733//      { 
     734//        grid->axis_domain_order.resize(axisDomainOrder.numElements()); 
     735//        grid->axis_domain_order = axisDomainOrder; 
     736//      } 
     737// 
     738//      grid->solveDomainAxisRefInheritance(true); 
     739// 
     740//      return grid; 
     741//   } 
    663742 
    664743   CGrid* CGrid::createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    665                             const CArray<bool,1>& axisDomainOrder) 
    666    { 
    667       if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size())) 
     744                            const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder) 
     745   { 
     746      if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) 
    668747        ERROR("CGrid* CGrid::createGrid(...)", 
    669748              << "The size of axisDomainOrder (" << axisDomainOrder.numElements() 
     
    673752      grid->setDomainList(domains); 
    674753      grid->setAxisList(axis); 
     754      grid->setScalarList(scalars); 
    675755 
    676756      // By default, domains are always the first elements of a grid 
    677757      if (0 == axisDomainOrder.numElements()) 
    678758      { 
    679         int size = domains.size() + axis.size(); 
     759        int size = domains.size() + axis.size() + scalars.size(); 
     760        int nb = 0; 
    680761        grid->axis_domain_order.resize(size); 
    681762        for (int i = 0; i < size; ++i) 
    682763        { 
    683           if (i < domains.size()) grid->axis_domain_order(i) = true; 
    684           else grid->axis_domain_order(i) = false; 
     764          if (i < domains.size()) { 
     765            grid->axis_domain_order(i) = 2; 
     766 
     767          } 
     768          else if ((scalars.size() < (size-nb)) < size) { 
     769            grid->axis_domain_order(i) = 1; 
     770          } 
     771          else 
     772            grid->axis_domain_order(i) = 0; 
     773          ++nb; 
    685774        } 
    686775      } 
     
    698787   CGrid* CGrid::cloneGrid(const StdString& idNewGrid, CGrid* gridSrc) 
    699788   { 
     789     std::vector<CDomain*> domainSrcTmp = gridSrc->getDomains(), domainSrc; 
    700790     std::vector<CAxis*> axisSrcTmp = gridSrc->getAxis(), axisSrc; 
    701      std::vector<CDomain*> domainSrcTmp = gridSrc->getDomains(), domainSrc; 
     791     std::vector<CScalar*> scalarSrcTmp = gridSrc->getScalars(), scalarSrc; 
     792 
     793     for (int idx = 0; idx < domainSrcTmp.size(); ++idx) 
     794     { 
     795       CDomain* domain = CDomain::createDomain(); 
     796       domain->duplicateAttributes(domainSrcTmp[idx]); 
     797       domain->duplicateTransformation(domainSrcTmp[idx]); 
     798       domain->solveRefInheritance(true); 
     799       domain->solveInheritanceTransformation(); 
     800       domainSrc.push_back(domain); 
     801     } 
     802 
    702803     for (int idx = 0; idx < axisSrcTmp.size(); ++idx) 
    703804     { 
     
    710811     } 
    711812 
    712      for (int idx = 0; idx < domainSrcTmp.size(); ++idx) 
     813     for (int idx = 0; idx < scalarSrcTmp.size(); ++idx) 
    713814     { 
    714        CDomain* domain = CDomain::createDomain(); 
    715        domain->duplicateAttributes(domainSrcTmp[idx]); 
    716        domain->duplicateTransformation(domainSrcTmp[idx]); 
    717        domain->solveRefInheritance(true); 
    718        domain->solveInheritanceTransformation(); 
    719        domainSrc.push_back(domain); 
    720      } 
    721  
    722       CGrid* grid = CGrid::createGrid(idNewGrid, domainSrc, axisSrc, gridSrc->axis_domain_order); 
     815       CScalar* scalar = CScalar::createScalar(); 
     816       scalar->duplicateAttributes(scalarSrcTmp[idx]); 
     817       scalar->duplicateTransformation(scalarSrcTmp[idx]); 
     818       scalar->solveRefInheritance(true); 
     819       scalar->solveInheritanceTransformation(); 
     820       scalarSrc.push_back(scalar); 
     821     } 
     822 
     823      CGrid* grid = CGrid::createGrid(idNewGrid, domainSrc, axisSrc, scalarSrc, gridSrc->axis_domain_order); 
    723824 
    724825      return grid; 
     
    726827 
    727828   StdString CGrid::generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    728                                const CArray<bool,1>& axisDomainOrder) 
    729    { 
    730       if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size())) 
     829                               const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder) 
     830   { 
     831      if (axisDomainOrder.numElements() > 0 && axisDomainOrder.numElements() != (domains.size() + axis.size() + scalars.size())) 
    731832        ERROR("CGrid* CGrid::generateId(...)", 
    732833              << "The size of axisDomainOrder (" << axisDomainOrder.numElements() 
     
    735836      std::ostringstream id; 
    736837 
    737       if (domains.empty() && axis.empty()) 
    738         id << "__scalar_grid__"; 
    739       else 
     838      if (domains.empty() && axis.empty() && !scalars.empty()) 
     839        id << "__scalar_"; 
     840 
     841      if (0 != (domains.size() + axis.size() + scalars.size())) 
    740842      { 
    741843        id << "__grid"; 
     
    745847          for (size_t i = 0; i < domains.size(); ++i) id << "_" << domains[i]->getId(); 
    746848          for (size_t i = 0; i < axis.size(); ++i) id << "_" << axis[i]->getId(); 
     849          for (size_t i = 0; i < scalars.size(); ++i) id << "_" << scalars[i]->getId(); 
    747850        } 
    748851        else 
    749852        { 
    750           size_t iDomain = 0, iAxis = 0; 
     853          size_t iDomain = 0, iAxis = 0, iScalar = 0; 
    751854          for (size_t i = 0; i < axisDomainOrder.numElements(); ++i) 
    752855          { 
    753             if (axisDomainOrder(i)) 
     856            if (2 == axisDomainOrder(i)) 
    754857              id << "_" << domains[iDomain++]->getId(); 
     858            else if (1 == axisDomainOrder(i)) 
     859              id << "_" << axis[iAxis++]->getId(); 
    755860            else 
    756               id << "_" << axis[iAxis++]->getId(); 
     861              id << "_" << scalars[iScalar++]->getId(); 
    757862          } 
    758863        } 
     
    785890   { 
    786891     return this->vAxisGroup_; 
     892   } 
     893 
     894   CScalarGroup* CGrid::getVirtualScalarGroup() const 
     895   { 
     896     return this->vScalarGroup_; 
    787897   } 
    788898 
     
    10371147  void CGrid::computeGridGlobalDimension(const std::vector<CDomain*>& domains, 
    10381148                                         const std::vector<CAxis*>& axis, 
    1039                                          const CArray<bool,1>& axisDomainOrder) 
    1040   { 
    1041     globalDim_.resize(domains.size()*2+axis.size()); 
    1042     int idx = 0, idxDomain = 0, idxAxis = 0; 
     1149                                         const std::vector<CScalar*>& scalars, 
     1150                                         const CArray<int,1>& axisDomainOrder) 
     1151  { 
     1152    globalDim_.resize(domains.size()*2+axis.size()+scalars.size()); 
     1153    int idx = 0, idxDomain = 0, idxAxis = 0, idxScalar = 0; 
    10431154    for (int i = 0; i < axisDomainOrder.numElements(); ++i) 
    10441155    { 
    1045       if (axisDomainOrder(i)) 
     1156      if (2 == axisDomainOrder(i)) 
    10461157      { 
    10471158        if (!(domains[idxDomain]->type.isEmpty()) && (domains[idxDomain]->type==CDomain::type_attr::unstructured)) 
     
    10601171        idx += 2; 
    10611172      } 
    1062       else 
     1173      else if (1 == axisDomainOrder(i)) 
    10631174      { 
    10641175        globalDim_[idx] = axis[idxAxis]->n_glo.getValue(); 
    10651176        ++idxAxis; 
     1177        ++idx; 
     1178      } 
     1179      else 
     1180      { 
     1181        globalDim_[idx] = 1; 
     1182        ++idxScalar; 
    10661183        ++idx; 
    10671184      } 
     
    11791296        { 
    11801297          indexMap[i] = idx; 
    1181           if (true == axis_domain_order(i)) 
     1298          if (2 == axis_domain_order(i)) 
    11821299          { 
    11831300            ++ssize; 
     
    11881305        } 
    11891306 
    1190         int axisId = 0, domainId = 0; 
     1307        int axisId = 0, domainId = 0, scalarId = 0; 
    11911308        std::vector<CDomain*> domainList = getDomains(); 
    11921309        std::vector<CAxis*> axisList = getAxis(); 
     
    11941311        for (int i = 0; i < numElement; ++i) 
    11951312        { 
    1196           if (axis_domain_order(i)) 
     1313          if (2 == axis_domain_order(i)) //domain 
    11971314          { 
    11981315            nZoomBegin[indexMap[i]] = domainList[domainId]->zoom_ibegin_srv; 
     
    12071324            ++domainId; 
    12081325          } 
    1209           else 
     1326          else if (1 == axis_domain_order(i)) // axis 
    12101327          { 
    12111328            nZoomBegin[indexMap[i]] = axisList[axisId]->zoom_begin_srv; 
     
    12141331            nGlob[indexMap[i]] = axisList[axisId]->n_glo; 
    12151332            ++axisId; 
     1333          } 
     1334          else // scalar 
     1335          { 
     1336            nZoomBegin[indexMap[i]] = 0; 
     1337            nZoomSize[indexMap[i]]  = 1; 
     1338            nZoomBeginGlobal[indexMap[i]] = 0; 
     1339            nGlob[indexMap[i]] = 1; 
     1340            ++scalarId; 
    12161341          } 
    12171342        } 
     
    12811406           return true; 
    12821407           break; 
     1408 
     1409         case EVENT_ID_ADD_SCALAR : 
     1410           recvAddScalar(event); 
     1411           return true; 
     1412           break; 
    12831413        default : 
    12841414          ERROR("bool CDomain::dispatchEvent(CEventServer& event)", 
     
    12931423   CDomain* CGrid::addDomain(const std::string& id) 
    12941424   { 
    1295      order_.push_back(true); 
     1425     order_.push_back(2); 
    12961426     axis_domain_order.resize(order_.size()); 
    12971427     for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; 
     
    13011431   CAxis* CGrid::addAxis(const std::string& id) 
    13021432   { 
    1303      order_.push_back(false); 
     1433     order_.push_back(1); 
    13041434     axis_domain_order.resize(order_.size()); 
    13051435     for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; 
     
    13071437   } 
    13081438 
     1439   CScalar* CGrid::addScalar(const std::string& id) 
     1440   { 
     1441     order_.push_back(0); 
     1442     axis_domain_order.resize(order_.size()); 
     1443     for (int idx = 0; idx < order_.size(); ++idx) axis_domain_order(idx)=order_[idx]; 
     1444     return vScalarGroup_->createChild(id); 
     1445   } 
     1446 
    13091447   //! Change virtual field group to a new one 
    13101448   void CGrid::setVirtualDomainGroup(CDomainGroup* newVDomainGroup) 
     
    13171455   { 
    13181456      this->vAxisGroup_ = newVAxisGroup; 
     1457   } 
     1458 
     1459   //! Change virtual variable group to new one 
     1460   void CGrid::setVirtualScalarGroup(CScalarGroup* newVScalarGroup) 
     1461   { 
     1462      this->vScalarGroup_ = newVScalarGroup; 
    13191463   } 
    13201464 
     
    13301474   { 
    13311475      this->setVirtualAxisGroup(CAxisGroup::create()); 
     1476   } 
     1477 
     1478   //! Create virtual variable group, which is done normally on initializing file 
     1479   void CGrid::setVirtualScalarGroup(void) 
     1480   { 
     1481      this->setVirtualScalarGroup(CScalarGroup::create()); 
    13321482   } 
    13331483 
     
    13871537 
    13881538   /*! 
     1539   \brief Send a message to create a scalar on server side 
     1540   \param[in] id String identity of scalar that will be created on server 
     1541   */ 
     1542   void CGrid::sendAddScalar(const string& id) 
     1543   { 
     1544    CContext* context=CContext::getCurrent(); 
     1545 
     1546    if (! context->hasServer ) 
     1547    { 
     1548       CContextClient* client=context->client; 
     1549 
     1550       CEventClient event(this->getType(),EVENT_ID_ADD_SCALAR); 
     1551       if (client->isServerLeader()) 
     1552       { 
     1553         CMessage msg; 
     1554         msg<<this->getId(); 
     1555         msg<<id; 
     1556         const std::list<int>& ranks = client->getRanksServerLeader(); 
     1557         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1558           event.push(*itRank,1,msg); 
     1559         client->sendEvent(event); 
     1560       } 
     1561       else client->sendEvent(event); 
     1562    } 
     1563   } 
     1564 
     1565   /*! 
    13891566   \brief Receive a message annoucing the creation of a domain on server side 
    13901567   \param[in] event Received event 
     
    14321609      buffer >> id; 
    14331610      addAxis(id); 
     1611   } 
     1612 
     1613   /*! 
     1614   \brief Receive a message annoucing the creation of an scalar on server side 
     1615   \param[in] event Received event 
     1616   */ 
     1617   void CGrid::recvAddScalar(CEventServer& event) 
     1618   { 
     1619 
     1620      CBufferIn* buffer = event.subEvents.begin()->buffer; 
     1621      string id; 
     1622      *buffer >> id; 
     1623      get(id)->recvAddScalar(*buffer); 
     1624   } 
     1625 
     1626   /*! 
     1627   \brief Receive a message annoucing the creation of an scalar on server side 
     1628   \param[in] buffer Buffer containing message 
     1629   */ 
     1630   void CGrid::recvAddScalar(CBufferIn& buffer) 
     1631   { 
     1632      string id; 
     1633      buffer >> id; 
     1634      addScalar(id); 
    14341635   } 
    14351636 
     
    14681669      } 
    14691670    } 
     1671 
     1672    setScalarList(); 
     1673    it = scalarList_.begin(); itE = scalarList_.end(); 
     1674    for (; it != itE; ++it) 
     1675    { 
     1676      CScalar* pScalar = CScalar::get(*it); 
     1677      if (context->hasClient) 
     1678      { 
     1679        pScalar->solveRefInheritance(apply); 
     1680        pScalar->solveInheritanceTransformation(); 
     1681      } 
     1682    } 
    14701683  } 
    14711684 
     
    15131726      else 
    15141727      { 
    1515         int ssize = axis_domain_order.numElements(); 
    1516         for (int i = 0; i < ssize; ++i) 
    1517           if (axis_domain_order(i) != (transformGridSrc->axis_domain_order)(i)) 
    1518             ERROR("CGrid::completeGrid(CGrid* transformGridSrc)", 
    1519                   << "Grids " << this->getId() << " and " << transformGridSrc->getId() 
    1520                   << " don't have elements in the same order"); 
     1728//        int ssize = axis_domain_order.numElements(); 
     1729//        for (int i = 0; i < ssize; ++i) 
     1730//          if (axis_domain_order(i) != (transformGridSrc->axis_domain_order)(i)) 
     1731//            ERROR("CGrid::completeGrid(CGrid* transformGridSrc)", 
     1732//                  << "Grids " << this->getId() << " and " << transformGridSrc->getId() 
     1733//                  << " don't have elements in the same order"); 
    15211734      } 
    15221735    } 
     
    15431756    else 
    15441757    { 
    1545       int ssize = axis_domain_order.numElements(); 
    1546       for (int i = 0; i < ssize; ++i) 
    1547         if (axis_domain_order(i) != (transformGridSrc->axis_domain_order)(i)) 
    1548           ERROR("CGrid::transformGrid(CGrid* transformGridSrc)", 
    1549                 << "Grids " << this->getId() << " and " << transformGridSrc->getId() 
    1550                 << " don't have elements in the same order"); 
     1758//      int ssize = axis_domain_order.numElements(); 
     1759//      for (int i = 0; i < ssize; ++i) 
     1760//        if (axis_domain_order(i) != (transformGridSrc->axis_domain_order)(i)) 
     1761//          ERROR("CGrid::transformGrid(CGrid* transformGridSrc)", 
     1762//                << "Grids " << this->getId() << " and " << transformGridSrc->getId() 
     1763//                << " don't have elements in the same order"); 
    15511764    } 
    15521765 
     
    15921805 
    15931806  /*! 
     1807  \brief Get the list of  axis pointers 
     1808  \return list of axis pointers 
     1809  */ 
     1810  std::vector<CScalar*> CGrid::getScalars() 
     1811  { 
     1812    std::vector<CScalar*> sList; 
     1813    if (!scalarList_.empty()) 
     1814      for (int i =0; i < scalarList_.size(); ++i) sList.push_back(CScalar::get(scalarList_[i])); 
     1815 
     1816    return sList; 
     1817  } 
     1818 
     1819  /*! 
    15941820  \brief Set domain(s) of a grid from a list 
    15951821  \param[in] domains list of domains 
     
    16471873 
    16481874  /*! 
     1875  \brief Set scalar(s) of a grid from a list 
     1876  \param[in] scalars list of scalars 
     1877  */ 
     1878  void CGrid::setScalarList(const std::vector<CScalar*> scalars) 
     1879  { 
     1880    if (isScalarListSet) return; 
     1881    std::vector<CScalar*> sList = this->getVirtualScalarGroup()->getAllChildren(); 
     1882    if (!scalars.empty() && sList.empty()) 
     1883    { 
     1884      for (int i = 0; i < scalars.size(); ++i) 
     1885        this->getVirtualScalarGroup()->addChild(scalars[i]); 
     1886      sList = this->getVirtualScalarGroup()->getAllChildren(); 
     1887    } 
     1888 
     1889    if (!sList.empty()) 
     1890    { 
     1891      int sizeScalar = sList.size(); 
     1892      scalarList_.resize(sizeScalar); 
     1893      for (int i = 0; i < sizeScalar; ++i) 
     1894      { 
     1895        scalarList_[i] = sList[i]->getId(); 
     1896      } 
     1897      isScalarListSet = true; 
     1898    } 
     1899  } 
     1900 
     1901  /*! 
    16491902  \brief Get list of id of domains 
    16501903  \return id list of domains 
     
    16661919  } 
    16671920 
     1921  /*! 
     1922  \brief Get list of id of scalar 
     1923  \return id list of scalar 
     1924  */ 
     1925  std::vector<StdString> CGrid::getScalarList() 
     1926  { 
     1927    setScalarList(); 
     1928    return scalarList_; 
     1929  } 
     1930 
     1931  /*! 
     1932    Send all attributes of domains from client to server 
     1933  */ 
    16681934  void CGrid::sendAllDomains() 
    16691935  { 
     
    16771943  } 
    16781944 
     1945  /*! 
     1946    Send all attributes of axis from client to server 
     1947  */ 
    16791948  void CGrid::sendAllAxis() 
    16801949  { 
     
    16891958  } 
    16901959 
     1960  /*! 
     1961    Send all attributes of scalars from client to server 
     1962  */ 
     1963  void CGrid::sendAllScalars() 
     1964  { 
     1965    std::vector<CScalar*> sList = this->getVirtualScalarGroup()->getAllChildren(); 
     1966    int sSize = sList.size(); 
     1967 
     1968    for (int i = 0; i < sSize; ++i) 
     1969    { 
     1970      sendAddScalar(sList[i]->getId()); 
     1971      sList[i]->sendAllAttributesToServer(); 
     1972    } 
     1973  } 
     1974 
     1975  /*! 
     1976    Parse a grid, for now, it contains only domain, axis and scalar 
     1977  */ 
    16911978  void CGrid::parse(xml::CXMLNode& node) 
    16921979  { 
     
    16971984      StdString domainName("domain"); 
    16981985      StdString axisName("axis"); 
     1986      StdString scalarName("scalar"); 
    16991987      do 
    17001988      { 
    17011989        if (node.getElementName() == domainName) { 
    1702           order_.push_back(true); 
     1990          order_.push_back(2); 
    17031991          this->getVirtualDomainGroup()->parseChild(node); 
    17041992        } 
    17051993        if (node.getElementName() == axisName) { 
    1706           order_.push_back(false); 
     1994          order_.push_back(1); 
    17071995          this->getVirtualAxisGroup()->parseChild(node); 
     1996        } 
     1997        if (node.getElementName() == scalarName) { 
     1998          order_.push_back(0); 
     1999          this->getVirtualScalarGroup()->parseChild(node); 
    17082000        } 
    17092001      } while (node.goToNextElement()); 
     
    17232015    setDomainList(); 
    17242016    setAxisList(); 
     2017    setScalarList(); 
    17252018   } 
    17262019} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.