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.hpp

    r865 r887  
    99#include "domain.hpp" 
    1010#include "axis.hpp" 
     11#include "scalar.hpp" 
    1112#include "array_new.hpp" 
    1213#include "attribute_array.hpp" 
     
    2425   class CDomainGroup; 
    2526   class CAxisGroup; 
     27   class CScalarGroup; 
    2628   class CGrid; 
    2729   class CDistributionClient; 
     
    5557         enum EEventId 
    5658         { 
    57            EVENT_ID_INDEX, EVENT_ID_ADD_DOMAIN, EVENT_ID_ADD_AXIS 
    58          }; 
    59  
    60          enum EElementType 
    61          { 
    62            GRID_ONLY_AXIS, GRID_ONLY_DOMAIN, GRID_AXIS_DOMAIN 
     59           EVENT_ID_INDEX, EVENT_ID_ADD_DOMAIN, EVENT_ID_ADD_AXIS, EVENT_ID_ADD_SCALAR 
    6360         }; 
    6461 
     
    122119         static CGrid* createGrid(CDomain* domain, CAxis* axis); 
    123120         static CGrid* createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    124                                   const CArray<bool,1>& axisDomainOrder = CArray<bool,1>()); 
     121                                  const CArray<int,1>& axisDomainOrder = CArray<int,1>()); 
     122//         static CGrid* createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
     123//                                  const CArray<int,1>& axisDomainOrder = CArray<int,1>()); 
    125124         static CGrid* createGrid(StdString id, const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    126                                   const CArray<bool,1>& axisDomainOrder = CArray<bool,1>()); 
     125                                  const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder = CArray<int,1>()); 
     126         static CGrid* createGrid(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
     127                                  const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder); 
     128//         static StdString generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
     129//                                     const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder = CArray<int,1>()); 
    127130         static StdString generateId(const std::vector<CDomain*>& domains, const std::vector<CAxis*>& axis, 
    128                                      const CArray<bool,1>& axisDomainOrder = CArray<bool,1>()); 
     131                                     const std::vector<CScalar*>& scalars, const CArray<int,1>& axisDomainOrder = CArray<int,1>()); 
    129132         static StdString generateId(const CGrid* gridSrc, const CGrid* gridDest); 
    130133         static CGrid* cloneGrid(const StdString& idNewGrid, CGrid* gridSrc); 
     
    144147         void solveDomainRef(bool checkAtt); 
    145148         void solveAxisRef(bool checkAtt); 
     149         void solveScalarRef(bool checkAtt); 
    146150         void solveDomainAxisRefInheritance(bool apply = true); 
    147151         void solveTransformations(); 
     
    150154         CDomain* addDomain(const std::string& id=StdString()); 
    151155         CAxis* addAxis(const std::string& id=StdString()); 
     156         CScalar* addScalar(const std::string& id=StdString()); 
    152157         void sendAddDomain(const std::string& id=""); 
    153158         void sendAddAxis(const std::string& id=""); 
     159         void sendAddScalar(const std::string& id=""); 
    154160         void sendAllDomains(); 
    155161         void sendAllAxis(); 
     162         void sendAllScalars(); 
    156163 
    157164         static void recvAddDomain(CEventServer& event); 
     
    159166         static void recvAddAxis(CEventServer& event); 
    160167         void recvAddAxis(CBufferIn& buffer); 
     168         static void recvAddScalar(CEventServer& event); 
     169         void recvAddScalar(CBufferIn& buffer); 
    161170 
    162171         static bool dispatchEvent(CEventServer& event); 
     
    172181         std::vector<StdString> getDomainList(); 
    173182         std::vector<StdString> getAxisList(); 
     183         std::vector<StdString> getScalarList(); 
    174184         std::vector<CDomain*> getDomains(); 
    175185         std::vector<CAxis*> getAxis(); 
     186         std::vector<CScalar*> getScalars(); 
    176187         std::vector<int> getAxisOrder(); 
    177188         std::vector<int> getGlobalDimension(); 
     
    218229         void computeGridGlobalDimension(const std::vector<CDomain*>& domains, 
    219230                                         const std::vector<CAxis*>& axis, 
    220                                          const CArray<bool,1>& axisDomainOrder); 
     231                                         const std::vector<CScalar*>& scalars, 
     232                                         const CArray<int,1>& axisDomainOrder); 
    221233 
    222234      private: 
     
    225237                          const std::vector<CArray<bool,1>* >& domainMasks, 
    226238                          const std::vector<CArray<bool,1>* >& axisMasks, 
    227                           const CArray<bool,1>& axisDomainOrder, 
     239                          const CArray<int,1>& axisDomainOrder, 
    228240                          bool createMask = false); 
    229241        template<int N> 
     
    234246        void setVirtualAxisGroup(CAxisGroup* newVAxisGroup); 
    235247        void setVirtualAxisGroup(); 
    236  
     248        void setVirtualScalarGroup(CScalarGroup* newVScalarGroup); 
     249        void setVirtualScalarGroup(); 
     250 
     251        void setDomainList(const std::vector<CDomain*> domains = std::vector<CDomain*>()); 
    237252        void setAxisList(const std::vector<CAxis*> axis = std::vector<CAxis*>()); 
    238         void setDomainList(const std::vector<CDomain*> domains = std::vector<CDomain*>()); 
    239  
     253        void setScalarList(const std::vector<CScalar*> scalars = std::vector<CScalar*>()); 
     254 
     255        CDomainGroup* getVirtualDomainGroup() const; 
    240256        CAxisGroup* getVirtualAxisGroup() const; 
    241         CDomainGroup* getVirtualDomainGroup() const; 
     257        CScalarGroup* getVirtualScalarGroup() const; 
    242258 
    243259        void checkAttributesAfterTransformation(); 
     
    246262                                   CClientServerMapping::GlobalIndexMap& globalIndexOnServer); 
    247263 
    248  
    249264      private: 
    250265        CDomainGroup* vDomainGroup_; 
    251266        CAxisGroup* vAxisGroup_; 
    252         std::vector<std::string> axisList_, domList_; 
    253         bool isAxisListSet, isDomListSet; 
     267        CScalarGroup* vScalarGroup_; 
     268        std::vector<std::string> axisList_, domList_, scalarList_; 
     269        bool isAxisListSet, isDomListSet, isScalarListSet; 
    254270 
    255271        CDistributionClient* clientDistribution_; 
     
    275291        CClientServerMapping::GlobalIndexMap globalIndexOnServer_; 
    276292            // List order of axis and domain in a grid, if there is a domain, it will take value 1 (true), axis 0 (false) 
    277         std::vector<bool> order_; 
     293        std::vector<int> order_; 
    278294   }; // class CGrid 
    279295 
     
    306322                             const std::vector<CArray<bool,1>* >& domainMasks, 
    307323                             const std::vector<CArray<bool,1>* >& axisMasks, 
    308                              const CArray<bool,1>& axisDomainOrder, 
     324                             const CArray<int,1>& axisDomainOrder, 
    309325                             bool createMask) 
    310326   { 
     
    320336    { 
    321337      indexMap[i] = idx; 
    322       if (true == axisDomainOrder(i)) { 
     338      if (2 == axisDomainOrder(i)) { 
    323339          eachDimSize[indexMap[i]]   = domainP[idxDomain]->ni; 
    324340          eachDimSize[indexMap[i]+1] = domainP[idxDomain]->nj; 
    325341          idx += 2; ++idxDomain; 
    326342      } 
    327       else { 
     343      else if (1 == axisDomainOrder(i)) { 
    328344        eachDimSize[indexMap[i]] = axisMasks[idxAxis]->numElements(); 
    329345        ++idx; ++idxAxis; 
    330346      } 
     347      else ++idx; 
    331348    } 
    332349 
     
    365382      for (int i = 0; i < numElement; ++i) 
    366383      { 
    367         if (axisDomainOrder(i)) 
     384        if (2 == axisDomainOrder(i)) 
    368385        { 
    369386          maskValue = maskValue && (*domainMasks[idxDomain])(idxLoop[indexMap[i]] + idxLoop[indexMap[i]+1] * eachDimSize[indexMap[i]]); 
    370387          ++idxDomain; 
    371388        } 
    372         else 
     389        else if (1 == axisDomainOrder(i)) 
    373390        { 
    374391          maskValue = maskValue && (*axisMasks[idxAxis])(idxLoop[indexMap[i]]); 
Note: See TracChangeset for help on using the changeset viewer.