Changeset 623 for XIOS/trunk/src/distribution_client.cpp
- Timestamp:
- 06/22/15 13:36:31 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/distribution_client.cpp
r621 r623 13 13 CDistributionClient::CDistributionClient(int rank, int dims, CArray<size_t,1>* globalIndex) 14 14 : CDistribution(rank, dims, globalIndex), 15 localDataIndex_(0), axisDomainOrder_(), 15 globalDataSendToServer_(0), localDataIndex_(0), localDataIndexSendToServer_(0), localMaskIndex_(0), 16 axisDomainOrder_(), 16 17 nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_(), 17 18 dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_(), 18 19 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_() 20 21 { 21 22 } … … 23 24 CDistributionClient::CDistributionClient(int rank, CGrid* grid) 24 25 : CDistribution(rank, 0, 0), 25 localDataIndex_(0), axisDomainOrder_(), 26 globalDataSendToServer_(0), localDataIndex_(0), localDataIndexSendToServer_(0), localMaskIndex_(0), 27 axisDomainOrder_(), 26 28 nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_(), 27 29 dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_(), 28 30 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_() 30 32 { 31 33 readDistributionInfo(grid); … … 39 41 if (0 != localDataIndex_) delete localDataIndex_; 40 42 if (0 != localDataIndexSendToServer_) delete localDataIndexSendToServer_; 43 if (0 != localMaskIndex_) delete localMaskIndex_; 41 44 } 42 45 … … 145 148 axisMasks_[i].resize(axisList[i]->mask.numElements()); 146 149 axisMasks_[i] = axisList[i]->mask; 150 std::cout << "axisMask " << axisMasks_[i] << std::endl; 147 151 } 148 152 … … 197 201 nBeginLocal_.at(indexMap_[idx]+1) = 0; 198 202 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; 201 205 202 206 dataBegin_.at(indexMap_[idx]+1) = (2 == domList[domIndex]->data_dim) ? domList[domIndex]->data_jbegin.getValue() : -1; … … 209 213 nBeginLocal_.at(indexMap_[idx]) = 0; 210 214 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; 213 217 214 218 dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); … … 229 233 nBeginLocal_.at(indexMap_[idx]) = 0; 230 234 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; 233 237 234 238 dataBegin_.at(indexMap_[idx]) = axisList[axisIndex]->data_begin.getValue(); … … 393 397 394 398 // 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); 397 401 int innerLoopSize = eachElementSize[0]; 398 402 size_t idx = 0, indexLocalDataOnClientCount = 0, indexSend2ServerCount = 0; … … 445 449 else currentIndex[0] = localAxisIndex_[idxAxis][i]; 446 450 447 intgridMaskIndex = currentIndex[0];451 StdSize gridMaskIndex = currentIndex[0]; 448 452 int mulDimMask = 1; 449 453 for (int k = 1; k < this->dims_; ++k) … … 473 477 localDataIndex_ = new CArray<int,1>(indexLocalDataOnClientCount); 474 478 localDataIndexSendToServer_ = new CArray<int,1>(indexSend2ServerCount); 479 localMaskIndex_ = new CArray<int,1>(indexSend2ServerCount); 475 480 476 481 // We need to loop with data index … … 481 486 int countLocalData = 0; 482 487 std::vector<int> correctOuterIndex(numElement_,0); 488 bool isOuterIndexCorrect = true; 483 489 while (idx < ssize) 484 490 { … … 490 496 correctOuterIndex[i] = 0; 491 497 ++idxLoop[i+1]; 492 ++correctOuterIndex[i+1];498 if (isOuterIndexCorrect) ++correctOuterIndex[i+1]; 493 499 } 494 500 } … … 510 516 currentIndex[indexMap_[i]] = localDomainIndex_[idxDomain][correctOuterIndex[i]]; 511 517 currentIndex[indexMap_[i]+1] = localDomainIndex_[idxDomain*2+1][correctOuterIndex[i]]; 518 isIndexDomainDataCorrect &= true; 512 519 } 513 520 else isIndexDomainDataCorrect = false; … … 519 526 { 520 527 currentIndex[indexMap_[i]] = localAxisIndex_[idxAxis][correctOuterIndex[i]]; 528 isIndexAxisDataCorrect &= true; 521 529 } 522 530 else isIndexAxisDataCorrect = false; … … 524 532 } 525 533 } 534 535 isOuterIndexCorrect = (isIndexAxisDataCorrect) && (isIndexDomainDataCorrect); 526 536 527 537 // Inner most index … … 530 540 for (int i = 0; i < innerLoopSize; ++i) 531 541 { 542 bool isCurrentIndexDomainDataCorrect = isIndexDomainDataCorrect; 543 bool isCurrentIndexAxisDataCorrect = isIndexAxisDataCorrect; 544 532 545 if (axisDomainOrder_(0)) 533 546 { … … 536 549 currentIndex[0] = localDomainIndex_[idxDomain][correctIndexDomain]; 537 550 currentIndex[1] = localDomainIndex_[idxDomain+1][correctIndexDomain]; 538 is IndexDomainDataCorrect= true;551 isCurrentIndexDomainDataCorrect &= true; 539 552 ++correctIndexDomain; 540 553 } 541 else is IndexDomainDataCorrect = false;554 else isCurrentIndexDomainDataCorrect = false; 542 555 } 543 556 else … … 546 559 { 547 560 currentIndex[0] = localAxisIndex_[idxAxis][correctIndexAxis]; 548 is IndexAxisDataCorrect= true;561 isCurrentIndexAxisDataCorrect &= true; 549 562 ++correctIndexAxis; 550 563 } 551 else is IndexAxisDataCorrect = false;564 else isCurrentIndexAxisDataCorrect = false; 552 565 } 553 566 … … 560 573 } 561 574 562 if (is IndexDomainDataCorrect &&563 is IndexAxisDataCorrect &&575 if (isCurrentIndexDomainDataCorrect && 576 isCurrentIndexAxisDataCorrect && 564 577 gridMask_(gridMaskIndex)) 565 578 { … … 582 595 (*this->globalDataSendToServer_)(indexSend2ServerCount) = globalIndex; 583 596 (*localDataIndexSendToServer_)(indexSend2ServerCount) = indexLocalDataOnClientCount; 597 (*localMaskIndex_)(indexSend2ServerCount) = gridMaskIndex; 584 598 ++indexSend2ServerCount; 585 599 } … … 649 663 650 664 /*! 665 Return local mask index of client 666 */ 667 const CArray<int,1>& CDistributionClient::getLocalMaskIndexOnClient() const 668 { 669 return (*localMaskIndex_); 670 } 671 672 /*! 651 673 Return local data index on client which are sent to servers 652 674 */
Note: See TracChangeset
for help on using the changeset viewer.