Ignore:
Timestamp:
01/11/17 15:14:22 (7 years ago)
Author:
mhnguyen
Message:

Merging working version of coupler

+) Add some changes of domain and axis: Retransfer the atttributes in a generic ways for each level of client (or server)
+) Remove some spoiled files from the previous commits

Test
+) No test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/distribution_server.cpp

    r930 r1025  
    1313 
    1414CDistributionServer::CDistributionServer(int rank, int dims, const CArray<size_t,1>& globalIndex) 
    15   : CDistribution(rank, dims, globalIndex), nGlobal_(), nZoomSize_(), nZoomBegin_(), globalLocalIndexMap_() 
     15  : CDistribution(rank, dims, globalIndex), nGlobal_(), nZoomSize_(), nZoomBegin_(), globalLocalIndexMap_(), 
     16  globalIndexEachDimension_() 
    1617{ 
    1718} 
     
    1920CDistributionServer::CDistributionServer(int rank, const std::vector<int>& nZoomBegin, 
    2021                                         const std::vector<int>& nZoomSize, const std::vector<int>& nGlobal) 
    21   : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_() 
     22  : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_(), 
     23  globalIndexEachDimension_() 
    2224{ 
    2325  createGlobalIndex(); 
     
    2931                                         const std::vector<int>& nGlobal) 
    3032  : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomBeginGlobal_(nZoomBeginGlobal), 
    31     nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_() 
     33    nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_(), 
     34    globalIndexEachDimension_() 
    3235{ 
    3336  createGlobalIndex(); 
     37} 
     38 
     39CDistributionServer::CDistributionServer(int rank,  
     40                                         const std::vector<CArray<int,1> >& globalIndexEachDimension, 
     41                                         const std::vector<int>& nGlobal) 
     42  : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomBeginGlobal_(), 
     43    nZoomSize_(), nZoomBegin_(), globalLocalIndexMap_(),  
     44    globalIndexEachDimension_(globalIndexEachDimension) 
     45{ 
     46  createGlobalIndexFromIndex(globalIndexEachDimension, nGlobal); 
    3447} 
    3548 
     
    88101} 
    89102 
     103void CDistributionServer::createGlobalIndexFromIndex(const std::vector<CArray<int,1> >& globalIndexOnEachDimension, 
     104                                                     const std::vector<int>& nbGlobal) 
     105{ 
     106  size_t idx = 0, ssize = 1; 
     107  for (int i = 0; i < globalIndexOnEachDimension.size(); ++i) ssize *= globalIndexOnEachDimension[i].numElements(); 
     108 
     109  this->globalIndex_.resize(ssize); 
     110  size_t nbDim = nbGlobal.size(); 
     111  std::vector<int> idxLoop(nbDim,0); 
     112  std::vector<int> currentIndex(nbDim); 
     113  int innerLoopSize = globalIndexOnEachDimension[0].numElements(); 
     114 
     115  globalLocalIndexMap_.rehash(std::ceil(ssize/globalLocalIndexMap_.max_load_factor())); 
     116  while (idx<ssize) 
     117  { 
     118    for (int i = 0; i < nbDim-1; ++i) 
     119    { 
     120      if (idxLoop[i] == globalIndexOnEachDimension[i].numElements()) 
     121      { 
     122        idxLoop[i] = 0; 
     123        ++idxLoop[i+1]; 
     124      } 
     125    } 
     126 
     127    for (int i = 1; i < nbDim; ++i) 
     128      currentIndex[i] = globalIndexOnEachDimension[i](idxLoop[i]); 
     129 
     130    size_t mulDim, globalIndex; 
     131    for (int i = 0; i < innerLoopSize; ++i) 
     132    { 
     133      mulDim = 1; 
     134      globalIndex = globalIndexOnEachDimension[0](i); 
     135 
     136      for (int k = 1; k < nbDim; ++k) 
     137      { 
     138        mulDim *= nbGlobal[k-1]; 
     139        globalIndex += (currentIndex[k])*mulDim; 
     140      } 
     141      globalLocalIndexMap_[globalIndex] = idx; 
     142      this->globalIndex_(idx) = globalIndex; 
     143 
     144      ++idx; 
     145    } 
     146    idxLoop[0] += innerLoopSize; 
     147  } 
     148 
     149} 
     150 
    90151/*! 
    91152  Compute local index for writing data on server 
Note: See TracChangeset for help on using the changeset viewer.