Changeset 834 for XIOS/trunk/src
- Timestamp:
- 04/08/16 15:00:24 (8 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/distribution_client.cpp
r833 r834 20 20 , localDataIndex_(), localMaskIndex_() 21 21 , globalLocalDataSendToServerMap_() 22 , infoIndex_() 22 , infoIndex_(), isComputed_(false) 23 23 { 24 24 } … … 33 33 , localDataIndex_(), localMaskIndex_() 34 34 , globalLocalDataSendToServerMap_() 35 , infoIndex_() 35 , infoIndex_(), isComputed_(false) 36 36 { 37 37 readDistributionInfo(grid); 38 38 createGlobalIndex(); 39 createGlobalIndexSendToServer();39 // createGlobalIndexSendToServer(); 40 40 } 41 41 … … 204 204 205 205 dataBegin_.at(indexMap_[idx]+1) = domList[domIndex]->data_jbegin.getValue(); //(2 == domList[domIndex]->data_dim) ? domList[domIndex]->data_jbegin.getValue() : -1; 206 dataIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->data_j_index.numElements());207 dataIndex_.at(indexMap_[idx]+1) = domList[domIndex]->data_j_index;208 infoIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->j_index.numElements());209 infoIndex_.at(indexMap_[idx]+1) = domList[domIndex]->j_index;206 // dataIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->data_j_index.numElements()); 207 dataIndex_.at(indexMap_[idx]+1) = &(domList[domIndex]->data_j_index); 208 // infoIndex_.at(indexMap_[idx]+1).resize(domList[domIndex]->j_index.numElements()); 209 infoIndex_.at(indexMap_[idx]+1) = &(domList[domIndex]->j_index); 210 210 211 211 // On the i axis … … 218 218 219 219 dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); 220 dataIndex_.at(indexMap_[idx]).resize(domList[domIndex]->data_i_index.numElements());221 dataIndex_.at(indexMap_[idx]) = domList[domIndex]->data_i_index;222 infoIndex_.at(indexMap_[idx]).resize(domList[domIndex]->i_index.numElements());223 infoIndex_.at(indexMap_[idx]) = domList[domIndex]->i_index;220 // dataIndex_.at(indexMap_[idx]).resize(domList[domIndex]->data_i_index.numElements()); 221 dataIndex_.at(indexMap_[idx]) = &(domList[domIndex]->data_i_index); 222 // infoIndex_.at(indexMap_[idx]).resize(domList[domIndex]->i_index.numElements()); 223 infoIndex_.at(indexMap_[idx]) = &(domList[domIndex]->i_index); 224 224 225 225 dataNIndex_.at(idx) = domList[domIndex]->data_i_index.numElements(); … … 240 240 241 241 dataBegin_.at(indexMap_[idx]) = axisList[axisIndex]->data_begin.getValue(); 242 dataIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->data_index.numElements());243 dataIndex_.at(indexMap_[idx]) = axisList[axisIndex]->data_index;244 infoIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->index.numElements());245 infoIndex_.at(indexMap_[idx]) = axisList[axisIndex]->index;242 // dataIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->data_index.numElements()); 243 dataIndex_.at(indexMap_[idx]) = &(axisList[axisIndex]->data_index); 244 // infoIndex_.at(indexMap_[idx]).resize(axisList[axisIndex]->index.numElements()); 245 infoIndex_.at(indexMap_[idx]) = &(axisList[axisIndex]->index); 246 246 dataNIndex_.at(idx) = axisList[axisIndex]->data_index.numElements(); 247 247 dataDims_.at(idx) = 1; … … 281 281 for (int j = 0; j < dataNIndex_[i]; ++j) 282 282 { 283 iIdx = getDomainIndex( dataIndex_[indexMap_[i]](j), dataIndex_[indexMap_[i]+1](j),283 iIdx = getDomainIndex((*dataIndex_[indexMap_[i]])(j), (*dataIndex_[indexMap_[i]+1])(j), 284 284 dataBegin_[indexMap_[i]], dataBegin_[indexMap_[i]+1], 285 285 dataDims_[i], nLocal_[indexMap_[i]], jIdx); … … 320 320 for (int j = 0; j < dataNIndex_[i]; ++j) 321 321 { 322 iIdx = getAxisIndex( dataIndex_[indexMap_[i]](j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]);322 iIdx = getAxisIndex((*dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); 323 323 if ((iIdx >= nBeginLocal_[indexMap_[i]]) && 324 324 (iIdx < nLocal_[indexMap_[i]]) && (axisMasks_[idxAxis](iIdx))) … … 341 341 this->globalIndex_.resize(ssize); 342 342 std::vector<int> idxLoop(this->numElement_,0); 343 int innnerLoopSize = infoIndex_[0].numElements();343 int innnerLoopSize = (*infoIndex_[0]).numElements(); 344 344 while (idx < ssize) 345 345 { 346 346 for (int i = 0; i < this->numElement_; ++i) 347 347 { 348 if (idxLoop[i] == infoIndex_[indexMap_[i]].numElements())348 if (idxLoop[i] == (*infoIndex_[indexMap_[i]]).numElements()) 349 349 { 350 350 idxLoop[i] = 0; … … 355 355 for (int i = 0; i < innnerLoopSize; ++i) 356 356 { 357 size_t globalIndex = infoIndex_[0](idxLoop[0]);357 size_t globalIndex = (*infoIndex_[0])(idxLoop[0]); 358 358 size_t mulDim = 1; 359 359 for (int idxElement = 0; idxElement < this->numElement_; ++idxElement) … … 365 365 { 366 366 mulDim *= nGlob_[indexMap_[idxElement]+j-1]; 367 globalIndex += ( infoIndex_[indexMap_[idxElement]+j](idxLoop[idxElement]))*mulDim;367 globalIndex += ((*infoIndex_[indexMap_[idxElement]+j])(idxLoop[idxElement]))*mulDim; 368 368 } 369 369 } … … 373 373 { 374 374 mulDim *= nGlob_[indexMap_[idxElement]-1]; 375 globalIndex += ( infoIndex_[indexMap_[idxElement]](idxLoop[idxElement]))*mulDim;375 globalIndex += ((*infoIndex_[indexMap_[idxElement]])(idxLoop[idxElement]))*mulDim; 376 376 } 377 377 } … … 397 397 void CDistributionClient::createGlobalIndexSendToServer() 398 398 { 399 if (isComputed_) return; 400 isComputed_ = true; 399 401 createLocalDomainDataIndex(); 400 402 createLocalAxisDataIndex(); … … 487 489 { 488 490 actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]]; 489 isIndexOnServer = isIndexOnServer && (( infoIndex_[indexMap_[idxElement]](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]])490 && (nZoomBegin_[indexMap_[idxElement]] <= ( infoIndex_[indexMap_[idxElement]](actualIdx)))491 && (( infoIndex_[indexMap_[idxElement]+1](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1])492 && (nZoomBegin_[indexMap_[idxElement]+1] <= ( infoIndex_[indexMap_[idxElement]+1](actualIdx)));491 isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 492 && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx))) 493 && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 494 && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx))); 493 495 } 494 496 else 495 497 { 496 isIndexOnServer = isIndexOnServer && (( infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]])497 && (nZoomBegin_[indexMap_[idxElement]] <= ( infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])));498 isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 499 && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))); 498 500 } 499 501 } … … 616 618 { 617 619 actualIdx = currentIndex[indexMap_[idxElement]]+currentIndex[indexMap_[idxElement]+1]*nLocal_[indexMap_[idxElement]]; 618 isIndexOnServer = isIndexOnServer && (( infoIndex_[indexMap_[idxElement]](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]])619 && (nZoomBegin_[indexMap_[idxElement]] <= ( infoIndex_[indexMap_[idxElement]](actualIdx)))620 && (( infoIndex_[indexMap_[idxElement]+1](actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1])621 && (nZoomBegin_[indexMap_[idxElement]+1] <= ( infoIndex_[indexMap_[idxElement]+1](actualIdx)));620 isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]]) 621 && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(actualIdx))) 622 && (((*infoIndex_[indexMap_[idxElement]+1])(actualIdx)) <= nZoomEnd_[indexMap_[idxElement]+1]) 623 && (nZoomBegin_[indexMap_[idxElement]+1] <= ((*infoIndex_[indexMap_[idxElement]+1])(actualIdx))); 622 624 } 623 625 else 624 626 { 625 isIndexOnServer = isIndexOnServer && (( infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]])626 && (nZoomBegin_[indexMap_[idxElement]] <= ( infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]])));627 isIndexOnServer = isIndexOnServer && (((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]])) <= nZoomEnd_[indexMap_[idxElement]]) 628 && (nZoomBegin_[indexMap_[idxElement]] <= ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))); 627 629 } 628 630 } … … 632 634 int actualIdx = (axisDomainOrder_(0)) ? currentIndex[0]+currentIndex[1]*nLocal_[0] 633 635 : currentIndex[0]; 634 size_t globalIndex = infoIndex_[0](actualIdx); //idxLoop[0] + nBeginGlobal_[0];636 size_t globalIndex = (*infoIndex_[0])(actualIdx); //idxLoop[0] + nBeginGlobal_[0]; 635 637 size_t mulDim = 1; 636 638 for (int idxElement = 0; idxElement < this->numElement_; ++idxElement) … … 643 645 { 644 646 mulDim *= nGlob_[indexMap_[idxElement]+j-1]; 645 globalIndex += ( infoIndex_[indexMap_[idxElement]+j](actualIdx))*mulDim;647 globalIndex += ((*infoIndex_[indexMap_[idxElement]+j])(actualIdx))*mulDim; 646 648 } 647 649 } … … 651 653 { 652 654 mulDim *= nGlob_[indexMap_[idxElement]-1]; 653 globalIndex += ( infoIndex_[indexMap_[idxElement]](currentIndex[indexMap_[idxElement]]))*mulDim;655 globalIndex += ((*infoIndex_[indexMap_[idxElement]])(currentIndex[indexMap_[idxElement]]))*mulDim; 654 656 } 655 657 } … … 712 714 Return global local data mapping of client 713 715 */ 714 const CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() const 715 { 716 const CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() 717 { 718 if (!isComputed_) createGlobalIndexSendToServer(); 716 719 return globalLocalDataSendToServerMap_; 717 720 } … … 720 723 Return local data index of client 721 724 */ 722 const std::vector<int>& CDistributionClient::getLocalDataIndexOnClient() const 723 { 725 const std::vector<int>& CDistributionClient::getLocalDataIndexOnClient() 726 { 727 if (!isComputed_) createGlobalIndexSendToServer(); 724 728 return localDataIndex_; 725 729 } … … 728 732 Return local mask index of client 729 733 */ 730 const std::vector<int>& CDistributionClient::getLocalMaskIndexOnClient() const 731 { 734 const std::vector<int>& CDistributionClient::getLocalMaskIndexOnClient() 735 { 736 if (!isComputed_) createGlobalIndexSendToServer(); 732 737 return localMaskIndex_; 733 738 } -
XIOS/trunk/src/distribution_client.hpp
r831 r834 37 37 CDistributionClient(int rank, CGrid* grid); 38 38 39 void createGlobalIndexSendToServer(); 40 39 41 /** Default destructor */ 40 42 virtual ~CDistributionClient(); 41 43 42 virtual const std::vector<int>& getLocalDataIndexOnClient() const;43 const GlobalLocalDataMap& getGlobalLocalDataSendToServer() const;44 const std::vector<int>& getLocalMaskIndexOnClient() const;44 virtual const std::vector<int>& getLocalDataIndexOnClient(); 45 const GlobalLocalDataMap& getGlobalLocalDataSendToServer(); 46 const std::vector<int>& getLocalMaskIndexOnClient(); 45 47 46 48 std::vector<int> getNGlob() { return nGlob_; } … … 56 58 protected: 57 59 void createGlobalIndex(); 58 void createGlobalIndexSendToServer();59 60 void readDistributionInfo(CGrid* grid); 60 61 void readDistributionInfo(const std::vector<CDomain*>& domList, … … 98 99 std::vector<int> dataDims_; //!< Data_dim, domain can have data_dim == 1 or 2 99 100 std::vector<int> dataBegin_; //!< Data begin (data_ibegin, data_jbegin, etc) 100 std::vector<CArray<int,1> > dataIndex_; //!< Data index101 std::vector<CArray<int,1> > infoIndex_; //!< i_index, j_index101 std::vector<CArray<int,1>* > dataIndex_; //!< Data index 102 std::vector<CArray<int,1>* > infoIndex_; //!< i_index, j_index 102 103 103 104 std::vector<CArray<bool,1> > domainMasks_; //!< Domain mask … … 116 117 int axisNum_; 117 118 int domainNum_; 119 bool isComputed_; 118 120 119 121 private: -
XIOS/trunk/src/node/grid.cpp
r831 r834 979 979 } 980 980 981 const CDistributionServer* CGrid::getDistributionServer() const981 CDistributionServer* CGrid::getDistributionServer() 982 982 { 983 983 return serverDistribution_; 984 984 } 985 985 986 const CDistributionClient* CGrid::getDistributionClient() const986 CDistributionClient* CGrid::getDistributionClient() 987 987 { 988 988 return clientDistribution_; -
XIOS/trunk/src/node/grid.hpp
r824 r834 184 184 int getOffsetWrittenIndexes() const; 185 185 186 const CDistributionServer* getDistributionServer() const;187 const CDistributionClient* getDistributionClient() const;186 CDistributionServer* getDistributionServer(); 187 CDistributionClient* getDistributionClient(); 188 188 CGridTransformation* getTransformations(); 189 189
Note: See TracChangeset
for help on using the changeset viewer.