Ignore:
Timestamp:
07/10/17 18:17:04 (7 years ago)
Author:
yushan
Message:

branch merged with trunk @1200

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_yushan_merged/src/node/axis.cpp

    r1134 r1205  
    367367    // We don't check if the mask is valid here, just if a mask has been defined at this point. 
    368368    isCompressible_ = !mask.isEmpty(); 
     369  } 
     370 
     371  bool CAxis::zoomByIndex() 
     372  { 
     373    return (!global_zoom_index.isEmpty() && (0 != global_zoom_index.numElements())); 
    369374  } 
    370375 
     
    463468    size_t nZoomCount = 0; 
    464469    size_t nbIndex = index.numElements(); 
    465     for (size_t idx = 0; idx < nbIndex; ++idx) 
     470 
     471    int end = (0 == n) ? begin : begin + n - 1; 
     472    int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 
     473    int minInd = min(index); 
     474    int maxInd = max(index); 
     475    for (size_t idx = 0; idx < zoom_size; ++idx) 
     476    { 
     477      size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 
     478      if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) ++nZoomCount; 
     479    } 
     480 
     481/*    for (size_t idx = 0; idx < nbIndex; ++idx) 
    466482    { 
    467483      size_t globalIndex = index(idx); 
    468484      if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nZoomCount; 
    469     } 
    470  
     485    }*/ 
     486     
    471487    CArray<size_t,1> globalIndexAxis(nbIndex); 
     488    for (size_t idx = 0; idx < nbIndex; ++idx) 
     489    {       
     490      globalIndexAxis(idx) = (size_t)index(idx); 
     491    } 
     492 
    472493    std::vector<size_t> globalAxisZoom(nZoomCount); 
    473494    nZoomCount = 0; 
    474     for (size_t idx = 0; idx < nbIndex; ++idx) 
    475     { 
    476       size_t globalIndex = index(idx); 
    477       globalIndexAxis(idx) = globalIndex; 
    478       if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) 
    479       { 
    480         globalAxisZoom[nZoomCount] = globalIndex; 
     495    for (size_t idx = 0; idx < zoom_size; ++idx) 
     496    { 
     497      size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 
     498      if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) 
     499      { 
     500        globalAxisZoom[nZoomCount] = globalZoomIndex; 
    481501        ++nZoomCount; 
    482502      } 
     
    598618    int zoom_end = global_zoom_begin + global_zoom_n - 1; 
    599619    int nb = 0; 
    600     for (size_t idx = 0; idx < n; ++idx) 
     620/*    for (size_t idx = 0; idx < n; ++idx) 
    601621    { 
    602622      size_t globalIndex = begin + idx; 
    603623      if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nb; 
     624    }*/ 
     625 
     626    int end = (0 == n) ? begin : begin + n - 1; 
     627    int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 
     628    for (size_t idx = 0; idx < zoom_size; ++idx) 
     629    { 
     630      size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 
     631      if (globalZoomIndex >= begin && globalZoomIndex <= end) ++nb; 
    604632    } 
    605633 
     
    622650    CArray<double,1> val(nb); 
    623651    nb = 0; 
    624     for (size_t idx = 0; idx < n; ++idx) 
     652/*    for (size_t idx = 0; idx < n; ++idx) 
    625653    { 
    626654      size_t globalIndex = begin + idx; 
     
    628656      { 
    629657        val(nb) = value(idx); 
     658        ++nb; 
     659      } 
     660    }*/ 
     661 
     662    for (size_t idx = 0; idx < zoom_size; ++idx) 
     663    { 
     664      size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 
     665      if (globalZoomIndex >= begin && globalZoomIndex <= end) 
     666      { 
     667        val(nb) = value(globalZoomIndex-begin); 
    630668        ++nb; 
    631669      } 
     
    933971        const int ni    = serverDimensionSizes[*itRank][orderPositionInGrid]; 
    934972        const int end   = begin + ni - 1; 
     973        const bool zoomIndex = zoomByIndex(); 
    935974 
    936975        msgs.push_back(CMessage()); 
     
    940979        msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 
    941980        msg << isCompressible_; 
     981        msg << zoomIndex; 
     982        if (zoomIndex) 
     983          msg << global_zoom_index.getValue(); 
    942984 
    943985        event.push(*itRank,1,msg); 
     
    9591001  { 
    9601002    int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_n_tmp; 
     1003    bool zoomIndex;     
     1004    CArray<int,1> zoom_index_recv; 
     1005    std::vector<int> zoom_index_tmp; 
     1006    std::vector<int>::iterator itZoomBeginSrv, itZoomEndSrv, itZoomSrv; 
    9611007 
    9621008    buffer >> ni_srv >> begin_srv >> end_srv; 
    9631009    buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 
    9641010    buffer >> isCompressible_; 
     1011    buffer >> zoomIndex; 
     1012    if (zoomIndex) 
     1013    { 
     1014      buffer >> zoom_index_recv; 
     1015      global_zoom_index.reference(zoom_index_recv); 
     1016      zoom_index_tmp.resize(global_zoom_index.numElements()); 
     1017      std::copy(global_zoom_index.begin(), global_zoom_index.end(), zoom_index_tmp.begin()); 
     1018      std::sort(zoom_index_tmp.begin(), zoom_index_tmp.end()); 
     1019      itZoomBeginSrv = std::lower_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), begin_srv); 
     1020      itZoomEndSrv   = std::upper_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), end_srv);       
     1021      int sz = std::distance(itZoomBeginSrv, itZoomEndSrv); 
     1022      zoom_index_srv.resize(sz); 
     1023      itZoomSrv = itZoomBeginSrv; 
     1024      for (int i = 0; i < sz; ++i, ++itZoomSrv) 
     1025      { 
     1026        zoom_index_srv(i) = *(itZoomSrv); 
     1027      } 
     1028    } 
     1029 
    9651030    global_zoom_begin = global_zoom_begin_tmp; 
    9661031    global_zoom_n  = global_zoom_n_tmp; 
    9671032    int global_zoom_end = global_zoom_begin + global_zoom_n - 1; 
    9681033 
    969     zoom_begin_srv = global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 
    970     zoom_end_srv   = global_zoom_end < end_srv ? global_zoom_end : end_srv ; 
     1034    zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 
     1035                                 : global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 
     1036    zoom_end_srv   = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomEndSrv) - 1  
     1037                                 : global_zoom_end < end_srv ? global_zoom_end : end_srv ; 
    9711038    zoom_size_srv  = zoom_end_srv - zoom_begin_srv + 1; 
     1039      
     1040    global_zoom_begin_srv = zoomIndex ? 0 : global_zoom_begin ; 
     1041    global_zoom_size_srv  = zoomIndex ? zoom_index_tmp.size() : global_zoom_n; 
    9721042 
    9731043    if (zoom_size_srv<=0) 
     
    9781048    if (n_glo == n) 
    9791049    { 
    980       zoom_begin_srv = global_zoom_begin; 
    981       zoom_end_srv   = global_zoom_end; //zoom_end; 
    982       zoom_size_srv  = zoom_end_srv - zoom_begin_srv + 1; 
     1050      zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 
     1051                                   : global_zoom_begin;       
     1052      zoom_size_srv  = zoomIndex ? zoom_index_tmp.size() 
     1053                                   : global_zoom_n; 
    9831054    } 
    9841055    if (hasValue) 
     
    10431114  } 
    10441115 
    1045  
    1046  
    10471116  void CAxis::duplicateTransformation(CAxis* src) 
    10481117  { 
Note: See TracChangeset for help on using the changeset viewer.