Changeset 552 for XIOS/trunk/src/node/grid.cpp
- Timestamp:
- 02/11/15 16:23:07 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/grid.cpp
r551 r552 11 11 #include "context.hpp" 12 12 #include "context_client.hpp" 13 #include "context_server.hpp" 13 14 #include "array_new.hpp" 14 15 … … 22 23 , storeIndex(1), out_i_index(1), out_j_index(1), out_l_index(1), isDomConServerComputed_(false) 23 24 , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false) 25 , serverDistribution_(0) 24 26 { 25 27 setVirtualDomainGroup(); … … 32 34 , storeIndex(1), out_i_index(1), out_j_index(1), out_l_index(1), isDomConServerComputed_(false) 33 35 , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false) 36 , serverDistribution_(0) 34 37 { 35 38 setVirtualDomainGroup(); … … 55 58 56 59 if (0 != clientDistribution_) delete clientDistribution_; 60 if (0 != serverDistribution_) delete serverDistribution_; 57 61 58 62 } … … 807 811 void CGrid::recvIndex(int rank, CBufferIn& buffer) 808 812 { 813 if (0 == serverDistribution_) 814 { 815 CContext* context = CContext::getCurrent() ; 816 CContextServer* server=context->server ; 817 int idx = 0, numElement = axisDomainOrder.numElements(); 818 int ssize = numElement; 819 std::vector<int> indexMap(numElement); 820 for (int i = 0; i < numElement; ++i) 821 { 822 indexMap[i] = idx; 823 if (true == axisDomainOrder(i)) 824 { 825 ++ssize; 826 idx += 2; 827 } 828 } 829 830 int axisId = 0, domainId = 0; 831 std::vector<CDomain*> domainList = getDomains(); 832 std::vector<CAxis*> axisList = getAxis(); 833 std::vector<int> nZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize); 834 for (int i = 0; i < numElement; ++i) 835 { 836 if (axisDomainOrder(i)) 837 { 838 nZoomBegin[indexMap[i]] = domainList[domainId]->zoom_ibegin_srv; 839 nZoomSize[indexMap[i]] = domainList[domainId]->zoom_ni_srv; 840 nGlob[indexMap[i]] = domainList[domainId]->ni_glo; 841 842 nZoomBegin[indexMap[i]+1] = domainList[domainId]->zoom_jbegin_srv; 843 nZoomSize[indexMap[i]+1] = domainList[domainId]->zoom_nj_srv; 844 nGlob[indexMap[i]+1] = domainList[domainId]->nj_glo; 845 ++domainId; 846 } 847 else 848 { 849 nZoomBegin[indexMap[i]] = axisList[axisId]->zoom_begin; 850 nZoomSize[indexMap[i]] = axisList[axisId]->zoom_size; 851 nGlob[indexMap[i]] = axisList[axisId]->size; 852 ++axisId; 853 } 854 } 855 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, nGlob); 856 } 857 809 858 CArray<size_t,1> outIndex; 810 859 buffer>>outIndex; 860 serverDistribution_->computeLocalIndex(outIndex); 811 861 outIndexFromClient.insert(std::pair<int, CArray<size_t,1>* >(rank, new CArray<size_t,1>(outIndex))); 812 862
Note: See TracChangeset
for help on using the changeset viewer.