Changeset 1570 for XIOS/dev/dev_olga/src/distribution_client.cpp
- Timestamp:
- 08/31/18 14:15:54 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/distribution_client.cpp
r1568 r1570 15 15 , axisDomainOrder_() 16 16 , nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_() 17 , dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_() , domainMasks_(), axisMasks_()17 , dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_()//, domainMasks_()//, axisMasks_() 18 18 , gridMask_(), indexMap_() 19 19 , isDataDistributed_(true), axisNum_(0), domainNum_(0) … … 117 117 axisDomainOrder_ = axisDomainOrder; 118 118 119 // Each domain or axis has its mask, of course120 domainMasks_.resize(domainNum_);121 for (int i = 0; i < domainNum_;++i)122 {123 domainMasks_[i].resize(domList[i]->domainMask.numElements());124 domainMasks_[i] = domList[i]->domainMask;125 }126 127 axisMasks_.resize(axisNum_);128 for (int i = 0; i < axisNum_; ++i)129 {130 axisMasks_[i].resize(axisList[i]->mask.numElements());131 axisMasks_[i] = axisList[i]->mask;132 }119 // // Each domain or axis has its mask, of course 120 // domainMasks_.resize(domainNum_); 121 // for (int i = 0; i < domainNum_;++i) 122 // { 123 // domainMasks_[i].resize(domList[i]->domainMask.numElements()); 124 // domainMasks_[i] = domList[i]->domainMask; 125 // } 126 127 // axisMasks_.resize(axisNum_); 128 // for (int i = 0; i < axisNum_; ++i) 129 // { 130 // axisMasks_[i].resize(axisList[i]->mask.numElements()); 131 // axisMasks_[i] = axisList[i]->mask; 132 // } 133 133 134 134 // Because domain and axis can be in any order (axis1, domain1, axis2, axis3, ) … … 282 282 283 283 if ((iIdx >= nBeginLocal_[indexMap_[i]]) && (iIdx < nLocal_[indexMap_[i]]) && 284 (jIdx >= nBeginLocal_[indexMap_[i]+1]) && (jIdx < nLocal_[indexMap_[i]+1]) 285 && (domainMasks_[idxDomain](iIdx + jIdx*nLocal_[indexMap_[i]])))284 (jIdx >= nBeginLocal_[indexMap_[i]+1]) && (jIdx < nLocal_[indexMap_[i]+1])) 285 // && (domainMasks_[idxDomain](iIdx + jIdx*nLocal_[indexMap_[i]]))) 286 286 { 287 287 ++count; … … 330 330 iIdx = getAxisIndex((dataIndex_[indexMap_[i]])(j), dataBegin_[indexMap_[i]], nLocal_[indexMap_[i]]); 331 331 if ((iIdx >= nBeginLocal_[indexMap_[i]]) && 332 (iIdx < nLocal_[indexMap_[i]]) && (axisMasks_[idxAxis](iIdx)))332 (iIdx < nLocal_[indexMap_[i]]) )//&& (axisMasks_[idxAxis](iIdx))) 333 333 { 334 334 ++count; … … 413 413 414 414 for (int i = 0; i < numElement_; ++i) ssize *= eachElementSize[i]; 415 while (idx < ssize)416 {417 for (int i = 0; i < numElement_-1; ++i)418 {419 if (idxLoop[i] == eachElementSize[i])420 {421 idxLoop[i] = 0;422 ++idxLoop[i+1];423 }424 }425 426 // Find out outer index427 // Depending the inner-most element is axis or domain,428 // The outer loop index begins correspondingly at one (1) or zero (0)429 for (int i = 1; i < numElement_; ++i)430 {431 currentIndex[i] = elementLocalIndex_[i](idxLoop[i]);432 }433 434 // Inner most index435 for (int i = 0; i < innerLoopSize; ++i)436 {437 int gridMaskIndex = 0;438 currentIndex[0] = elementLocalIndex_[0](i);439 440 bool maskTmp = true;441 int idxDomain = 0, idxAxis = 0;442 for (int elem = 0; elem < numElement_; ++elem)443 {444 if (2 == axisDomainOrder_(elem))445 {446 maskTmp = maskTmp && domainMasks_[idxDomain](currentIndex[elem]);447 ++idxDomain;448 }449 else if (1 == axisDomainOrder_(elem))450 {451 maskTmp = maskTmp && axisMasks_[idxAxis](currentIndex[elem]);452 ++idxAxis;453 }454 }455 if (maskTmp) ++indexLocalDataOnClientCount;456 }457 idxLoop[0] += innerLoopSize;458 idx += innerLoopSize;459 }415 // while (idx < ssize) 416 // { 417 // for (int i = 0; i < numElement_-1; ++i) 418 // { 419 // if (idxLoop[i] == eachElementSize[i]) 420 // { 421 // idxLoop[i] = 0; 422 // ++idxLoop[i+1]; 423 // } 424 // } 425 // 426 // // Find out outer index 427 // // Depending the inner-most element is axis or domain, 428 // // The outer loop index begins correspondingly at one (1) or zero (0) 429 // for (int i = 1; i < numElement_; ++i) 430 // { 431 // currentIndex[i] = elementLocalIndex_[i](idxLoop[i]); 432 // } 433 // 434 // // Inner most index 435 // for (int i = 0; i < innerLoopSize; ++i) 436 // { 437 // int gridMaskIndex = 0; 438 // currentIndex[0] = elementLocalIndex_[0](i); 439 // 440 // bool maskTmp = true; 441 // int idxDomain = 0, idxAxis = 0; 442 // for (int elem = 0; elem < numElement_; ++elem) 443 // { 444 // if (2 == axisDomainOrder_(elem)) 445 // { 446 // maskTmp = maskTmp && domainMasks_[idxDomain](currentIndex[elem]); 447 // ++idxDomain; 448 // } 449 // else if (1 == axisDomainOrder_(elem)) 450 // { 451 // maskTmp = maskTmp && axisMasks_[idxAxis](currentIndex[elem]); 452 // ++idxAxis; 453 // } 454 // } 455 // if (maskTmp) ++indexLocalDataOnClientCount; 456 // } 457 // idxLoop[0] += innerLoopSize; 458 // idx += innerLoopSize; 459 // } 460 460 461 461 // Now allocate these arrays 462 localDataIndex_.resize(indexLocalDataOnClientCount); 463 localMaskIndex_.resize(indexLocalDataOnClientCount); 464 localMaskedDataIndex_.resize(indexLocalDataOnClientCount); 465 globalDataIndex_.rehash(std::ceil(indexLocalDataOnClientCount/globalDataIndex_.max_load_factor())); 466 globalLocalDataSendToServerMap_.rehash(std::ceil(indexLocalDataOnClientCount/globalLocalDataSendToServerMap_.max_load_factor())); 462 // localDataIndex_.resize(indexLocalDataOnClientCount); 463 // localMaskIndex_.resize(indexLocalDataOnClientCount); 464 // localMaskedDataIndex_.resize(indexLocalDataOnClientCount); 465 // globalDataIndex_.rehash(std::ceil(indexLocalDataOnClientCount/globalDataIndex_.max_load_factor())); 466 // globalLocalDataSendToServerMap_.rehash(std::ceil(indexLocalDataOnClientCount/globalLocalDataSendToServerMap_.max_load_factor())); 467 468 localDataIndex_.resize(ssize); 469 if (!gridMask_.isEmpty()) localMaskIndex_.resize(ssize); 470 localMaskedDataIndex_.resize(ssize); 471 globalDataIndex_.rehash(std::ceil(ssize/globalDataIndex_.max_load_factor())); 472 globalLocalDataSendToServerMap_.rehash(std::ceil(ssize/globalLocalDataSendToServerMap_.max_load_factor())); 473 467 474 468 475 // We need to loop with data index … … 524 531 bool maskGridTmp = true; 525 532 526 // Domain or axis mask: only unmasked values will be sent 527 int idxDomain = 0, idxAxis = 0; 528 for (int elem = 0; elem < numElement_; ++elem) 529 { 530 if (2 == axisDomainOrder_(elem)) 533 // // Domain or axis mask: only unmasked values will be sent 534 // int idxDomain = 0, idxAxis = 0; 535 // for (int elem = 0; elem < numElement_; ++elem) 536 // { 537 // if (2 == axisDomainOrder_(elem)) 538 // { 539 // maskTmp = maskTmp && domainMasks_[idxDomain](currentIndex[elem]); 540 // ++idxDomain; 541 // } 542 // else if (1 == axisDomainOrder_(elem)) 543 // { 544 // maskTmp = maskTmp && axisMasks_[idxAxis](currentIndex[elem]); 545 // ++idxAxis; 546 // } 547 // } 548 549 // if (maskTmp) 550 // { 551 size_t globalIndex = 0; 552 for (int k = 0; k < numElement_; ++k) 531 553 { 532 maskTmp = maskTmp && domainMasks_[idxDomain](currentIndex[elem]); 533 ++idxDomain; 554 globalIndex += (currentGlobalIndex[k])*elementNGlobal_[k]; 534 555 } 535 else if (1 == axisDomainOrder_(elem)) 536 { 537 maskTmp = maskTmp && axisMasks_[idxAxis](currentIndex[elem]); 538 ++idxAxis; 539 } 540 } 556 globalDataIndex_[globalIndex] = indexLocalDataOnClientCount; 557 localDataIndex_[indexLocalDataOnClientCount] = countLocalData; 558 globalLocalDataSendToServerMap_[globalIndex] = indexLocalDataOnClientCount; 559 localMaskedDataIndex_[indexLocalDataOnClientCount] = indexLocalDataOnClientCount; 560 // } 541 561 542 562 // Grid mask: unmasked values will be replaces by NaN and then all values will be sent … … 549 569 } 550 570 maskGridTmp = gridMask_(gridMaskIndex); 551 }552 553 if (maskTmp)554 {555 size_t globalIndex = 0;556 for (int k = 0; k < numElement_; ++k)557 {558 globalIndex += (currentGlobalIndex[k])*elementNGlobal_[k];559 }560 globalDataIndex_[globalIndex] = indexLocalDataOnClientCount;561 localDataIndex_[indexLocalDataOnClientCount] = countLocalData;562 571 if (maskGridTmp) 563 572 localMaskIndex_[indexLocalDataOnClientCount] = true; 564 573 else 565 574 localMaskIndex_[indexLocalDataOnClientCount] = false; 566 globalLocalDataSendToServerMap_[globalIndex] = indexLocalDataOnClientCount;567 localMaskedDataIndex_[indexLocalDataOnClientCount] = indexLocalDataOnClientCount;568 ++indexLocalDataOnClientCount;569 575 } 576 577 ++indexLocalDataOnClientCount; 578 570 579 } 571 580 ++countLocalData; … … 600 609 const int& dataDim, const int& ni, int& j) 601 610 { 611 int i; 602 612 int tempI = dataIIndex + dataIBegin, 603 613 tempJ = (dataJIndex + dataJBegin); 604 614 if (ni == 0) 605 615 { 606 i nt i = 0;607 j = 0;616 i = -1; 617 j = -1; 608 618 return i; 609 619 } 610 int i = (dataDim == 1) ? (tempI) % ni 611 : (tempI) ; 612 j = (dataDim == 1) ? (tempI) / ni 613 : (tempJ) ; 614 620 if ((tempI < 0) || (tempJ < 0)) 621 { 622 i = -1; 623 j = -1; 624 return i; 625 } 626 else 627 { 628 i = (dataDim == 1) ? (tempI) % ni : (tempI) ; 629 j = (dataDim == 1) ? (tempI) / ni : (tempJ) ; 630 } 615 631 return i; 616 632 } … … 629 645 return -1; 630 646 } 631 int tempI = dataIndex; //+ dataBegin;647 int tempI = dataIndex; 632 648 if ((tempI < 0) || (tempI > ni)) 633 649 return -1;
Note: See TracChangeset
for help on using the changeset viewer.