Changeset 831
- Timestamp:
- 03/23/16 16:11:09 (9 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/client_server_mapping.hpp
r829 r831 26 26 public: 27 27 typedef boost::unordered_map<int, std::vector<size_t> > GlobalIndexMap; 28 typedef std::map<int, std::vector<int> > LocalIndexMap;29 28 public: 30 29 /** Default constructor */ … … 37 36 virtual void computeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClient) = 0; 38 37 39 // // Simple case, global index on client and index on servers40 // virtual void computeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClient,41 // const std::vector<CArray<size_t,1>* >& globalIndexOnServer);42 43 38 static std::map<int,int> computeConnectedClients(int nbServer, int nbClient, 44 39 MPI_Comm& clientIntraComm, … … 46 41 47 42 const GlobalIndexMap& getGlobalIndexOnServer() const; 48 // const LocalIndexMap& getLocalIndexSendToServer() const;49 50 protected:51 // void defaultComputeServerIndexMapping(const CArray<size_t,1>& globalIndexOnClient,52 // const std::vector<CArray<size_t,1>* >& globalIndexOnServer,53 // const CArray<int,1>* localIndexOnClient = 0);54 43 55 44 protected: 56 45 //! Global index of data on SERVER, which are calculated by client(s) 57 46 GlobalIndexMap indexGlobalOnServer_; 58 59 //! Index of the local data which will be sent to the corresponding server(s)60 // LocalIndexMap localIndexSend2Server_;61 47 62 48 //!< Number of clients connected to a server -
XIOS/trunk/src/distribution_client.cpp
r821 r831 18 18 , gridMask_(), localDomainIndex_(), localAxisIndex_(), indexMap_(), indexDomainData_(), indexAxisData_() 19 19 , isDataDistributed_(true), axisNum_(0), domainNum_(0), nIndexDomain_(), nIndexAxis_() 20 , globalDataSendToServer_(), localDataIndexSendToServer_(), localDataIndex_(), localMaskIndex_() 20 , localDataIndex_(), localMaskIndex_()//, globalDataSendToServer_(), localDataIndexSendToServer_() 21 , globalLocalDataSendToServerMap_() 21 22 , infoIndex_() 22 23 { … … 30 31 , gridMask_(), localDomainIndex_(), localAxisIndex_(), indexMap_(), indexDomainData_(), indexAxisData_() 31 32 , isDataDistributed_(true), axisNum_(0), domainNum_(0), nIndexDomain_(), nIndexAxis_() 32 , globalDataSendToServer_(), localDataIndexSendToServer_(), localDataIndex_(), localMaskIndex_() 33 , localDataIndex_(), localMaskIndex_()//, globalDataSendToServer_(), localDataIndexSendToServer_() 34 , globalLocalDataSendToServerMap_() 33 35 , infoIndex_() 34 36 { … … 505 507 506 508 // Now allocate these arrays 507 globalDataSendToServer_.resize(indexSend2ServerCount); 509 // globalDataSendToServer_.resize(indexSend2ServerCount); 510 // localDataIndexSendToServer_.resize(indexSend2ServerCount); 508 511 localDataIndex_.resize(indexLocalDataOnClientCount); 509 localDataIndexSendToServer_.resize(indexSend2ServerCount); 512 510 513 localMaskIndex_.resize(indexSend2ServerCount); 511 514 … … 655 658 } 656 659 } 657 globalDataSendToServer_[indexSend2ServerCount] = globalIndex; 658 localDataIndexSendToServer_[indexSend2ServerCount] = indexLocalDataOnClientCount; 660 // globalDataSendToServer_[indexSend2ServerCount] = globalIndex; 661 // localDataIndexSendToServer_[indexSend2ServerCount] = indexLocalDataOnClientCount; 662 globalLocalDataSendToServerMap_[globalIndex] = indexLocalDataOnClientCount; 659 663 localMaskIndex_[indexSend2ServerCount] = gridMaskIndex; 660 664 ++indexSend2ServerCount; … … 710 714 } 711 715 712 const std::vector<size_t>& CDistributionClient::getGlobalDataIndexSendToServer() const 713 { 714 return globalDataSendToServer_; 716 /*! 717 Return global local data mapping of client 718 */ 719 const CDistributionClient::GlobalLocalDataMap& CDistributionClient::getGlobalLocalDataSendToServer() const 720 { 721 return globalLocalDataSendToServerMap_; 715 722 } 716 723 … … 731 738 } 732 739 733 /*!734 Return local data index on client which are sent to servers735 */736 const std::vector<int>& CDistributionClient::getLocalDataIndexSendToServer() const737 {738 return localDataIndexSendToServer_;739 }740 741 740 } // namespace xios -
XIOS/trunk/src/distribution_client.hpp
r818 r831 14 14 #include "domain.hpp" 15 15 #include "grid.hpp" 16 #include <boost/unordered_map.hpp> 16 17 17 18 namespace xios { … … 28 29 class CDistributionClient : public CDistribution 29 30 { 31 public: 32 typedef boost::unordered_map<size_t,int> GlobalLocalDataMap; 33 30 34 public: 31 35 /** Default constructor */ … … 37 41 38 42 virtual const std::vector<int>& getLocalDataIndexOnClient() const; 39 virtual const std::vector<int>& getLocalDataIndexSendToServer() const; 40 const std::vector<size_t>& getGlobalDataIndexSendToServer() const; 43 const GlobalLocalDataMap& getGlobalLocalDataSendToServer() const; 41 44 const std::vector<int>& getLocalMaskIndexOnClient() const; 42 45 … … 72 75 private: 73 76 //!< LocalData index on client 74 std::vector<size_t> globalDataSendToServer_;77 GlobalLocalDataMap globalLocalDataSendToServerMap_; 75 78 std::vector<int> localDataIndex_; 76 std::vector<int> localDataIndexSendToServer_;77 79 std::vector<int> localMaskIndex_; 78 80 … … 164 166 } 165 167 166 167 168 } // namespace xios 168 169 #endif // __XIOS_DISTRIBUTIONCLIENT_HPP__ -
XIOS/trunk/src/node/grid.cpp
r829 r831 459 459 const CClientServerMapping::GlobalIndexMap& globalIndexOnServer = clientServerMap_->getGlobalIndexOnServer(); 460 460 461 const std::vector<size_t>& globalIndexSendToServer = clientDistribution_->getGlobalDataIndexSendToServer(); 461 const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = clientDistribution_->getGlobalLocalDataSendToServer(); 462 CDistributionClient::GlobalLocalDataMap::const_iterator iteGlobalLocalIndexMap = globalLocalIndexSendToServer.end(), itGlobalLocalIndexMap; 462 463 CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itbGlobalMap, itGlobalMap; 463 464 itGlobalMap = itbGlobalMap = globalIndexOnServer.begin(); 464 465 iteGlobalMap = globalIndexOnServer.end(); 465 466 466 typedef XIOSBinarySearchWithIndex<size_t> BinarySearch;467 std::vector<int>::iterator itVec;468 int nbGlobalIndex = globalIndexSendToServer.size();469 467 for (; itGlobalMap != iteGlobalMap; ++itGlobalMap) 470 468 { 471 469 int serverRank = itGlobalMap->first; 472 470 int indexSize = itGlobalMap->second.size(); 473 std::vector<int> permutIndex(indexSize); 474 XIOSAlgorithms::fillInIndex(indexSize, permutIndex); 475 XIOSAlgorithms::sortWithIndex<size_t, CVectorStorage>(itGlobalMap->second, permutIndex); 476 BinarySearch binSearch(itGlobalMap->second); 477 for (int i = 0; i < nbGlobalIndex; ++i) 471 const std::vector<size_t>& indexVec = itGlobalMap->second; 472 for (int idx = 0; idx < indexSize; ++idx) 478 473 { 479 if (binSearch.search(permutIndex.begin(), permutIndex.end(), globalIndexSendToServer[i], itVec)) 480 { 481 if (connectedDataSize_.end() == connectedDataSize_.find(serverRank)) 482 connectedDataSize_[serverRank] = 1; 483 else 484 ++connectedDataSize_[serverRank]; 485 } 474 itGlobalLocalIndexMap = globalLocalIndexSendToServer.find(indexVec[idx]); 475 if (iteGlobalLocalIndexMap != itGlobalLocalIndexMap) 476 { 477 if (connectedDataSize_.end() == connectedDataSize_.find(serverRank)) 478 connectedDataSize_[serverRank] = 1; 479 else 480 ++connectedDataSize_[serverRank]; 481 } 486 482 } 487 483 } … … 788 784 list<CArray<size_t,1> > listOutIndex; 789 785 const CClientServerMapping::GlobalIndexMap& globalIndexOnServer = clientServerMap_->getGlobalIndexOnServer(); 790 const std::vector<int>& localIndexSendToServer = clientDistribution_->getLocalDataIndexSendToServer(); 791 const std::vector<size_t>& globalIndexSendToServer = clientDistribution_->getGlobalDataIndexSendToServer(); 786 const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = clientDistribution_->getGlobalLocalDataSendToServer(); 787 CDistributionClient::GlobalLocalDataMap::const_iterator itIndex = globalLocalIndexSendToServer.begin(), 788 iteIndex = globalLocalIndexSendToServer.end(); 792 789 793 790 if (!doGridHaveDataDistributed()) … … 795 792 if (0 == client->clientRank) 796 793 { 797 CArray<size_t,1> outGlobalIndexOnServer(globalIndexSendToServer.size()); 798 for (int idx = 0; idx < globalIndexSendToServer.size();++idx) 799 outGlobalIndexOnServer(idx) = globalIndexSendToServer[idx]; 800 801 CArray<int,1> outLocalIndexToServer(localIndexSendToServer.size()); 802 for (int idx = 0; idx < localIndexSendToServer.size();++idx) 803 outLocalIndexToServer(idx) = localIndexSendToServer[idx]; 794 int indexSize = globalLocalIndexSendToServer.size(); 795 CArray<size_t,1> outGlobalIndexOnServer(indexSize); 796 CArray<int,1> outLocalIndexToServer(indexSize); 797 for (int idx = 0; itIndex != iteIndex; ++itIndex, ++idx) 798 { 799 outGlobalIndexOnServer(idx) = itIndex->first; 800 outLocalIndexToServer(idx) = itIndex->second; 801 } 804 802 805 803 for (rank = 0; rank < client->serverSize; ++rank) … … 821 819 else 822 820 { 823 CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, it bGlobalMap, itGlobalMap;824 it bGlobalMap = itGlobalMap = globalIndexOnServer.begin();821 CClientServerMapping::GlobalIndexMap::const_iterator iteGlobalMap, itGlobalMap; 822 itGlobalMap = globalIndexOnServer.begin(); 825 823 iteGlobalMap = globalIndexOnServer.end(); 826 824 827 int nbGlobalIndex = globalIndexSendToServer.size();828 825 std::map<int,std::vector<int> >localIndexTmp; 829 826 std::map<int,std::vector<size_t> > globalIndexTmp; 830 831 typedef XIOSBinarySearchWithIndex<size_t> BinarySearch;832 std::vector<int>::iterator itVec;833 827 for (; itGlobalMap != iteGlobalMap; ++itGlobalMap) 834 828 { 835 829 int serverRank = itGlobalMap->first; 836 830 int indexSize = itGlobalMap->second.size(); 837 std::vector<int> permutIndex(indexSize); 838 XIOSAlgorithms::fillInIndex(indexSize, permutIndex); 839 XIOSAlgorithms::sortWithIndex<size_t, CVectorStorage>(itGlobalMap->second, permutIndex); 840 BinarySearch binSearch(itGlobalMap->second); 841 842 for (int i = 0; i < nbGlobalIndex; ++i) 831 const std::vector<size_t>& indexVec = itGlobalMap->second; 832 for (int idx = 0; idx < indexSize; ++idx) 843 833 { 844 if (binSearch.search(permutIndex.begin(), permutIndex.end(), globalIndexSendToServer[i], itVec)) 834 itIndex = globalLocalIndexSendToServer.find(indexVec[idx]); 835 if (iteIndex != itIndex) 845 836 { 846 globalIndexTmp[serverRank].push_back( globalIndexSendToServer[i]);847 localIndexTmp[serverRank].push_back( localIndexSendToServer[i]);837 globalIndexTmp[serverRank].push_back(itIndex->first); 838 localIndexTmp[serverRank].push_back(itIndex->second); 848 839 } 849 840 } -
XIOS/trunk/src/transformation/axis_algorithm_interpolate.cpp
r827 r831 28 28 this->idAuxInputs_[0] = coordinate_; 29 29 } 30 31 // computeIndexSourceMapping();32 30 } 33 31 … … 282 280 this->transformationPosition_.resize(vecAxisValueSize); 283 281 284 const std::vector<size_t>& globalIndexSendToServer = grid->getDistributionClient()->getGlobalDataIndexSendToServer(); 285 const std::vector<int>& localDataSendToServer = grid->getDistributionClient()->getLocalDataIndexSendToServer(); 286 std::vector<int> permutIndex(globalIndexSendToServer.size()); 287 std::vector<int>::iterator itVec; 288 XIOSAlgorithms::fillInIndex(globalIndexSendToServer.size(), permutIndex); 289 XIOSAlgorithms::sortWithIndex<size_t, CVectorStorage>(globalIndexSendToServer, permutIndex); 282 const CDistributionClient::GlobalLocalDataMap& globalLocalIndexSendToServer = grid->getDistributionClient()->getGlobalLocalDataSendToServer(); 283 CDistributionClient::GlobalLocalDataMap::const_iterator itIndex, iteIndex = globalLocalIndexSendToServer.end(); 290 284 size_t axisSrcSize = axisSrc_->index.numElements(); 291 285 std::vector<int> globalDimension = grid->getGlobalDimension(); 292 XIOSBinarySearchWithIndex<size_t> binSearch(globalIndexSendToServer); 286 293 287 for (size_t idx = 0; idx < vecAxisValueSize; ++idx) 294 288 { … … 297 291 { 298 292 size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 299 if ( binSearch.search(permutIndex.begin(), permutIndex.end(), globalIndex, itVec))293 if (iteIndex != globalLocalIndexSendToServer.find(globalIndex)) 300 294 { 301 295 ++axisValueSize; … … 308 302 { 309 303 size_t globalIndex = ((dom->i_index)(idx) + (dom->j_index)(idx)*globalDimension[0]) + (axisSrc_->index)(jdx)*globalDimension[0]*globalDimension[1]; 310 if (binSearch.search(permutIndex.begin(), permutIndex.end(), globalIndex, itVec)) 304 itIndex = globalLocalIndexSendToServer.find(globalIndex); 305 if (iteIndex != itIndex) 311 306 { 312 vecAxisValue[idx](axisValueSize) = (*dataAuxInputs[0])( localDataSendToServer[*itVec]);307 vecAxisValue[idx](axisValueSize) = (*dataAuxInputs[0])(itIndex->second); 313 308 ++axisValueSize; 314 309 } -
XIOS/trunk/src/transformation/generic_algorithm_transformation.cpp
r829 r831 22 22 \param[in] gridDestGlobalDim global size of each dimension of grid source (all dimension must have the same size except of the one on which transformation is performed) 23 23 \param[in] gridSrcGlobalDim dimension size of source grid (it should share the same size for all dimension, maybe except the domain on which transformation is performed) 24 \param[in] globalIndexGridDestSendToServer global index of grid destination on the current client to send to server 25 \param[in] localIndexGridSendToServer local index of grid destination on the current client to send to server 24 \param[in] globalLocalIndexGridDestSendToServer global and local index mapping of grid destination on the current client to send to server 26 25 \param[in/out] globaIndexWeightFromDestToSource mapping between transformed global index of grid destination 27 26 and the weighted value as well as global index from grid index source 28 27 */ 29 28 void CGenericAlgorithmTransformation::computeGlobalSourceIndex(int elementPositionInGrid, 30 const std::vector<int>& gridDestGlobalDim, 31 const std::vector<int>& gridSrcGlobalDim, 32 const std::vector<size_t>& globalIndexGridDestSendToServer, 33 const std::vector<int>& localIndexGridSendToServer, 34 DestinationIndexMap& globaIndexWeightFromDestToSource) 29 const std::vector<int>& gridDestGlobalDim, 30 const std::vector<int>& gridSrcGlobalDim, 31 const GlobalLocalMap& globalLocalIndexGridDestSendToServer, 32 DestinationIndexMap& globaIndexWeightFromDestToSource) 35 33 { 36 34 bool isTransPosEmpty = transformationPosition_.empty(); 37 boost::unordered_map<size_t,int> globalLocalIndexDestSendToServerMap;38 size_t nbGlobalIndexDest = globalIndexGridDestSendToServer.size();39 for (size_t idx = 0; idx < nbGlobalIndexDest; ++idx)40 {41 globalLocalIndexDestSendToServerMap[globalIndexGridDestSendToServer[idx]] = localIndexGridSendToServer[idx];42 }43 44 35 for (size_t idxTrans = 0; idxTrans < transformationMapping_.size(); ++idxTrans) 45 36 { … … 61 52 for (itTransMap = itbTransMap; itTransMap != iteTransMap; ++itTransMap, ++itTransWeight) 62 53 { 63 boost::unordered_map<size_t,int> globalLocalIndexDestMap;64 54 if (!isTransPosEmpty) 65 55 { … … 70 60 gridDestGlobalDim, 71 61 gridSrcGlobalDim, 72 globalLocalIndex DestSendToServerMap,62 globalLocalIndexGridDestSendToServer, 73 63 globalLocalIndexDest, 74 64 globalIndexSrcGrid); … … 83 73 gridDestGlobalDim, 84 74 gridSrcGlobalDim, 85 globalLocalIndex DestSendToServerMap,75 globalLocalIndexGridDestSendToServer, 86 76 globalLocalIndexDest, 87 77 globalIndexSrcGrid); -
XIOS/trunk/src/transformation/generic_algorithm_transformation.hpp
r829 r831 36 36 const std::vector<int>& gridDestGlobalDim, 37 37 const std::vector<int>& gridSrcGlobalDim, 38 const std::vector<size_t>& globalIndexGridDestSendToServer, 39 const std::vector<int>& localIndexGridSendToServer, 38 const GlobalLocalMap& globalLocalIndexGridDestSendToServer, 40 39 DestinationIndexMap& globaIndexWeightFromDestToSource); 41 40 -
XIOS/trunk/src/transformation/grid_transformation.cpp
r829 r831 392 392 // Recalculate the distribution of grid destination 393 393 CDistributionClient distributionClientDest(client->clientRank, gridDestination_); 394 const std::vector<size_t>& globalIndexGridDestSendToServer = distributionClientDest.getGlobalDataIndexSendToServer(); 395 const std::vector<int>& localIndexGridDestSendToServer = distributionClientDest.getLocalDataIndexSendToServer(); 394 const CDistributionClient::GlobalLocalDataMap& globalLocalIndexGridDestSendToServer = distributionClientDest.getGlobalLocalDataSendToServer(); 396 395 397 396 // ComputeTransformation of global index of each element … … 402 401 gridDestinationDimensionSize, 403 402 gridSrcDimensionSize, 404 globalIndexGridDestSendToServer, 405 localIndexGridDestSendToServer, 403 globalLocalIndexGridDestSendToServer, 406 404 globaIndexWeightFromDestToSource); 407 405 … … 443 441 CDistributionClient distributionClientDest(client->clientRank, gridDestination_); 444 442 const std::vector<int>& localMaskIndexOnClientDest = distributionClientDest.getLocalMaskIndexOnClient(); 445 const std::vector<size_t>& globalIndexOnClientDest = distributionClientDest.getGlobalDataIndexSendToServer();446 447 std::vector<size_t>::const_iterator itbArr, itArr, iteArr;443 const CDistributionClient::GlobalLocalDataMap& globalIndexOnClientDest = distributionClientDest.getGlobalLocalDataSendToServer(); 444 445 CDistributionClient::GlobalLocalDataMap::const_iterator itbArr, itArr, iteArr; 448 446 itbArr = globalIndexOnClientDest.begin(); 449 447 iteArr = globalIndexOnClientDest.end(); … … 454 452 for (itArr = itbArr; itArr != iteArr; ++itArr) 455 453 { 456 if (iteGlobalMap != currentGridIndexToOriginalGridIndex_.find( *itArr))457 { 458 const std::vector<std::pair<int, std::pair<size_t,double> > >& vecIndex = currentGridIndexToOriginalGridIndex_[ *itArr];454 if (iteGlobalMap != currentGridIndexToOriginalGridIndex_.find(itArr->first)) 455 { 456 const std::vector<std::pair<int, std::pair<size_t,double> > >& vecIndex = currentGridIndexToOriginalGridIndex_[itArr->first]; 459 457 for (int idx = 0; idx < vecIndex.size(); ++idx) 460 458 { … … 472 470 for (itArr = itbArr; itArr != iteArr; ++itArr) 473 471 { 474 if (iteGlobalMap != currentGridIndexToOriginalGridIndex_.find( *itArr))475 { 476 const std::vector<std::pair<int, std::pair<size_t,double> > >& vecIndex = currentGridIndexToOriginalGridIndex_[ *itArr];472 if (iteGlobalMap != currentGridIndexToOriginalGridIndex_.find(itArr->first)) 473 { 474 const std::vector<std::pair<int, std::pair<size_t,double> > >& vecIndex = currentGridIndexToOriginalGridIndex_[itArr->first]; 477 475 for (int idx = 0; idx < vecIndex.size(); ++idx) 478 476 { … … 731 729 732 730 const CTransformationMapping::ReceivedIndexMap& globalIndexToReceive = transformationMap.getGlobalIndexReceivedOnGridDestMapping(); 733 const CTransformationMapping::SentIndexMap& globalIndexToSend = transformationMap.getGlobalIndexSendToGridDestMapping();734 735 // CDistributionClient distributionClientDest(client->clientRank, gridDestination_);736 // CDistributionClient distributionClientSrc(client->clientRank, originalGridSource_);737 //738 // const std::vector<size_t>& globalIndexOnClientDest = distributionClientDest.getGlobalDataIndexSendToServer();739 // const std::vector<size_t>& globalIndexOnClientSrc = distributionClientSrc.getGlobalDataIndexSendToServer();740 741 // std::vector<size_t>::const_iterator itbArr, itArr, iteArr;742 // std::vector<int>::const_iterator itIndex, itbIndex, iteIndex;743 731 CTransformationMapping::ReceivedIndexMap::const_iterator itbMapRecv, itMapRecv, iteMapRecv; 744 745 // std::vector<int> permutIndex;746 // typedef XIOSBinarySearchWithIndex<size_t> BinarySearch;747 //748 // // Find out local index on grid destination (received)749 // XIOSAlgorithms::fillInIndex(globalIndexOnClientDest.size(), permutIndex);750 // XIOSAlgorithms::sortWithIndex<size_t, CVectorStorage>(globalIndexOnClientDest, permutIndex);751 // itbIndex = permutIndex.begin();752 // iteIndex = permutIndex.end();753 // BinarySearch searchClientDest(globalIndexOnClientDest);754 732 itbMapRecv = globalIndexToReceive.begin(); 755 733 iteMapRecv = globalIndexToReceive.end(); … … 762 740 { 763 741 int vecSize = ((itMapRecv->second)[i]).size(); 764 // std::vector<std::pair<int,double> > tmpVec;765 742 for (int idx = 0; idx < vecSize; ++idx) 766 743 { 767 744 const std::pair<int, std::pair<size_t,double> >& tmpPair = (itMapRecv->second)[i][idx]; 768 745 localIndexToReceiveOnGridDest_[sourceRank][i].push_back(make_pair(tmpPair.first, tmpPair.second.second)); 769 // size_t globalIndex = (itMapRecv->second)[i][idx].first;770 // double weight = (itMapRecv->second)[i][idx].second;771 // if (searchClientDest.search(itbIndex, iteIndex, globalIndex, itIndex))772 // {773 // tmpVec.push_back(make_pair(*itIndex, weight));774 // }775 746 } 776 // localIndexToReceiveOnGridDest_[sourceRank][i] = tmpVec;777 747 } 778 748 } 779 749 780 750 // Find out local index on grid source (to send) 751 const CTransformationMapping::SentIndexMap& globalIndexToSend = transformationMap.getGlobalIndexSendToGridDestMapping(); 781 752 CTransformationMapping::SentIndexMap::const_iterator itbMap, itMap, iteMap; 782 // XIOSAlgorithms::fillInIndex(globalIndexOnClientSrc.size(), permutIndex);783 // XIOSAlgorithms::sortWithIndex<size_t, CVectorStorage>(globalIndexOnClientSrc, permutIndex);784 // itbIndex = permutIndex.begin();785 // iteIndex = permutIndex.end();786 // BinarySearch searchClientSrc(globalIndexOnClientSrc);787 753 itbMap = globalIndexToSend.begin(); 788 754 iteMap = globalIndexToSend.end(); … … 794 760 for (int idx = 0; idx < vecSize; ++idx) 795 761 { 796 // if (searchClientSrc.search(itbIndex, iteIndex, itMap->second[idx], itIndex)) 797 // { 798 localIndexToSendFromGridSource_[destRank](idx) = itMap->second[idx].first; //*itIndex; 799 // } 762 localIndexToSendFromGridSource_[destRank](idx) = itMap->second[idx].first; 800 763 } 801 764 } -
XIOS/trunk/src/transformation/transformation_mapping.cpp
r829 r831 27 27 28 28 CDistributionClient distributionClientSrc(client->clientRank, gridSource_); 29 30 const std::vector<size_t>& globalIndexGridSrc = distributionClientSrc.getGlobalDataIndexSendToServer(); //gridSource_->getDistributionClient()->getGlobalDataIndexSendToServer(); 31 const std::vector<int>& localIndexGridSrc = distributionClientSrc.getLocalDataIndexSendToServer(); 29 const CDistributionClient::GlobalLocalDataMap& globalLocalIndexGridSrc = distributionClientSrc.getGlobalLocalDataSendToServer(); 30 CDistributionClient::GlobalLocalDataMap::const_iterator itIndex = globalLocalIndexGridSrc.begin(), iteIndex = globalLocalIndexGridSrc.end(); 32 31 33 32 // Mapping of global index and pair containing rank and local index 34 33 CClientClientDHTPairIntInt::Index2InfoTypeMap globalIndexOfServer; 35 int globalIndexSize = globalIndexGridSrc.size(); 36 PairIntInt pii; 37 for (int idx = 0; idx < globalIndexSize; ++idx) 38 { 39 pii.first = clientRank; 40 pii.second = localIndexGridSrc[idx]; 41 globalIndexOfServer[globalIndexGridSrc[idx]] = pii; //std::make_pair(clientRank, localIndexGridSrc[idx]); 34 PairIntInt pairIntInt; 35 for (; itIndex != iteIndex; ++itIndex) 36 { 37 pairIntInt.first = clientRank; 38 pairIntInt.second = itIndex->second; 39 globalIndexOfServer[itIndex->first] = pairIntInt; 42 40 } 43 41
Note: See TracChangeset
for help on using the changeset viewer.