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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.