Ignore:
Timestamp:
06/22/15 13:36:31 (9 years ago)
Author:
mhnguyen
Message:

Implementing transformation algorithm: zoom axis (local commit)

+) Implement zoom axis: zoomed points are points not masked
+) Correct some minor bugs

Test
+) Ok with normal cases: zoom in the last of transformation list
+) There is still a bug in case of zoom then inverse

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/distribution_client.cpp

    r621 r623  
    1313CDistributionClient::CDistributionClient(int rank, int dims, CArray<size_t,1>* globalIndex) 
    1414   : CDistribution(rank, dims, globalIndex), 
    15    localDataIndex_(0), axisDomainOrder_(), 
     15   globalDataSendToServer_(0), localDataIndex_(0), localDataIndexSendToServer_(0), localMaskIndex_(0), 
     16   axisDomainOrder_(), 
    1617   nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_(), 
    1718   dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_(), 
    1819   gridMask_(), localDomainIndex_(), localAxisIndex_(), indexMap_(), indexDomainData_(), indexAxisData_(), 
    19    isDataDistributed_(true), axisNum_(0), domainNum_(0), localDataIndexSendToServer_(0), nIndexDomain_(), nIndexAxis_() 
     20   isDataDistributed_(true), axisNum_(0), domainNum_(0), nIndexDomain_(), nIndexAxis_() 
    2021{ 
    2122} 
     
    2324CDistributionClient::CDistributionClient(int rank, CGrid* grid) 
    2425   : CDistribution(rank, 0, 0), 
    25    localDataIndex_(0), axisDomainOrder_(), 
     26   globalDataSendToServer_(0), localDataIndex_(0), localDataIndexSendToServer_(0), localMaskIndex_(0), 
     27   axisDomainOrder_(), 
    2628   nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_(), 
    2729   dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_(), 
    2830   gridMask_(), localDomainIndex_(), localAxisIndex_(), indexMap_(), indexDomainData_(), indexAxisData_(), 
    29    isDataDistributed_(true), axisNum_(0), domainNum_(0), localDataIndexSendToServer_(0), nIndexDomain_(), nIndexAxis_() 
     31   isDataDistributed_(true), axisNum_(0), domainNum_(0), nIndexDomain_(), nIndexAxis_() 
    3032{ 
    3133  readDistributionInfo(grid); 
     
    3941  if (0 != localDataIndex_) delete localDataIndex_; 
    4042  if (0 != localDataIndexSendToServer_) delete localDataIndexSendToServer_; 
     43  if (0 != localMaskIndex_) delete localMaskIndex_; 
    4144} 
    4245 
     
    145148    axisMasks_[i].resize(axisList[i]->mask.numElements()); 
    146149    axisMasks_[i] = axisList[i]->mask; 
     150    std::cout << "axisMask " << axisMasks_[i] << std::endl; 
    147151  } 
    148152 
     
    197201      nBeginLocal_.at(indexMap_[idx]+1) = 0; 
    198202      nBeginGlobal_.at(indexMap_[idx]+1) = domList[domIndex]->jbegin; 
    199       nZoomBegin_.at((indexMap_[idx]+1)) = domList[domIndex]->zoom_jbegin; 
    200       nZoomEnd_.at((indexMap_[idx]+1))   = domList[domIndex]->zoom_jbegin + domList[domIndex]->zoom_nj-1; 
     203//      nZoomBegin_.at((indexMap_[idx]+1)) = domList[domIndex]->zoom_jbegin; 
     204//      nZoomEnd_.at((indexMap_[idx]+1))   = domList[domIndex]->zoom_jbegin + domList[domIndex]->zoom_nj-1; 
    201205 
    202206      dataBegin_.at(indexMap_[idx]+1) = (2 == domList[domIndex]->data_dim) ? domList[domIndex]->data_jbegin.getValue() : -1; 
     
    209213      nBeginLocal_.at(indexMap_[idx]) = 0; 
    210214      nBeginGlobal_.at(indexMap_[idx]) = domList[domIndex]->ibegin; 
    211       nZoomBegin_.at((indexMap_[idx])) = domList[domIndex]->zoom_ibegin; 
    212       nZoomEnd_.at((indexMap_[idx]))   = domList[domIndex]->zoom_ibegin + domList[domIndex]->zoom_ni-1; 
     215//      nZoomBegin_.at((indexMap_[idx])) = domList[domIndex]->zoom_ibegin; 
     216//      nZoomEnd_.at((indexMap_[idx]))   = domList[domIndex]->zoom_ibegin + domList[domIndex]->zoom_ni-1; 
    213217 
    214218      dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); 
     
    229233      nBeginLocal_.at(indexMap_[idx]) = 0; 
    230234      nBeginGlobal_.at(indexMap_[idx]) = axisList[axisIndex]->ibegin.getValue(); 
    231       nZoomBegin_.at((indexMap_[idx])) = axisList[axisIndex]->zoom_begin; 
    232       nZoomEnd_.at((indexMap_[idx])) = axisList[axisIndex]->zoom_begin + axisList[axisIndex]->zoom_size-1; 
     235      nZoomBegin_.at((indexMap_[idx])) = axisList[axisIndex]->global_zoom_begin; 
     236      nZoomEnd_.at((indexMap_[idx])) = axisList[axisIndex]->global_zoom_begin + axisList[axisIndex]->global_zoom_size-1; 
    233237 
    234238      dataBegin_.at(indexMap_[idx]) = axisList[axisIndex]->data_begin.getValue(); 
     
    393397 
    394398  //   Compute size of the global index on client 
    395   std::vector<int> idxLoop(numElement_,0); 
    396   std::vector<int> currentIndex(this->dims_); 
     399  std::vector<StdSize> idxLoop(numElement_,0); 
     400  std::vector<StdSize> currentIndex(this->dims_,0); 
    397401  int innerLoopSize = eachElementSize[0]; 
    398402  size_t idx = 0, indexLocalDataOnClientCount = 0, indexSend2ServerCount = 0; 
     
    445449      else currentIndex[0]   = localAxisIndex_[idxAxis][i]; 
    446450 
    447       int gridMaskIndex = currentIndex[0]; 
     451      StdSize gridMaskIndex = currentIndex[0]; 
    448452      int mulDimMask = 1; 
    449453      for (int k = 1; k < this->dims_; ++k) 
     
    473477  localDataIndex_ = new CArray<int,1>(indexLocalDataOnClientCount); 
    474478  localDataIndexSendToServer_ = new CArray<int,1>(indexSend2ServerCount); 
     479  localMaskIndex_ = new CArray<int,1>(indexSend2ServerCount); 
    475480 
    476481  // We need to loop with data index 
     
    481486  int countLocalData = 0; 
    482487  std::vector<int> correctOuterIndex(numElement_,0); 
     488  bool isOuterIndexCorrect = true; 
    483489  while (idx < ssize) 
    484490  { 
     
    490496        correctOuterIndex[i] = 0; 
    491497        ++idxLoop[i+1]; 
    492         ++correctOuterIndex[i+1]; 
     498        if (isOuterIndexCorrect) ++correctOuterIndex[i+1]; 
    493499      } 
    494500    } 
     
    510516          currentIndex[indexMap_[i]]   = localDomainIndex_[idxDomain][correctOuterIndex[i]]; 
    511517          currentIndex[indexMap_[i]+1] = localDomainIndex_[idxDomain*2+1][correctOuterIndex[i]]; 
     518          isIndexDomainDataCorrect &= true; 
    512519        } 
    513520        else isIndexDomainDataCorrect = false; 
     
    519526        { 
    520527          currentIndex[indexMap_[i]]   = localAxisIndex_[idxAxis][correctOuterIndex[i]]; 
     528          isIndexAxisDataCorrect &= true; 
    521529        } 
    522530        else isIndexAxisDataCorrect = false; 
     
    524532      } 
    525533    } 
     534 
     535    isOuterIndexCorrect = (isIndexAxisDataCorrect) && (isIndexDomainDataCorrect); 
    526536 
    527537    // Inner most index 
     
    530540    for (int i = 0; i < innerLoopSize; ++i) 
    531541    { 
     542      bool isCurrentIndexDomainDataCorrect = isIndexDomainDataCorrect; 
     543      bool isCurrentIndexAxisDataCorrect = isIndexAxisDataCorrect; 
     544 
    532545      if (axisDomainOrder_(0)) 
    533546      { 
     
    536549          currentIndex[0] = localDomainIndex_[idxDomain][correctIndexDomain]; 
    537550          currentIndex[1] = localDomainIndex_[idxDomain+1][correctIndexDomain]; 
    538           isIndexDomainDataCorrect = true; 
     551          isCurrentIndexDomainDataCorrect &= true; 
    539552          ++correctIndexDomain; 
    540553        } 
    541         else isIndexDomainDataCorrect = false; 
     554        else isCurrentIndexDomainDataCorrect = false; 
    542555      } 
    543556      else 
     
    546559        { 
    547560          currentIndex[0] = localAxisIndex_[idxAxis][correctIndexAxis]; 
    548           isIndexAxisDataCorrect = true; 
     561          isCurrentIndexAxisDataCorrect &= true; 
    549562          ++correctIndexAxis; 
    550563        } 
    551         else isIndexAxisDataCorrect = false; 
     564        else isCurrentIndexAxisDataCorrect = false; 
    552565      } 
    553566 
     
    560573      } 
    561574 
    562       if (isIndexDomainDataCorrect && 
    563           isIndexAxisDataCorrect && 
     575      if (isCurrentIndexDomainDataCorrect && 
     576          isCurrentIndexAxisDataCorrect && 
    564577          gridMask_(gridMaskIndex)) 
    565578      { 
     
    582595          (*this->globalDataSendToServer_)(indexSend2ServerCount) = globalIndex; 
    583596          (*localDataIndexSendToServer_)(indexSend2ServerCount) = indexLocalDataOnClientCount; 
     597          (*localMaskIndex_)(indexSend2ServerCount) = gridMaskIndex; 
    584598          ++indexSend2ServerCount; 
    585599        } 
     
    649663 
    650664/*! 
     665  Return local mask index of client 
     666*/ 
     667const CArray<int,1>& CDistributionClient::getLocalMaskIndexOnClient() const 
     668{ 
     669  return (*localMaskIndex_); 
     670} 
     671 
     672/*! 
    651673  Return local data index on client which are sent to servers 
    652674*/ 
Note: See TracChangeset for help on using the changeset viewer.