Changeset 631 for XIOS/trunk/src/node


Ignore:
Timestamp:
07/07/15 10:46:33 (9 years ago)
Author:
mhnguyen
Message:

Implementing zooming on a domain

+) Add algorithm to do zooming on a domain
+) Remove some redundant codes

Test
+) On Curie
+) test_complete and test_client are correct

Location:
XIOS/trunk/src/node
Files:
2 added
8 edited

Legend:

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

    r630 r631  
    104104//               << "The array \'value\' of axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] has a different size that the one defined by the \'size\' attribute"); 
    105105 
    106       if (0 == global_zoom_size) global_zoom_size = size; 
     106 
    107107      this->checkData(); 
    108108      this->checkMask(); 
    109 //      this->checkZoom(); 
     109      this->checkZoom(); 
    110110 
    111111      if (!bounds.isEmpty()) 
     
    138138   } 
    139139 
    140 //   void CAxis::checkZoom(void) 
    141 //   { 
    142 //      StdSize zoom_begin,zoom_end, zoom_size, axisSize; 
    143 // 
    144 //      zoom_begin = (this->zoom_begin.isEmpty()) ?  0 : this->zoom_begin.getValue() ; 
    145 //      zoom_size  = (this->zoom_size.isEmpty()) ?  size.getValue() : this->zoom_size.getValue() ; 
    146 //      zoom_end   = (this->zoom_end.isEmpty()) ?  (size.getValue() - 1) : this->zoom_end.getValue() ; 
    147 // 
    148 //      if (this->zoom_begin.isEmpty()) zoom_begin=zoom_end-zoom_size+1 ; 
    149 //      if (this->zoom_end.isEmpty()) zoom_end=zoom_begin+zoom_size-1 ; 
    150 //      if (this->zoom_size.isEmpty()) zoom_size=zoom_end-zoom_begin+1 ; 
    151 //      axisSize = size.getValue(); 
    152 // 
    153 //      if ( (zoom_begin < 0) || (zoom_begin > axisSize-1) || (zoom_end<0) || (zoom_end>axisSize-1) || (zoom_size<1) || (zoom_size>axisSize) || (zoom_begin>zoom_end)) 
    154 //        ERROR("CAxis::checkAttributes(void)", 
    155 //              << "One or more attributes among <zoom_begin>, <zoom_end>, <zoom_size> of axis [ id = '" << getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] are not well specified"); 
    156 // 
    157 //      this->zoom_begin.setValue(zoom_begin) ; 
    158 //      this->zoom_end.setValue(zoom_end) ; 
    159 //      this->zoom_size.setValue(zoom_size) ; 
    160 //   } 
     140   void CAxis::checkZoom(void) 
     141   { 
     142     if (0 == global_zoom_size) global_zoom_size = this->size.getValue(); 
     143   } 
    161144 
    162145   void CAxis::checkMask() 
  • XIOS/trunk/src/node/axis.hpp

    r630 r631  
    105105         void checkData(); 
    106106         void checkMask(); 
    107 //         void checkZoom(); 
     107         void checkZoom(); 
    108108         void checkTransformations(); 
    109109         void computeServerIndex(const std::vector<int>& globalDim, int orderPositionInGrid, 
  • XIOS/trunk/src/node/domain.cpp

    r622 r631  
    1616#include "server_distribution_description.hpp" 
    1717#include "client_server_mapping_distributed.hpp" 
     18#include "zoom_domain.hpp" 
    1819 
    1920namespace xios { 
     
    547548 
    548549      // compute client zoom indices 
    549  
    550       int zoom_iend=zoom_ibegin+zoom_ni-1 ; 
    551       zoom_ibegin_client = ibegin_client > zoom_ibegin ? ibegin_client : zoom_ibegin ; 
    552       zoom_iend_client = iend_client < zoom_iend ? iend_client : zoom_iend ; 
     550      // compute client zoom indices 
     551      if (0 == global_zoom_ni) global_zoom_ni = ni_glo; 
     552      if (0 == global_zoom_nj) global_zoom_nj = nj_glo; 
     553 
     554      int global_zoom_iend=global_zoom_ibegin+global_zoom_ni-1 ; 
     555      zoom_ibegin_client = ibegin_client > global_zoom_ibegin ? ibegin_client : global_zoom_ibegin ; 
     556      zoom_iend_client = iend_client < global_zoom_iend ? iend_client : global_zoom_iend ; 
    553557      zoom_ni_client=zoom_iend_client-zoom_ibegin_client+1 ; 
    554558      if (zoom_ni_client<0) zoom_ni_client=0 ; 
    555559 
    556560 
    557       int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
    558       zoom_jbegin_client = jbegin_client > zoom_jbegin ? jbegin_client : zoom_jbegin ; 
    559       zoom_jend_client = jend_client < zoom_jend ? jend_client : zoom_jend ; 
     561      int global_zoom_jend=global_zoom_jbegin+global_zoom_nj-1 ; 
     562      zoom_jbegin_client = jbegin_client > global_zoom_jbegin ? jbegin_client : global_zoom_jbegin ; 
     563      zoom_jend_client = jend_client < global_zoom_jend ? jend_client : global_zoom_jend ; 
    560564      zoom_nj_client=zoom_jend_client-zoom_jbegin_client+1 ; 
    561565      if (zoom_nj_client<0) zoom_nj_client=0 ; 
     566 
     567//      int zoom_iend=zoom_ibegin+zoom_ni-1 ; 
     568//      zoom_ibegin_client = ibegin_client > zoom_ibegin ? ibegin_client : zoom_ibegin ; 
     569//      zoom_iend_client = iend_client < zoom_iend ? iend_client : zoom_iend ; 
     570//      zoom_ni_client=zoom_iend_client-zoom_ibegin_client+1 ; 
     571//      if (zoom_ni_client<0) zoom_ni_client=0 ; 
     572// 
     573// 
     574//      int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
     575//      zoom_jbegin_client = jbegin_client > zoom_jbegin ? jbegin_client : zoom_jbegin ; 
     576//      zoom_jend_client = jend_client < zoom_jend ? jend_client : zoom_jend ; 
     577//      zoom_nj_client=zoom_jend_client-zoom_jbegin_client+1 ; 
     578//      if (zoom_nj_client<0) zoom_nj_client=0 ; 
    562579 
    563580   } 
     
    598615 
    599616      this->checkDomain(); 
    600       this->checkZoom(); 
     617//      this->checkZoom(); 
    601618      this->checkBounds(); 
    602619      this->checkArea(); 
     
    607624         this->checkDomainData(); 
    608625         this->checkCompression(); 
    609          this->completeLonLatClient(); 
    610          this->computeConnectedServer() ; 
     626//         this->completeLonLatClient(); 
     627//         this->computeConnectedServer() ; 
    611628      } 
    612629      else 
     
    625642     CContext* context=CContext::getCurrent() ; 
    626643 
     644     this->checkZoom(); 
    627645     if (this->isChecked) return; 
    628646     if (context->hasClient) 
    629647     { 
     648       this->computeConnectedServer(); 
     649       this->completeLonLatClient(); 
     650 
    630651       sendServerAttribut() ; 
    631652       sendLonLatArea() ; 
     
    703724        msg << this->getId() ; 
    704725        msg << ni_srv << ibegin_srv << iend_srv << nj_srv << jbegin_srv << jend_srv; 
     726        msg << global_zoom_ni << global_zoom_ibegin << global_zoom_nj << global_zoom_jbegin; 
    705727 
    706728        event.push(*itRank,1,msg); 
     
    722744 
    723745    int i,j,i_ind,j_ind ; 
    724     int zoom_iend=zoom_ibegin+zoom_ni-1 ; 
    725     int zoom_jend=zoom_jbegin+zoom_nj-1 ; 
     746    int zoom_iend=global_zoom_ibegin+global_zoom_ni-1 ; 
     747    int zoom_jend=global_zoom_jbegin+global_zoom_nj-1 ; 
    726748 
    727749    // Precompute number of index 
     
    733755        j_ind=jbegin+j_index(i,j) ; 
    734756 
    735         if (i_ind >= zoom_ibegin && i_ind <= zoom_iend && j_ind >= zoom_jbegin && j_ind <= zoom_jend) 
     757        if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend) 
    736758        { 
    737759          ++globalIndexCountZoom; 
     
    755777        globalIndexDomain(globalIndexCount) = globalIndex; 
    756778        ++globalIndexCount; 
    757         if (i_ind >= zoom_ibegin && i_ind <= zoom_iend && j_ind >= zoom_jbegin && j_ind <= zoom_jend) 
     779        if (i_ind >= global_zoom_ibegin && i_ind <= zoom_iend && j_ind >= global_zoom_jbegin && j_ind <= zoom_jend) 
    758780        { 
    759781          globalIndexDomainZoom(globalIndexCountZoom) = globalIndex; 
     
    976998  void CDomain::recvServerAttribut(CBufferIn& buffer) 
    977999  { 
    978     int zoom_iend = zoom_ibegin.getValue() + zoom_ni.getValue() - 1; 
    979     int zoom_jend = zoom_jbegin.getValue() + zoom_nj.getValue() - 1; 
    980  
    981     buffer >> ni_srv >> ibegin_srv >> iend_srv >> nj_srv >> jbegin_srv >> jend_srv; 
    982  
    983     zoom_ibegin_srv = zoom_ibegin.getValue() > ibegin_srv ? zoom_ibegin.getValue() : ibegin_srv ; 
     1000    buffer >> ni_srv >> ibegin_srv >> iend_srv >> nj_srv >> jbegin_srv >> jend_srv 
     1001           >> global_zoom_ni >> global_zoom_ibegin >> global_zoom_nj >> global_zoom_jbegin; 
     1002 
     1003    int zoom_iend = global_zoom_ibegin + global_zoom_ni - 1; 
     1004    int zoom_jend = global_zoom_jbegin + global_zoom_nj - 1; 
     1005 
     1006    zoom_ibegin_srv = global_zoom_ibegin > ibegin_srv ? global_zoom_ibegin : ibegin_srv ; 
    9841007    zoom_iend_srv = zoom_iend < iend_srv ? zoom_iend : iend_srv ; 
    9851008    zoom_ni_srv=zoom_iend_srv-zoom_ibegin_srv+1 ; 
    9861009 
    987     zoom_jbegin_srv = zoom_jbegin.getValue() > jbegin_srv ? zoom_jbegin.getValue() : jbegin_srv ; 
     1010    zoom_jbegin_srv = global_zoom_jbegin > jbegin_srv ? global_zoom_jbegin : jbegin_srv ; 
    9881011    zoom_jend_srv = zoom_jend < jend_srv ? zoom_jend : jend_srv ; 
    9891012    zoom_nj_srv=zoom_jend_srv-zoom_jbegin_srv+1 ; 
     
    11271150  } 
    11281151 
     1152  bool CDomain::hasTransformation() 
     1153  { 
     1154    return (!transformationMap_.empty()); 
     1155  } 
     1156 
     1157  void CDomain::setTransformations(const TransMapTypes& domTrans) 
     1158  { 
     1159    transformationMap_ = domTrans; 
     1160  } 
     1161 
     1162  CDomain::TransMapTypes CDomain::getAllTransformations(void) 
     1163  { 
     1164    return transformationMap_; 
     1165  } 
     1166 
     1167  /*! 
     1168    Check the validity of all transformations applied on domain 
     1169  This functions is called AFTER all inherited attributes are solved 
     1170  */ 
     1171  void CDomain::checkTransformations() 
     1172  { 
     1173    TransMapTypes::const_iterator itb = transformationMap_.begin(), it, 
     1174                                  ite = transformationMap_.end(); 
     1175    for (it = itb; it != ite; ++it) 
     1176    { 
     1177      (it->second)->checkValid(this); 
     1178    } 
     1179  } 
     1180 
     1181  void CDomain::solveInheritanceTransformation() 
     1182  { 
     1183    if (this->hasTransformation()) return; 
     1184 
     1185    std::vector<CDomain*> refDomain; 
     1186    CDomain* refer_sptr; 
     1187    CDomain* refer_ptr = this; 
     1188    while (refer_ptr->hasDirectDomainReference()) 
     1189    { 
     1190      refDomain.push_back(refer_ptr); 
     1191      refer_sptr = refer_ptr->getDirectDomainReference(); 
     1192      refer_ptr  = refer_sptr; 
     1193      if (refer_ptr->hasTransformation()) break; 
     1194    } 
     1195 
     1196    if (refer_ptr->hasTransformation()) 
     1197      for (int idx = 0; idx < refDomain.size(); ++idx) 
     1198        refDomain[idx]->setTransformations(refer_ptr->getAllTransformations()); 
     1199  } 
     1200 
     1201  void CDomain::parse(xml::CXMLNode & node) 
     1202  { 
     1203    SuperClass::parse(node); 
     1204 
     1205    if (node.goToChildElement()) 
     1206    { 
     1207      StdString zoomDomainDefRoot("zoom_domain_definition"); 
     1208      StdString zoom("zoom_domain"); 
     1209      do 
     1210      { 
     1211        if (node.getElementName() == zoom) { 
     1212          CZoomDomain* tmp = (CZoomDomainGroup::get(zoomDomainDefRoot))->createChild(); 
     1213          tmp->parse(node); 
     1214          transformationMap_.push_back(std::make_pair(TRANS_ZOOM_DOMAIN,tmp)); 
     1215        } 
     1216      } while (node.goToNextElement()) ; 
     1217      node.goToParentElement(); 
     1218    } 
     1219  } 
    11291220   //---------------------------------------------------------------- 
    11301221 
  • XIOS/trunk/src/node/domain.hpp

    r622 r631  
    1414#include "attribute_array.hpp" 
    1515#include "attribute_enum.hpp" 
     16#include "transformation.hpp" 
     17#include "transformation_enum.hpp" 
    1618 
    1719namespace xios { 
     
    4951         typedef CDomainAttributes RelAttributes; 
    5052         typedef CDomainGroup      RelGroup; 
     53         typedef CTransformation<CDomain>::TransformationMapTypes TransMapTypes; 
    5154 
    5255         /// Constructeurs /// 
     
    5962         void duplicateAttributes(CDomain* domain); 
    6063 
     64         virtual void parse(xml::CXMLNode & node); 
     65 
    6166         /// Vérifications /// 
    6267         void checkAttributes(void); 
     
    6570 
    6671         void sendCheckedAttributes(); 
     72 
     73         bool hasTransformation(); 
     74         void solveInheritanceTransformation(); 
     75         TransMapTypes getAllTransformations(); 
    6776 
    6877      private : 
     
    122131        CArray<int,2> mapConnectedServer ;  // (ni,nj) => mapped to connected server number, -1 if no server is target 
    123132 
    124  
     133        int global_zoom_ibegin, global_zoom_ni; 
     134        int global_zoom_jbegin, global_zoom_nj; 
    125135//        vector<int> ib_srv, ie_srv, in_srv ; 
    126136//        vector<int> jb_srv, je_srv, jn_srv ; 
     
    160170         bool hasBounds ; 
    161171         bool hasArea; 
     172      private: 
     173         void checkTransformations(); 
     174         void setTransformations(const TransMapTypes&); 
     175 
    162176       private : 
    163  
    164          /// Proriétés protégées /// 
    165177         bool isChecked; 
    166178         std::set<StdString> relFiles; 
     
    171183         std::vector<int> connectedServerRank_; 
    172184         bool isDistributed_; 
     185         TransMapTypes transformationMap_; 
    173186 
    174187         DECLARE_REF_FUNC(Domain,domain) 
  • XIOS/trunk/src/node/grid.cpp

    r624 r631  
    862862            nZoomBegin[indexMap[i]] = domainList[domainId]->zoom_ibegin_srv; 
    863863            nZoomSize[indexMap[i]]  = domainList[domainId]->zoom_ni_srv; 
    864             nZoomBeginGlobal[indexMap[i]] = domainList[domainId]->zoom_ibegin; 
     864            nZoomBeginGlobal[indexMap[i]] = domainList[domainId]->global_zoom_ibegin; 
    865865            nGlob[indexMap[i]] = domainList[domainId]->ni_glo; 
    866866 
    867867            nZoomBegin[indexMap[i] + 1] = domainList[domainId]->zoom_jbegin_srv; 
    868868            nZoomSize[indexMap[i] + 1] = domainList[domainId]->zoom_nj_srv; 
    869             nZoomBeginGlobal[indexMap[i] + 1] = domainList[domainId]->zoom_jbegin; 
     869            nZoomBeginGlobal[indexMap[i] + 1] = domainList[domainId]->global_zoom_jbegin; 
    870870            nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; 
    871871            ++domainId; 
     
    11241124        pDom->solveRefInheritance(apply); 
    11251125        pDom->solveBaseReference(); 
     1126        pDom->solveInheritanceTransformation(); 
    11261127        if ((!pDom->domain_ref.isEmpty()) && (pDom->name.isEmpty())) 
    11271128          pDom->name.setValue(pDom->getBaseDomainReference()->getId()); 
  • XIOS/trunk/src/node/node_enum.hpp

    r630 r631  
    2222         eInverseAxis, 
    2323         eZoomAxis, 
    24          eInterpolateAxis 
     24         eInterpolateAxis, 
     25         eZoomDomain 
    2526 
    2627      } ENodeType; 
  • XIOS/trunk/src/node/node_type.hpp

    r630 r631  
    1313#include "zoom_axis.hpp" 
    1414#include "interpolate_axis.hpp" 
     15#include "zoom_domain.hpp" 
    1516 
    1617#endif // __XIOS_NODE_TYPE__ 
  • XIOS/trunk/src/node/transformation_enum.hpp

    r630 r631  
    99        TRANS_ZOOM_AXIS, 
    1010        TRANS_INVERSE_AXIS, 
    11         TRANS_INTERPOLATE_AXIS 
     11        TRANS_INTERPOLATE_AXIS, 
     12        TRANS_ZOOM_DOMAIN 
    1213      } ETranformationType; 
    1314 
Note: See TracChangeset for help on using the changeset viewer.