Changeset 653 for XIOS/trunk/src/transformation/grid_transformation.cpp
- Timestamp:
- 07/24/15 16:40:06 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/transformation/grid_transformation.cpp
r634 r653 72 72 { 73 73 CContext* context = CContext::getCurrent(); 74 CContextClient* client =context->client;74 CContextClient* client = context->client; 75 75 76 76 CDistributionClient distribution(client->clientRank, originalGridSource_); 77 77 const CArray<size_t,1>& globalIndexGridDestSendToServer = distribution.getGlobalDataIndexSendToServer(); 78 78 79 globalIndexOfCurrentGridSource_ = new CArray<size_t,1>(globalIndexGridDestSendToServer.numElements());80 globalIndexOfOriginalGridSource_ = new CArray<size_t,1>(globalIndexGridDestSendToServer.numElements());81 weightOfGlobalIndexOfOriginalGridSource_ = new CArray<double,1>(globalIndexGridDestSendToServer.numElements());82 *globalIndexOfCurrentGridSource_ = globalIndexGridDestSendToServer;83 *globalIndexOfOriginalGridSource_ = globalIndexGridDestSendToServer;84 *weightOfGlobalIndexOfOriginalGridSource_ = 1.0;79 globalIndexOfCurrentGridSource_.resize(globalIndexGridDestSendToServer.numElements()); 80 globalIndexOfOriginalGridSource_.resize(globalIndexGridDestSendToServer.numElements()); 81 weightOfGlobalIndexOfOriginalGridSource_.resize(globalIndexGridDestSendToServer.numElements()); 82 globalIndexOfCurrentGridSource_ = globalIndexGridDestSendToServer; 83 globalIndexOfOriginalGridSource_ = globalIndexGridDestSendToServer; 84 weightOfGlobalIndexOfOriginalGridSource_ = 1.0; 85 85 } 86 86 … … 90 90 ite = algoTransformation_.end(); 91 91 for (it = itb; it != ite; ++it) delete (*it); 92 93 std::map<int, CArray<int,1>* >::const_iterator itMap, iteMap;94 itMap = localIndexToSendFromGridSource_.begin();95 iteMap = localIndexToSendFromGridSource_.end();96 for (; itMap != iteMap; ++itMap) delete (itMap->second);97 98 if (0 != globalIndexOfCurrentGridSource_) delete globalIndexOfCurrentGridSource_;99 if (0 != globalIndexOfOriginalGridSource_) delete globalIndexOfOriginalGridSource_;100 if (0 != weightOfGlobalIndexOfOriginalGridSource_) delete weightOfGlobalIndexOfOriginalGridSource_;101 92 } 102 93 … … 344 335 { 345 336 CContext* context = CContext::getCurrent(); 346 CContextClient* client =context->client;337 CContextClient* client = context->client; 347 338 348 339 ListAlgoType::const_iterator itb = listAlgos_.begin(), … … 394 385 { 395 386 CContext* context = CContext::getCurrent(); 396 CContextClient* client =context->client;387 CContextClient* client = context->client; 397 388 398 389 //First of all, retrieve info of local mask of grid destination … … 406 397 407 398 // Then find out which index became invalid (become masked after being applied the algorithms, or demande some masked points from grid source) 408 int num = globalIndexOfOriginalGridSource_ ->numElements();399 int num = globalIndexOfOriginalGridSource_.numElements(); 409 400 const size_t sfmax = NumTraits<unsigned long>::sfmax(); 410 401 int maskIndexNum = 0; 411 402 for (int idx = 0; idx < num; ++idx) 412 403 { 413 if (sfmax == (*globalIndexOfOriginalGridSource_)(idx))414 { 415 size_t maskedGlobalIndex = (*globalIndexOfCurrentGridSource_)(idx);404 if (sfmax == globalIndexOfOriginalGridSource_(idx)) 405 { 406 size_t maskedGlobalIndex = globalIndexOfCurrentGridSource_(idx); 416 407 itArr = std::find(itbArr, iteArr, maskedGlobalIndex); 417 408 if (iteArr != itArr) ++maskIndexNum; … … 419 410 } 420 411 421 CArray<int,1> * maskIndexToModify = new CArray<int,1>(maskIndexNum);412 CArray<int,1> maskIndexToModify(maskIndexNum); 422 413 maskIndexNum = 0; 423 414 for (int idx = 0; idx < num; ++idx) 424 415 { 425 if (sfmax == (*globalIndexOfOriginalGridSource_)(idx))426 { 427 size_t maskedGlobalIndex = (*globalIndexOfCurrentGridSource_)(idx);416 if (sfmax == globalIndexOfOriginalGridSource_(idx)) 417 { 418 size_t maskedGlobalIndex = globalIndexOfCurrentGridSource_(idx); 428 419 itArr = std::find(itbArr, iteArr, maskedGlobalIndex); 429 420 if (iteArr != itArr) 430 421 { 431 422 int localIdx = std::distance(itbArr, itArr); 432 (*maskIndexToModify)(maskIndexNum) = (localMaskIndexOnClientDest)(localIdx);423 maskIndexToModify(maskIndexNum) = localMaskIndexOnClientDest(localIdx); 433 424 ++maskIndexNum; 434 425 } … … 436 427 } 437 428 438 gridDestination_->modifyMask(*maskIndexToModify); 439 440 delete maskIndexToModify; 429 gridDestination_->modifyMask(maskIndexToModify); 441 430 } 442 431 … … 449 438 { 450 439 CContext* context = CContext::getCurrent(); 451 CContextClient* client =context->client;440 CContextClient* client = context->client; 452 441 453 442 CTransformationMapping transformationMap(gridDestination_, gridSource_); … … 462 451 std::map<int,std::vector<size_t> >::const_iterator itbSend = globalIndexToSend.begin(), itSend, 463 452 iteSend = globalIndexToSend.end(); 464 CArray<size_t,1>::const_iterator itbArr = globalIndexOfCurrentGridSource_ ->begin(), itArr,465 iteArr = globalIndexOfCurrentGridSource_ ->end();453 CArray<size_t,1>::const_iterator itbArr = globalIndexOfCurrentGridSource_.begin(), itArr, 454 iteArr = globalIndexOfCurrentGridSource_.end(); 466 455 int sendBuffSize = 0; 467 456 for (itSend = itbSend; itSend != iteSend; ++itSend) sendBuffSize += (itSend->second).size(); … … 486 475 { 487 476 int index = std::distance(itbArr, itArr); 488 sendBuff[idx+currentBuffPosition] = (*globalIndexOfOriginalGridSource_)(index);477 sendBuff[idx+currentBuffPosition] = globalIndexOfOriginalGridSource_(index); 489 478 } 490 479 } … … 525 514 } 526 515 527 if (globalIndexOfCurrentGridSource_ ->numElements()!= nbCurrentGridSource)516 if (globalIndexOfCurrentGridSource_.numElements() != nbCurrentGridSource) 528 517 { 529 delete globalIndexOfCurrentGridSource_; 530 globalIndexOfCurrentGridSource_ = new CArray<size_t,1>(nbCurrentGridSource); 531 delete globalIndexOfOriginalGridSource_; 532 globalIndexOfOriginalGridSource_ = new CArray<size_t,1>(nbCurrentGridSource); 533 delete weightOfGlobalIndexOfOriginalGridSource_; 534 weightOfGlobalIndexOfOriginalGridSource_ = new CArray<double,1>(nbCurrentGridSource); 518 globalIndexOfCurrentGridSource_.resize(nbCurrentGridSource); 519 globalIndexOfOriginalGridSource_.resize(nbCurrentGridSource); 520 weightOfGlobalIndexOfOriginalGridSource_.resize(nbCurrentGridSource); 535 521 } 536 522 … … 545 531 for (int i = 0; i < ssize; ++i) 546 532 { 547 (*globalIndexOfCurrentGridSource_)(k) = ((itRecv->second)[idx][i]).first;548 (*weightOfGlobalIndexOfOriginalGridSource_)(k) = ((itRecv->second)[idx][i]).second;549 (*globalIndexOfOriginalGridSource_)(k) = *currentRecvBuff;533 globalIndexOfCurrentGridSource_(k) = ((itRecv->second)[idx][i]).first; 534 weightOfGlobalIndexOfOriginalGridSource_(k) = ((itRecv->second)[idx][i]).second; 535 globalIndexOfOriginalGridSource_(k) = *currentRecvBuff; 550 536 ++k; 551 537 } … … 569 555 { 570 556 CContext* context = CContext::getCurrent(); 571 CContextClient* client =context->client;557 CContextClient* client = context->client; 572 558 573 559 CTransformationMapping transformationMap(gridDestination_, originalGridSource_); 574 560 575 561 std::map<size_t, std::vector<std::pair<size_t,double> > > globaIndexWeightFromDestToSource; 576 int nb = globalIndexOfCurrentGridSource_ ->numElements();562 int nb = globalIndexOfCurrentGridSource_.numElements(); 577 563 const size_t sfmax = NumTraits<unsigned long>::sfmax(); 578 564 for (int idx = 0; idx < nb; ++idx) 579 565 { 580 if (sfmax != (*globalIndexOfOriginalGridSource_)(idx))581 globaIndexWeightFromDestToSource[ (*globalIndexOfCurrentGridSource_)(idx)].push_back(make_pair((*globalIndexOfOriginalGridSource_)(idx),(*weightOfGlobalIndexOfOriginalGridSource_)(idx))) ;566 if (sfmax != globalIndexOfOriginalGridSource_(idx)) 567 globaIndexWeightFromDestToSource[globalIndexOfCurrentGridSource_(idx)].push_back(make_pair(globalIndexOfOriginalGridSource_(idx), weightOfGlobalIndexOfOriginalGridSource_(idx))) ; 582 568 } 583 569 … … 638 624 for (itMap = itbMap; itMap != iteMap; ++itMap) 639 625 { 640 CArray<int,1>* ptr = new CArray<int,1>((itMap->second).size());641 localIndexToSendFromGridSource_[itMap->first] = ptr;642 626 int destRank = itMap->first; 643 int vecSize = (itMap->second).size(); 627 int vecSize = itMap->second.size(); 628 localIndexToSendFromGridSource_[destRank].resize(vecSize); 644 629 for (int idx = 0; idx < vecSize; ++idx) 645 630 { 646 itArr = std::find(itbArr, iteArr, (itMap->second)[idx]);631 itArr = std::find(itbArr, iteArr, itMap->second[idx]); 647 632 if (iteArr != itArr) 648 633 { 649 634 int localIdx = std::distance(itbArr, itArr); 650 (*localIndexToSendFromGridSource_[destRank])(idx) = (localIdx);635 localIndexToSendFromGridSource_[destRank](idx) = localIdx; 651 636 } 652 637 } … … 658 643 \return local index of data 659 644 */ 660 const std::map<int, CArray<int,1> *>& CGridTransformation::getLocalIndexToSendFromGridSource() const645 const std::map<int, CArray<int,1> >& CGridTransformation::getLocalIndexToSendFromGridSource() const 661 646 { 662 647 return localIndexToSendFromGridSource_;
Note: See TracChangeset
for help on using the changeset viewer.