Changeset 598 for XIOS/trunk/src/node/grid.cpp
- Timestamp:
- 05/26/15 16:13:47 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/grid.cpp
r595 r598 669 669 void CGrid::recvIndex(CEventServer& event) 670 670 { 671 list<CEventServer::SSubEvent>::iterator it ; 671 string gridId; 672 vector<int> ranks; 673 vector<CBufferIn*> buffers; 674 675 list<CEventServer::SSubEvent>::iterator it; 672 676 for (it=event.subEvents.begin();it!=event.subEvents.end();++it) 673 677 { 674 int rank=it->rank;675 CBufferIn* buffer =it->buffer;676 string gridId;677 *buffer>>gridId;678 get(gridId)->recvIndex(rank,*buffer) ;679 }678 ranks.push_back(it->rank); 679 CBufferIn* buffer = it->buffer; 680 *buffer >> gridId; 681 buffers.push_back(buffer); 682 } 683 get(gridId)->recvIndex(ranks, buffers) ; 680 684 } 681 685 … … 748 752 } 749 753 750 void CGrid::recvIndex(int rank, CBufferIn& buffer) 751 { 752 CContext* context = CContext::getCurrent() ; 753 CContextServer* server=context->server ; 754 buffer>>isDataDistributed_; 755 size_t dataSize = 0; 756 757 if (true == scalar_grid) 758 { 759 writtenDataSize_ = 1; 760 CArray<size_t,1> outIndex; 761 buffer>>outIndex; 762 outIndexFromClient.insert(std::pair<int, CArray<size_t,1>* >(rank, new CArray<size_t,1>(outIndex))); 763 std::vector<int> nZoomBegin(1,0), nZoomSize(1,1), nGlob(1,1), nZoomBeginGlobal(1,0); 764 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 765 nZoomBeginGlobal, nGlob); 766 return; 767 } 768 769 770 if (0 == serverDistribution_) 771 { 772 int idx = 0, numElement = axis_domain_order.numElements(); 773 int ssize = numElement; 774 std::vector<int> indexMap(numElement); 775 for (int i = 0; i < numElement; ++i) 776 { 777 indexMap[i] = idx; 778 if (true == axis_domain_order(i)) 779 { 754 void CGrid::recvIndex(vector<int> ranks, vector<CBufferIn*> buffers) 755 { 756 CContext* context = CContext::getCurrent(); 757 CContextServer* server = context->server; 758 759 for (int n = 0; n < ranks.size(); n++) 760 { 761 int rank = ranks[n]; 762 CBufferIn& buffer = *buffers[n]; 763 764 buffer >> isDataDistributed_; 765 size_t dataSize = 0; 766 767 if (true == scalar_grid) 768 { 769 writtenDataSize_ = 1; 770 CArray<size_t,1> outIndex; 771 buffer >> outIndex; 772 outIndexFromClient.insert(std::pair<int, CArray<size_t,1>* >(rank, new CArray<size_t,1>(outIndex))); 773 std::vector<int> nZoomBegin(1,0), nZoomSize(1,1), nGlob(1,1), nZoomBeginGlobal(1,0); 774 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 775 nZoomBeginGlobal, nGlob); 776 return; 777 } 778 779 if (0 == serverDistribution_) 780 { 781 int idx = 0, numElement = axis_domain_order.numElements(); 782 int ssize = numElement; 783 std::vector<int> indexMap(numElement); 784 for (int i = 0; i < numElement; ++i) 785 { 786 indexMap[i] = idx; 787 if (true == axis_domain_order(i)) 788 { 780 789 ++ssize; 781 790 idx += 2; 782 }783 else784 ++idx;785 }786 787 int axisId = 0, domainId = 0;788 std::vector<CDomain*> domainList = getDomains();789 std::vector<CAxis*> axisList = getAxis();790 std::vector<int> nZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize), nZoomBeginGlobal(ssize);791 for (int i = 0; i < numElement; ++i)792 {793 if (axis_domain_order(i))794 {795 nZoomBegin[indexMap[i]] 796 nZoomSize[indexMap[i]] 791 } 792 else 793 ++idx; 794 } 795 796 int axisId = 0, domainId = 0; 797 std::vector<CDomain*> domainList = getDomains(); 798 std::vector<CAxis*> axisList = getAxis(); 799 std::vector<int> nZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize), nZoomBeginGlobal(ssize); 800 for (int i = 0; i < numElement; ++i) 801 { 802 if (axis_domain_order(i)) 803 { 804 nZoomBegin[indexMap[i]] = domainList[domainId]->zoom_ibegin_srv; 805 nZoomSize[indexMap[i]] = domainList[domainId]->zoom_ni_srv; 797 806 nZoomBeginGlobal[indexMap[i]] = domainList[domainId]->zoom_ibegin; 798 nGlob[indexMap[i]] 799 800 nZoomBegin[indexMap[i] +1] = domainList[domainId]->zoom_jbegin_srv;801 nZoomSize[indexMap[i] +1]= domainList[domainId]->zoom_nj_srv;802 nZoomBeginGlobal[indexMap[i] +1] = domainList[domainId]->zoom_jbegin;803 nGlob[indexMap[i] +1]= domainList[domainId]->nj_glo;807 nGlob[indexMap[i]] = domainList[domainId]->ni_glo; 808 809 nZoomBegin[indexMap[i] + 1] = domainList[domainId]->zoom_jbegin_srv; 810 nZoomSize[indexMap[i] + 1] = domainList[domainId]->zoom_nj_srv; 811 nZoomBeginGlobal[indexMap[i] + 1] = domainList[domainId]->zoom_jbegin; 812 nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; 804 813 ++domainId; 805 }806 else807 {814 } 815 else 816 { 808 817 nZoomBegin[indexMap[i]] = axisList[axisId]->zoom_begin_srv; 809 818 nZoomSize[indexMap[i]] = axisList[axisId]->zoom_size_srv; 810 819 nZoomBeginGlobal[indexMap[i]] = axisList[axisId]->zoom_begin; 811 nGlob[indexMap[i]] 820 nGlob[indexMap[i]] = axisList[axisId]->size; 812 821 ++axisId; 813 } 814 } 815 dataSize = 1; 816 for (int i = 0; i < nZoomSize.size(); ++i) 817 dataSize *= nZoomSize[i]; 818 819 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 820 nZoomBeginGlobal, nGlob); 821 } 822 823 CArray<size_t,1> outIndex; 824 buffer>>outIndex; 825 if (isDataDistributed_) 826 serverDistribution_->computeLocalIndex(outIndex); 827 else 828 { 829 dataSize = outIndex.numElements(); 830 for (int i = 0; i < outIndex.numElements(); ++i) outIndex(i) = i; 831 } 832 writtenDataSize_ += dataSize; 833 834 outIndexFromClient.insert(std::pair<int, CArray<size_t,1>* >(rank, new CArray<size_t,1>(outIndex))); 822 } 823 } 824 dataSize = 1; 825 for (int i = 0; i < nZoomSize.size(); ++i) 826 dataSize *= nZoomSize[i]; 827 828 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 829 nZoomBeginGlobal, nGlob); 830 } 831 832 CArray<size_t,1> outIndex; 833 buffer >> outIndex; 834 if (isDataDistributed_) 835 serverDistribution_->computeLocalIndex(outIndex); 836 else 837 { 838 dataSize = outIndex.numElements(); 839 for (int i = 0; i < outIndex.numElements(); ++i) outIndex(i) = i; 840 } 841 writtenDataSize_ += dataSize; 842 843 outIndexFromClient.insert(std::pair<int, CArray<size_t,1>* >(rank, new CArray<size_t,1>(outIndex))); 844 connectedDataSize_[rank] = outIndex.numElements(); 845 } 846 847 nbSenders = CClientServerMappingDistributed::computeConnectedClients(context->client->serverSize, context->client->clientSize, context->client->intraComm, ranks); 835 848 } 836 849
Note: See TracChangeset
for help on using the changeset viewer.