Changeset 1144 for XIOS/dev/dev_olga/src/distribution_server.cpp
- Timestamp:
- 05/23/17 16:32:26 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/distribution_server.cpp
r1129 r1144 12 12 namespace xios { 13 13 14 CDistributionServer::CDistributionServer(int rank, int dims, const CArray<size_t,1>& globalIndex)15 : CDistribution(rank, dims, globalIndex), nGlobal_(), nZoomSize_(), nZoomBegin_(), globalLocalIndexMap_(),16 globalIndexEachDimension_()17 {18 }19 20 CDistributionServer::CDistributionServer(int rank, const std::vector<int>& nZoomBegin,21 const std::vector<int>& nZoomSize, const std::vector<int>& nGlobal)22 : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_(),23 globalIndexEachDimension_()24 {25 createGlobalIndex();26 }27 28 14 CDistributionServer::CDistributionServer(int rank, const std::vector<int>& nZoomBegin, 29 15 const std::vector<int>& nZoomSize, … … 31 17 const std::vector<int>& nGlobal) 32 18 : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomBeginGlobal_(nZoomBeginGlobal), 33 nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_(), 34 globalIndexEachDimension_() 19 nZoomSize_(nZoomSize), nZoomBegin_(nZoomBegin), globalLocalIndexMap_() 35 20 { 36 21 createGlobalIndex(); 37 22 } 38 39 // CDistributionServer::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);47 // }48 23 49 24 CDistributionServer::~CDistributionServer() … … 99 74 idxLoop[0] += innerLoopSize; 100 75 } 101 }102 103 // void 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 = 0; k < nbDim; ++k)137 // {138 // mulDim *= nbGlobal[k];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 151 /*!152 Compute local index for writing data on server153 \param [in] globalIndex global index received from client154 \return local index of written data155 */156 CArray<size_t,1> CDistributionServer::computeLocalIndex(const CArray<size_t,1>& globalIndex)157 {158 size_t ssize = globalIndex.numElements();159 size_t localIndexSize = std::min(globalIndex_.numElements(), ssize);160 CArray<size_t,1> localIndex(localIndexSize);161 GlobalLocalMap::const_iterator ite = globalLocalIndexMap_.end(), it;162 for (int idx = 0, i = 0; idx < ssize; ++idx)163 {164 it = globalLocalIndexMap_.find(globalIndex(idx));165 if (ite != it)166 {167 localIndex(idx) = it->second;168 ++i;169 }170 }171 172 return localIndex;173 76 } 174 77
Note: See TracChangeset
for help on using the changeset viewer.