Changeset 1202 for XIOS/dev/dev_olga/src/node
- Timestamp:
- 07/10/17 15:16:17 (7 years ago)
- Location:
- XIOS/dev/dev_olga/src/node
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/axis.cpp
r1158 r1202 27 27 , hasBounds_(false), isCompressible_(false) 28 28 , numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 29 , transformationMap_(), hasValue(false), doZoomByIndex_(false),hasLabel(false)29 , transformationMap_(), hasValue(false), hasLabel(false) 30 30 , computedWrittenIndex_(false) 31 31 { … … 38 38 , hasBounds_(false), isCompressible_(false) 39 39 , numberWrittenIndexes_(0), totalNumberWrittenIndexes_(0), offsetWrittenIndexes_(0) 40 , transformationMap_(), hasValue(false), doZoomByIndex_(false),hasLabel(false)40 , transformationMap_(), hasValue(false), hasLabel(false) 41 41 , computedWrittenIndex_(false) 42 42 { … … 365 365 else hasLabel = false; 366 366 } 367 367 368 void CAxis::checkEligibilityForCompressedOutput() 368 369 { 369 370 // We don't check if the mask is valid here, just if a mask has been defined at this point. 370 371 isCompressible_ = !mask.isEmpty(); 372 } 373 374 bool CAxis::zoomByIndex() 375 { 376 return (!global_zoom_index.isEmpty() && (0 != global_zoom_index.numElements())); 371 377 } 372 378 … … 477 483 size_t nbIndex = index.numElements(); 478 484 479 if (doZoomByIndex_) 480 { 481 nZoomCount = zoom_index.numElements(); 482 } 483 else 484 { 485 for (size_t idx = 0; idx < nbIndex; ++idx) 486 { 487 globalLocalIndexMap_[index(idx)] = idx; 488 size_t globalIndex = index(idx); 489 if (globalIndex >= global_zoom_begin && globalIndex <= global_zoom_end) ++nZoomCount; 490 } 491 } 492 493 494 CArray<size_t,1> globalIndexAxis(nbIndex); 495 std::vector<size_t> globalAxisZoom(nZoomCount); 496 nZoomCount = 0; 497 if (doZoomByIndex_) 498 { 499 int nbIndexZoom = zoom_index.numElements(); 500 for (int i = 0; i < nbIndexZoom; ++i) 501 { 502 globalIndexAxis(i) = zoom_index(i); 503 } 504 } 505 else 506 { 507 for (size_t idx = 0; idx < nbIndex; ++idx) 508 { 509 size_t globalIndex = index(idx); 510 globalIndexAxis(idx) = globalIndex; 511 if (globalIndex >= global_zoom_begin && globalIndex <= global_zoom_end) 512 { 513 globalAxisZoom[nZoomCount] = globalIndex; 514 ++nZoomCount; 515 } 516 } 517 518 int end = begin + n -1; 519 zoom_begin = global_zoom_begin > begin ? global_zoom_begin : begin; 520 int zoom_end = global_zoom_end < end ? zoom_end : end; 521 zoom_n = zoom_end-zoom_begin+1; 522 } 523 485 for (size_t idx = 0; idx < nbIndex; ++idx) 486 { 487 globalLocalIndexMap_[index(idx)] = idx; 488 } 524 489 std::set<int> writtenInd; 525 490 if (isCompressible_) … … 593 558 indSrv_.swap(globalIndexAxisOnServer); 594 559 595 CClientServerMapping::GlobalIndexMap::const_iterator it = indSrv_.begin(),560 CClientServerMapping::GlobalIndexMap::const_iterator it = indSrv_.begin(), 596 561 ite = indSrv_.end(); 597 562 … … 625 590 ite = globalLocalIndexMap_.end(), it; 626 591 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), 627 itSrve = writtenGlobalIndex.end(), itSrv; 628 629 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 630 { 631 indGlo = *itSrv; 632 if (ite != globalLocalIndexMap_.find(indGlo)) 633 { 634 ++nbWritten; 635 } 636 } 637 638 localIndexToWriteOnServer.resize(nbWritten); 639 640 nbWritten = 0; 641 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 642 { 643 indGlo = *itSrv; 644 if (ite != globalLocalIndexMap_.find(indGlo)) 645 { 646 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; 647 ++nbWritten; 648 } 592 itSrve = writtenGlobalIndex.end(), itSrv; 593 if (!zoomByIndex()) 594 { 595 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 596 { 597 indGlo = *itSrv; 598 if (ite != globalLocalIndexMap_.find(indGlo)) 599 { 600 ++nbWritten; 601 } 602 } 603 604 localIndexToWriteOnServer.resize(nbWritten); 605 606 nbWritten = 0; 607 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 608 { 609 indGlo = *itSrv; 610 if (ite != globalLocalIndexMap_.find(indGlo)) 611 { 612 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; 613 ++nbWritten; 614 } 615 } 616 } 617 else 618 { 619 nbWritten = 0; 620 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 621 ite = globalLocalIndexMap_.end(), it; 622 for (int i = 0; i < zoom_index.numElements(); ++i) 623 { 624 if (ite != globalLocalIndexMap_.find(zoom_index(i))) 625 ++nbWritten; 626 } 627 628 localIndexToWriteOnServer.resize(nbWritten); 629 630 nbWritten = 0; 631 for (int i = 0; i < zoom_index.numElements(); ++i) 632 { 633 if (ite != globalLocalIndexMap_.find(zoom_index(i))) 634 { 635 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[zoom_index(i)]; 636 ++nbWritten; 637 } 638 } 649 639 } 650 640 … … 731 721 const int begin = serverIndexBegin[*itRank][orderPositionInGrid]; 732 722 const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; 733 const int end = begin + ni - 1; 723 const int end = begin + ni - 1; 734 724 735 725 msgs.push_back(CMessage()); … … 737 727 msg << this->getId(); 738 728 msg << ni << begin << end; 739 msg << global_zoom_begin.getValue() << global_zoom_n.getValue();729 // msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 740 730 msg << isCompressible_; 741 731 msg << orderPositionInGrid; … … 792 782 msg << this->getId(); 793 783 msg << index.getValue() << dataIndex << mask.getValue(); 794 795 msg << doZoomByIndex_;796 if (doZoomByIndex_) msg << zoom_index.getValue();797 784 msg << hasValue; 798 785 if (hasValue) msg << value.getValue(); … … 834 821 mask.reference(tmp_mask); 835 822 836 buffer >> doZoomByIndex_;837 if (doZoomByIndex_)838 {839 buffer >> tmp_zoom_index;840 zoom_index.reference(tmp_zoom_index);841 }842 843 823 buffer >> hasValue; 844 824 if (hasValue) … … 864 844 int ns, n, i, j, ind, nv, idx; 865 845 CContext* context = CContext::getCurrent(); 866 867 //int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 846 868 847 int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 869 848 for (int p = 0; p < nbSrvPools; ++p) … … 903 882 list_mask.push_back(CArray<bool,1>(nbData)); 904 883 905 if (doZoomByIndex_)906 list_zoomInd.push_back(CArray<int,1>(nbData));907 908 884 if (hasValue) 909 885 list_val.push_back(CArray<double,1>(nbData)); … … 926 902 dataIndi(n) = dataIndex(ind); 927 903 maskIndi(n) = mask(ind); 928 929 if (doZoomByIndex_)930 {931 CArray<int,1>& zoomIndi = list_zoomInd.back();932 zoomIndi(n) = zoom_index(ind);933 }934 904 935 905 if (hasValue) … … 950 920 listData.back() << this->getId() 951 921 << list_indi.back() << list_dataInd.back() << list_mask.back(); 952 953 listData.back() << doZoomByIndex_;954 if (doZoomByIndex_)955 listData.back() << list_zoomInd.back();956 922 957 923 listData.back() << hasValue; … … 1003 969 buffer >> vec_mask[idx]; 1004 970 1005 buffer >> doZoomByIndex_;1006 if (doZoomByIndex_)1007 buffer >> vec_zoomInd[idx];1008 1009 971 buffer >> hasValue; 1010 972 if (hasValue) … … 1075 1037 data_begin.setValue(0); 1076 1038 1077 if (doZoomByIndex_)1078 {1079 int nbZoomIndex = 0;1080 for (int idx = 0; idx < nbReceived; ++idx)1081 {1082 nbZoomIndex += vec_zoomInd[idx].numElements();1083 }1084 1085 zoom_index.resize(nbZoomIndex);1086 nbZoomIndex = 0;1087 for (int idx = 0; idx < nbReceived; ++idx)1088 {1089 CArray<int,1>& tmp = vec_zoomInd[idx];1090 for (int i = 0; i < tmp.size(); ++i)1091 {1092 zoom_index(nbZoomIndex) = tmp(i);1093 ++nbZoomIndex;1094 }1095 }1096 }1097 1098 1039 if (hasLabel) 1099 1040 { … … 1112 1053 void CAxis::recvDistributionAttribute(CBufferIn& buffer) 1113 1054 { 1114 int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_n_tmp; 1055 int ni_srv, begin_srv, end_srv; 1056 int global_zoom_end, zoom_end; 1057 bool zoomIndex = zoomByIndex(); 1058 1059 std::vector<int> zoom_index_tmp; 1060 std::vector<int>::iterator itZoomBegin, itZoomEnd, itZoom; 1115 1061 1116 1062 buffer >> ni_srv >> begin_srv >> end_srv; 1117 buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp;1063 // buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 1118 1064 buffer >> isCompressible_; 1119 1065 buffer >> orderPosInGrid; 1120 buffer >> globalDimGrid; 1121 1066 buffer >> globalDimGrid; 1067 1068 // Set up new local size of axis on the receiving clients 1122 1069 n.setValue(ni_srv); 1123 1070 begin.setValue(begin_srv); 1124 global_zoom_begin = global_zoom_begin_tmp; 1125 global_zoom_n = global_zoom_n_tmp; 1126 int global_zoom_end = global_zoom_begin + global_zoom_n - 1; 1127 1128 zoom_begin = global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 1129 zoom_end_srv = global_zoom_end < end_srv ? global_zoom_end : end_srv ; 1130 zoom_n = zoom_end_srv - zoom_begin_srv + 1; 1071 1072 // If we have zoom by index then process it 1073 if (zoomIndex) 1074 { 1075 zoom_index_tmp.resize(global_zoom_index.numElements()); 1076 std::copy(global_zoom_index.begin(), global_zoom_index.end(), zoom_index_tmp.begin()); 1077 std::sort(zoom_index_tmp.begin(), zoom_index_tmp.end()); 1078 itZoomBegin = std::lower_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), begin_srv); 1079 itZoomEnd = std::upper_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), end_srv); 1080 int sz = std::distance(itZoomBegin, itZoomEnd); 1081 zoom_index.resize(sz); 1082 itZoom = itZoomBegin; 1083 for (int i = 0; i < sz; ++i, ++itZoom) 1084 { 1085 zoom_index(i) = *(itZoom); 1086 } 1087 } 1088 1089 global_zoom_begin = zoomIndex ? 0 : global_zoom_begin ; 1090 global_zoom_n = zoomIndex ? zoom_index_tmp.size() : global_zoom_n; 1091 global_zoom_end = global_zoom_begin + global_zoom_n - 1; 1092 1093 zoom_begin = zoomIndex ? std::distance(itZoomBegin, zoom_index_tmp.begin()) 1094 : global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 1095 zoom_end = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomEnd) - 1 1096 : global_zoom_end < end_srv ? global_zoom_end : end_srv ; 1097 zoom_n = zoom_end - zoom_begin + 1; 1131 1098 1132 1099 if (zoom_n<=0) 1133 1100 { 1134 zoom_begin = 0; zoom_ end_srv = 0; zoom_n = 0;1101 zoom_begin = 0; zoom_n = 0; 1135 1102 } 1136 1103 1137 1104 if (n_glo == n) 1138 1105 { 1139 zoom_begin = global_zoom_begin;1140 zoom_end_srv = global_zoom_end; //zoom_end;1141 zoom_n = zoom _end_srv - zoom_begin + 1;1106 zoom_begin = zoomIndex ? std::distance(itZoomBegin, zoom_index_tmp.begin()) 1107 : global_zoom_begin; 1108 zoom_n = zoomIndex ? zoom_index_tmp.size() : global_zoom_n; 1142 1109 } 1143 1110 } -
XIOS/dev/dev_olga/src/node/axis.hpp
r1201 r1202 119 119 CTransformation<CAxis>* addTransformation(ETranformationType transType, const StdString& id=""); 120 120 bool isEqual(CAxis* axis); 121 bool zoomByIndex(); 121 122 122 public: 123 int zoom_begin_srv, zoom_end_srv, zoom_size_srv; 124 int ni_srv, begin_srv, end_srv; 125 int global_zoom_begin_srv, global_zoom_end_srv, global_zoom_size_srv; 126 CArray<double,1> value_srv; 127 CArray<double,2> bound_srv; 123 public: 128 124 CArray<StdString,1> label_srv; 129 CArray<int,1> zoom_index_srv;130 125 bool hasValue; 131 126 CArray<int,1> globalDimGrid; … … 146 141 void computeConnectedServer(const std::vector<int>& globalDim, int orderPositionInGrid, 147 142 CServerDistributionDescription::ServerDistributionType distType); 148 bool zoomByIndex();149 143 150 144 void sendNonDistributedAttributes(void); … … 175 169 std::map<int, CArray<int,1> > indiSrv_; 176 170 bool hasBounds_; 177 bool hasLabel; 178 bool doZoomByIndex_; 171 bool hasLabel; 179 172 bool computedWrittenIndex_; 180 173 -
XIOS/dev/dev_olga/src/node/domain.cpp
r1201 r1202 2463 2463 } 2464 2464 2465 globalLocalIndexMap_.rehash(std::ceil(nbIndGlob/globalLocalIndexMap_.max_load_factor())); 2465 2466 i_index.resize(nbIndGlob); 2466 j_index.resize(nbIndGlob); 2467 2468 globalLocalIndexMap_.rehash(std::ceil(nbIndGlob/globalLocalIndexMap_.max_load_factor())); 2467 j_index.resize(nbIndGlob); 2469 2468 nbIndGlob = 0; 2470 2469 for (i = 0; i < nbReceived; ++i) … … 2474 2473 { 2475 2474 index = tmp(ind); 2476 i_index(nbIndGlob) = index % ni_glo; 2477 j_index(nbIndGlob) = index / ni_glo; 2478 globalLocalIndexMap_[index] = nbIndGlob; 2479 ++nbIndGlob; 2475 if (0 == globalLocalIndexMap_.count(index)) 2476 { 2477 i_index(nbIndGlob) = index % ni_glo; 2478 j_index(nbIndGlob) = index / ni_glo; 2479 globalLocalIndexMap_[index] = nbIndGlob; 2480 ++nbIndGlob; 2481 } 2480 2482 } 2481 2483 } 2484 2485 i_index.resizeAndPreserve(nbIndGlob); 2486 j_index.resizeAndPreserve(nbIndGlob); 2482 2487 } 2483 2488 … … 2630 2635 void CDomain::recvMask(std::map<int, CBufferIn*>& rankBuffers) 2631 2636 { 2632 int nbReceived = rankBuffers.size(), i, ind, index ;2637 int nbReceived = rankBuffers.size(), i, ind, index, lInd; 2633 2638 if (nbReceived != recvClientRanks_.size()) 2634 ERROR("void CDomain::recv Area(std::map<int, CBufferIn*>& rankBuffers)",2639 ERROR("void CDomain::recvMask(std::map<int, CBufferIn*>& rankBuffers)", 2635 2640 << "The number of sending clients is not correct." 2636 2641 << "Expected number: " << recvClientRanks_.size() << " but received " << nbReceived); … … 2650 2655 } 2651 2656 2657 if (nbMaskInd != globalLocalIndexMap_.size()) 2658 info (0) << "If the domain " << this->getDomainOutputName() <<" does not have overlapped region between processes." 2659 << "Something must be wrong with mask index "<< std::endl; 2660 2661 nbMaskInd = globalLocalIndexMap_.size(); 2652 2662 mask_1d.resize(nbMaskInd); 2653 nbMaskInd = 0;2663 2654 2664 for (i = 0; i < nbReceived; ++i) 2655 2665 { 2666 CArray<int,1>& tmpInd = indGlob_[recvClientRanks_[i]]; 2656 2667 CArray<bool,1>& tmp = recvMaskValue[i]; 2657 2668 for (ind = 0; ind < tmp.numElements(); ++ind) 2658 2669 { 2659 mask_1d(nbMaskInd) = tmp(ind);2660 ++nbMaskInd;2670 lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; 2671 mask_1d(lInd) = tmp(ind); 2661 2672 } 2662 2673 } … … 2717 2728 2718 2729 if (nbLonInd != globalLocalIndexMap_.size()) 2719 info (0) << "Something wrong with longitude index "<< std::endl; 2720 2730 info (0) << "If the domain " << this->getDomainOutputName() <<" does not have overlapped region between processes." 2731 << "Something must be wrong with longitude index "<< std::endl; 2732 2733 nbLonInd = globalLocalIndexMap_.size(); 2721 2734 lonvalue.resize(nbLonInd); 2722 2735 if (hasBounds) … … 2799 2812 2800 2813 if (nbLatInd != globalLocalIndexMap_.size()) 2801 info (0) << "Something wrong with latitude index "<< std::endl; 2802 2814 info (0) << "If the domain " << this->getDomainOutputName() <<" does not have overlapped region between processes." 2815 << "Something must be wrong with latitude index "<< std::endl; 2816 2817 nbLatInd = globalLocalIndexMap_.size(); 2803 2818 latvalue.resize(nbLatInd); 2804 2819 if (hasBounds) … … 2870 2885 } 2871 2886 2872 int nbAreaInd = 0;2873 for (i = 0; i < nbReceived; ++i)2874 {2875 nbAreaInd += recvAreaValue[i].numElements();2876 }2877 2878 if (nbAreaInd != globalLocalIndexMap_.size())2879 info (0) << "Something wrong with latitude index "<< std::endl;2880 2881 2887 if (hasArea) 2882 2888 { 2889 int nbAreaInd = 0; 2890 for (i = 0; i < nbReceived; ++i) 2891 { 2892 nbAreaInd += recvAreaValue[i].numElements(); 2893 } 2894 2895 if (nbAreaInd != globalLocalIndexMap_.size()) 2896 info (0) << "If the domain " << this->getDomainOutputName() <<" does not have overlapped region between processes." 2897 << "Something must be wrong with area index "<< std::endl; 2898 2899 nbAreaInd = globalLocalIndexMap_.size(); 2883 2900 areavalue.resize(nbAreaInd); 2884 2901 nbAreaInd = 0; … … 2988 3005 { 2989 3006 lInd = globalLocalIndexMap_[size_t(tmpInd(ind))]; 2990 dataIIndex(lInd) = tmpI(ind);2991 dataJIndex(lInd) = tmpJ(ind);3007 dataIIndex(lInd) = (-1 == dataIIndex(lInd)) ? tmpI(ind) : dataIIndex(lInd); // Only fill in dataIndex if there is no data 3008 dataJIndex(lInd) = (-1 == dataJIndex(lInd)) ? tmpJ(ind) : dataJIndex(lInd); 2992 3009 } 2993 3010 } -
XIOS/dev/dev_olga/src/node/grid.cpp
r1201 r1202 287 287 nbSrvPools = 1; 288 288 for (int p = 0; p < nbSrvPools; ++p) 289 { 290 if (isScalarGrid()) 291 { 292 if (context->hasClient) 293 if (this->isChecked && doSendingIndex && !isIndexSent) { sendIndexScalarGrid(); this->isIndexSent = true; } 294 295 if (this->isChecked) continue; 296 297 if (context->hasClient) 298 { 299 this->computeIndexScalarGrid(); 300 } 301 302 if (!(this->hasTransform() && !this->isTransformed())) 303 this->isChecked = true; 304 continue; 289 { 290 if (context->hasClient && this->isChecked && doSendingIndex && !isIndexSent) 291 { 292 if (isScalarGrid()) 293 sendIndexScalarGrid(); 294 else 295 sendIndex(); 296 this->isIndexSent = true; 305 297 } 306 298 307 if (context->hasClient) 308 { 309 if (this->isChecked && doSendingIndex && !isIndexSent) 310 {sendIndex(); this->isIndexSent = true;} 311 } 299 // Not sure about this 300 //if (!(this->hasTransform() && !this->isTransformed())) 301 // this->isChecked = true; 302 //return; 312 303 } 313 304 … … 546 537 if (computedWrittenIndex_) return; 547 538 computedWrittenIndex_ = true; 539 540 if (isScalarGrid()) 541 { 542 size_t nbWritten = 1; 543 int writtenIndex = 0; 544 545 localIndexToWriteOnClient.resize(nbWritten); 546 localIndexToWriteOnServer.resize(nbWritten); 547 localIndexToWriteOnServer(0) = writtenIndex; 548 localIndexToWriteOnClient(0) = writtenIndex; 549 550 return; 551 } 548 552 549 553 size_t nbWritten = 0, indGlo; … … 746 750 { 747 751 CContext* context = CContext::getCurrent(); 748 computeClientIndex(); 749 if (context->hasClient) 752 if (isScalarGrid()) 750 753 { 751 computeConnectedClients(); 754 computeClientIndexScalarGrid(); 755 if (context->hasClient) 756 { 757 computeConnectedClientsScalarGrid(); 758 } 759 } 760 else 761 { 762 computeClientIndex(); 763 if (context->hasClient) 764 { 765 computeConnectedClients(); 766 } 752 767 } 753 768 } … … 1171 1186 } 1172 1187 1173 void CGrid::computeIndexScalarGrid() 1188 void CGrid::computeClientIndexScalarGrid() 1189 { 1190 CContext* context = CContext::getCurrent(); 1191 int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; // This should be changed soon 1192 for (int p = 0; p < nbSrvPools; ++p) 1193 { 1194 CContextClient* client = (context->hasServer) ? (context->hasClient ? context->clientPrimServer[p] : context->client) 1195 : context->client; 1196 1197 storeIndex_client.resize(1); 1198 storeIndex_client(0) = 0; 1199 1200 if (0 != serverDistribution_) 1201 { 1202 map<int, CArray<size_t, 1> >::iterator itb = outGlobalIndexFromClient.begin(), 1203 ite = outGlobalIndexFromClient.end(), it; 1204 for (it = itb; it != ite; ++it) 1205 { 1206 int rank = it->first; 1207 CArray<size_t,1>& globalIndex = outGlobalIndexFromClient[rank]; 1208 outLocalIndexStoreOnClient.insert(make_pair(rank, CArray<size_t,1>(globalIndex.numElements()))); 1209 CArray<size_t,1>& localIndex = outLocalIndexStoreOnClient[rank]; 1210 if (1 != globalIndex.numElements()) 1211 ERROR("void CGrid::computeClientIndexScalarGrid()", 1212 << "Something wrong happened. " 1213 << "Number of received global index on scalar grid should equal to 1" 1214 << "Number of received global index " << globalIndex.numElements() << "."); 1215 1216 localIndex(0) = globalIndex(0); 1217 } 1218 } 1219 } 1220 } 1221 1222 void CGrid::computeConnectedClientsScalarGrid() 1174 1223 { 1175 1224 CContext* context = CContext::getCurrent(); … … 1181 1230 for (int p = 0; p < nbSrvPools; ++p) 1182 1231 { 1183 CContextClient* client = context->hasServer ? context->clientPrimServer[p] : context->client; 1184 1185 storeIndex_client.resize(1); 1186 storeIndex_client(0) = 0; 1232 CContextClient* client = (context->hasServer) ? (context->hasClient ? context->clientPrimServer[p] : context->client) 1233 : context->client; 1187 1234 1188 1235 connectedServerRank_[p].clear(); 1189 1236 1190 if (0 == client->clientRank) 1191 { 1192 for (int rank = 0; rank < client->serverSize; ++rank) 1193 { 1237 if (client->isServerLeader()) 1238 { 1239 const std::list<int>& ranks = client->getRanksServerLeader(); 1240 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 1241 { 1242 int rank = *itRank; 1243 int nb = 1; 1194 1244 connectedServerRank_[p].push_back(rank); 1195 connectedDataSize_[p][rank] = 1; 1196 nbSenders[p][rank] = 1; 1197 } 1198 } 1245 connectedDataSize_[p][rank] = nb; 1246 nbSenders[p][rank] = nb; 1247 } 1248 } 1249 else 1250 { 1251 const std::list<int>& ranks = client->getRanksServerNotLeader(); 1252 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 1253 { 1254 int rank = *itRank; 1255 int nb = 1; 1256 connectedServerRank_[p].push_back(rank); 1257 connectedDataSize_[p][rank] = nb; 1258 nbSenders[p][rank] = nb; 1259 } 1260 } 1261 1199 1262 isDataDistributed_ = false; 1200 1263 } … … 1433 1496 std::vector<CAxis*> axisList = getAxis(); 1434 1497 std::vector<int> nZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize), nZoomBeginGlobal(ssize), nGlobElement(numElement); 1435 std::vector<CArray<int,1> > zoomIndex;1498 std::vector<CArray<int,1> > globalZoomIndex(numElement); 1436 1499 for (int i = 0; i < numElement; ++i) 1437 1500 { … … 1449 1512 nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; 1450 1513 1514 { 1515 int count = 0; 1516 globalZoomIndex[i].resize(nZoomSize[indexMap[i]]*nZoomSize[indexMap[i]+1]); 1517 for (int jdx = 0; jdx < nZoomSize[indexMap[i]+1]; ++jdx) 1518 for (int idx = 0; idx < nZoomSize[indexMap[i]]; ++idx) 1519 { 1520 globalZoomIndex[i](count) = (nZoomBegin[indexMap[i]] + idx) + (nZoomBegin[indexMap[i]+1] + jdx) * nGlob[indexMap[i]]; 1521 ++count; 1522 } 1523 } 1524 1451 1525 ++domainId; 1452 1526 } … … 1456 1530 nZoomSize[indexMap[i]] = axisList[axisId]->zoom_n; 1457 1531 nZoomBeginGlobal[indexMap[i]] = axisList[axisId]->global_zoom_begin; 1458 nGlob[indexMap[i]] = axisList[axisId]->n_glo; 1532 nGlob[indexMap[i]] = axisList[axisId]->n_glo; 1533 if (axisList[axisId]->zoomByIndex()) 1534 { 1535 globalZoomIndex[i].reference(axisList[axisId]->zoom_index); 1536 } 1537 else 1538 { 1539 globalZoomIndex[i].resize(nZoomSize[indexMap[i]]); 1540 for (int idx = 0; idx < nZoomSize[indexMap[i]]; ++idx) 1541 globalZoomIndex[i](idx) = nZoomBegin[indexMap[i]] + idx; 1542 } 1543 1459 1544 ++axisId; 1460 1545 } … … 1465 1550 nZoomBeginGlobal[indexMap[i]] = 0; 1466 1551 nGlob[indexMap[i]] = 1; 1467 1552 globalZoomIndex[i].resize(1); 1553 globalZoomIndex[i](0) = 0; 1468 1554 ++scalarId; 1469 1555 } … … 1473 1559 for (int i = 0; i < nZoomSize.size(); ++i) 1474 1560 dataSize *= nZoomSize[i]; 1475 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 1476 nZoomBeginGlobal, nGlob); 1561 // serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 1562 // nZoomBeginGlobal, nGlob); 1563 serverDistribution_ = new CDistributionServer(server->intraCommRank, 1564 globalZoomIndex, axis_domain_order, 1565 nZoomBegin, nZoomSize, nZoomBeginGlobal, nGlob); 1477 1566 } 1478 1567 -
XIOS/dev/dev_olga/src/node/grid.hpp
r1201 r1202 278 278 void computeClientIndex(); 279 279 void computeConnectedClients(); 280 void computeClientIndexScalarGrid(); 281 void computeConnectedClientsScalarGrid(); 280 282 281 283 private:
Note: See TracChangeset
for help on using the changeset viewer.