Changeset 1559 for XIOS/trunk/src/node
- Timestamp:
- 07/12/18 19:12:32 (6 years ago)
- Location:
- XIOS/trunk/src/node
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/axis.cpp
r1558 r1559 302 302 { 303 303 this->checkData(); 304 this->checkZoom();305 304 this->checkMask(); 306 305 this->checkLabel(); … … 333 332 } 334 333 335 /*!336 Check validity of zoom info and fill in values if any.337 */338 void CAxis::checkZoom(void)339 {340 if (global_zoom_begin.isEmpty()) global_zoom_begin.setValue(0);341 if (global_zoom_n.isEmpty()) global_zoom_n.setValue(n_glo.getValue());342 if (zoom_index.isEmpty())343 {344 zoom_index.setValue(index.getValue());345 }346 if (zoom_n.isEmpty()) zoom_n.setValue(n);347 if (zoom_begin.isEmpty()) zoom_begin.setValue(begin);348 }349 350 334 size_t CAxis::getGlobalWrittenSize(void) 351 335 { 352 if (zoomByIndex()) return global_zoom_index.numElements(); 353 else return global_zoom_n ; 336 return n_glo ; 354 337 } 355 338 … … 416 399 // We don't check if the mask is valid here, just if a mask has been defined at this point. 417 400 isCompressible_ = !mask.isEmpty(); 418 }419 420 /*421 Check whether we do zooming by indexing422 return true if do zooming by index423 */424 bool CAxis::zoomByIndex()425 {426 return (!global_zoom_index.isEmpty() && (0 != global_zoom_index.numElements()));427 401 } 428 402 … … 561 535 size_t ni = this->n.getValue(); 562 536 size_t ibegin = this->begin.getValue(); 563 size_t global_zoom_end = global_zoom_begin+global_zoom_n-1;564 size_t nZoomCount = 0;565 537 size_t nbIndex = index.numElements(); 566 538 … … 585 557 { 586 558 ind += ibegin; 587 if (ind >= global_zoom_begin && ind <= global_zoom_end) 588 writtenInd.insert(ind); 559 writtenInd.insert(ind); 589 560 } 590 561 } … … 680 651 // We describe the distribution of client (server) on which data are written 681 652 std::vector<int> nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); 682 nBegin[0] = zoom_begin;683 nSize[0] = zoom_n;653 nBegin[0] = 0; 654 nSize[0] = n; 684 655 nBeginGlobal[0] = 0; 685 656 nGlob[0] = n_glo; … … 694 665 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), 695 666 itSrve = writtenGlobalIndex.end(), itSrv; 696 if (!zoomByIndex()) 697 { 698 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 699 { 700 indGlo = *itSrv; 701 if (ite != globalLocalIndexMap_.find(indGlo)) 702 { 703 ++nbWritten; 704 } 705 } 706 707 localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements()); 667 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 668 { 669 indGlo = *itSrv; 670 if (ite != globalLocalIndexMap_.find(indGlo)) 671 { 672 ++nbWritten; 673 } 674 } 675 676 localIndexToWriteOnServer.resize(writtenGlobalIndex.numElements()); 708 677 // localIndexToWriteOnServer.resize(nbWritten); 709 678 710 nbWritten = 0; 711 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 712 { 713 indGlo = *itSrv; 714 if (ite != globalLocalIndexMap_.find(indGlo)) 715 { 716 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; 717 ++nbWritten; 718 } 719 } 720 } 721 else 722 { 723 nbWritten = 0; 724 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 725 ite = globalLocalIndexMap_.end(), it; 726 for (int i = 0; i < zoom_index.numElements(); ++i) 727 { 728 if (ite != globalLocalIndexMap_.find(zoom_index(i))) 729 ++nbWritten; 730 } 731 732 localIndexToWriteOnServer.resize(nbWritten); 733 734 nbWritten = 0; 735 for (int i = 0; i < zoom_index.numElements(); ++i) 736 { 737 if (ite != globalLocalIndexMap_.find(zoom_index(i))) 738 { 739 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[zoom_index(i)]; 740 ++nbWritten; 741 } 742 } 743 } 744 745 // if (isCompressible()) 746 // { 747 // nbWritten = 0; 748 // std::unordered_map<size_t,size_t> localGlobalIndexMap; 749 // for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 750 // { 751 // indGlo = *itSrv; 752 // if (ite != globalLocalIndexMap_.find(indGlo)) 753 // { 754 // localGlobalIndexMap[localIndexToWriteOnServer(nbWritten)] = indGlo; 755 // ++nbWritten; 756 // } 757 // } 758 759 // nbWritten = 0; 760 // for (int idx = 0; idx < data_index.numElements(); ++idx) 761 // { 762 // if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) 763 // { 764 // ++nbWritten; 765 // } 766 // } 767 768 // compressedIndexToWriteOnServer.resize(nbWritten); 769 // nbWritten = 0; 770 // for (int idx = 0; idx < data_index.numElements(); ++idx) 771 // { 772 // if (localGlobalIndexMap.end() != localGlobalIndexMap.find(data_index(idx))) 773 // { 774 // compressedIndexToWriteOnServer(nbWritten) = localGlobalIndexMap[data_index(idx)]; 775 // ++nbWritten; 776 // } 777 // } 778 779 // numberWrittenIndexes_ = nbWritten; 780 // if (isDistributed()) 781 // { 782 783 // MPI_Allreduce(&numberWrittenIndexes_, &totalNumberWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); 784 // MPI_Scan(&numberWrittenIndexes_, &offsetWrittenIndexes_, 1, MPI_INT, MPI_SUM, server->intraComm); 785 // offsetWrittenIndexes_ -= numberWrittenIndexes_; 786 // } 787 // else 788 // totalNumberWrittenIndexes_ = numberWrittenIndexes_; 789 // } 679 nbWritten = 0; 680 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 681 { 682 indGlo = *itSrv; 683 if (ite != globalLocalIndexMap_.find(indGlo)) 684 { 685 localIndexToWriteOnServer(nbWritten) = globalLocalIndexMap_[indGlo]; 686 ++nbWritten; 687 } 688 } 790 689 } 791 690 … … 805 704 // We describe the distribution of client (server) on which data are written 806 705 std::vector<int> nBegin(1), nSize(1), nBeginGlobal(1), nGlob(1); 807 nBegin[0] = zoom_begin;808 nSize[0] = zoom_n;706 nBegin[0] = 0; 707 nSize[0] = n; 809 708 nBeginGlobal[0] = 0; 810 709 nGlob[0] = n_glo; … … 928 827 { 929 828 int ni_srv, begin_srv, end_srv; 930 int global_zoom_end, zoom_end;931 bool zoomIndex = zoomByIndex();932 933 std::vector<int> zoom_index_tmp;934 std::vector<int>::iterator itZoomBegin, itZoomEnd, itZoom;935 936 829 buffer >> ni_srv >> begin_srv >> end_srv; 937 830 buffer >> isCompressible_; … … 940 833 n.setValue(ni_srv); 941 834 begin.setValue(begin_srv); 942 943 // If we have zoom by index then process it944 if (zoomIndex)945 {946 zoom_index_tmp.resize(global_zoom_index.numElements());947 std::copy(global_zoom_index.begin(), global_zoom_index.end(), zoom_index_tmp.begin());948 std::sort(zoom_index_tmp.begin(), zoom_index_tmp.end());949 itZoomBegin = std::lower_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), begin_srv);950 itZoomEnd = std::upper_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), end_srv);951 int sz = std::distance(itZoomBegin, itZoomEnd);952 zoom_index.resize(sz);953 itZoom = itZoomBegin;954 for (int i = 0; i < sz; ++i, ++itZoom)955 {956 zoom_index(i) = *(itZoom);957 }958 }959 960 global_zoom_begin = zoomIndex ? 0 : global_zoom_begin ;961 global_zoom_n = zoomIndex ? zoom_index_tmp.size() : global_zoom_n;962 global_zoom_end = global_zoom_begin + global_zoom_n - 1;963 964 zoom_begin = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomBegin)965 : global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ;966 zoom_end = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomEnd) - 1967 : global_zoom_end < end_srv ? global_zoom_end : end_srv ;968 zoom_n = zoom_end - zoom_begin + 1;969 970 if (zoom_n<=0)971 {972 zoom_n = 0; zoom_begin=global_zoom_begin; //0; zoom_begin = 0;973 }974 975 if (n_glo == n)976 {977 zoom_begin = zoomIndex ? std::distance(itZoomBegin, zoom_index_tmp.begin())978 : global_zoom_begin;979 zoom_n = zoomIndex ? zoom_index_tmp.size() : global_zoom_n;980 }981 835 } 982 836 … … 1064 918 void CAxis::recvNonDistributedAttributes(int rank, CBufferIn& buffer) 1065 919 { 1066 CArray<int,1> tmp_index, tmp_data_index , tmp_zoom_index;920 CArray<int,1> tmp_index, tmp_data_index; 1067 921 CArray<bool,1> tmp_mask; 1068 922 CArray<double,1> tmp_val; … … 1123 977 1124 978 list<CMessage> listData; 1125 list<CArray<int,1> > list_indi, list_dataInd , list_zoomInd;979 list<CArray<int,1> > list_indi, list_dataInd; 1126 980 list<CArray<bool,1> > list_mask; 1127 981 list<CArray<double,1> > list_val; … … 1246 1100 { 1247 1101 int nbReceived = ranks.size(), idx, ind, gloInd, locInd; 1248 vector<CArray<int,1> > vec_indi(nbReceived), vec_dataInd(nbReceived) , vec_zoomInd(nbReceived);1102 vector<CArray<int,1> > vec_indi(nbReceived), vec_dataInd(nbReceived); 1249 1103 vector<CArray<bool,1> > vec_mask(nbReceived); 1250 1104 vector<CArray<double,1> > vec_val(nbReceived); -
XIOS/trunk/src/node/axis.hpp
r1558 r1559 121 121 CTransformation<CAxis>* addTransformation(ETranformationType transType, const StdString& id=""); 122 122 bool isEqual(CAxis* axis); 123 bool zoomByIndex();124 123 125 124 public: … … 133 132 void checkData(); 134 133 void checkMask(); 135 void checkZoom();136 134 void checkBounds(); 137 135 void checkLabel(); -
XIOS/trunk/src/node/grid.cpp
r1553 r1559 1631 1631 std::vector<CDomain*> domainList = getDomains(); 1632 1632 std::vector<CAxis*> axisList = getAxis(); 1633 std::vector<int> n ZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize), nZoomBeginGlobal(ssize), nGlobElement(numElement);1634 std::vector<CArray<int,1> > global ZoomIndex(numElement); // RENAME INTO globalIndex1633 std::vector<int> nBegin(ssize), nSize(ssize), nGlob(ssize), nBeginGlobal(ssize), nGlobElement(numElement); 1634 std::vector<CArray<int,1> > globalIndex(numElement); 1635 1635 for (int i = 0; i < numElement; ++i) 1636 1636 { … … 1638 1638 if (2 == axis_domain_order(i)) //domain 1639 1639 { 1640 n ZoomBegin[indexMap[i]] = domainList[domainId]->ibegin;1641 n ZoomSize[indexMap[i]] = domainList[domainId]->ni;1642 n ZoomBeginGlobal[indexMap[i]] = 0;1640 nBegin[indexMap[i]] = domainList[domainId]->ibegin; 1641 nSize[indexMap[i]] = domainList[domainId]->ni; 1642 nBeginGlobal[indexMap[i]] = 0; 1643 1643 nGlob[indexMap[i]] = domainList[domainId]->ni_glo; 1644 1644 1645 n ZoomBegin[indexMap[i] + 1] = domainList[domainId]->jbegin;1646 n ZoomSize[indexMap[i] + 1] = domainList[domainId]->nj;1647 n ZoomBeginGlobal[indexMap[i] + 1] = 0;1645 nBegin[indexMap[i] + 1] = domainList[domainId]->jbegin; 1646 nSize[indexMap[i] + 1] = domainList[domainId]->nj; 1647 nBeginGlobal[indexMap[i] + 1] = 0; 1648 1648 nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; 1649 1649 1650 1650 { 1651 1651 int count = 0; 1652 global ZoomIndex[i].resize(nZoomSize[indexMap[i]]*nZoomSize[indexMap[i]+1]);1653 for (int jdx = 0; jdx < n ZoomSize[indexMap[i]+1]; ++jdx)1654 for (int idx = 0; idx < n ZoomSize[indexMap[i]]; ++idx)1652 globalIndex[i].resize(nSize[indexMap[i]]*nSize[indexMap[i]+1]); 1653 for (int jdx = 0; jdx < nSize[indexMap[i]+1]; ++jdx) 1654 for (int idx = 0; idx < nSize[indexMap[i]]; ++idx) 1655 1655 { 1656 global ZoomIndex[i](count) = (nZoomBegin[indexMap[i]] + idx) + (nZoomBegin[indexMap[i]+1] + jdx) * nGlob[indexMap[i]];1656 globalIndex[i](count) = (nBegin[indexMap[i]] + idx) + (nBegin[indexMap[i]+1] + jdx) * nGlob[indexMap[i]]; 1657 1657 ++count; 1658 1658 } … … 1663 1663 else if (1 == axis_domain_order(i)) // axis 1664 1664 { 1665 n ZoomBegin[indexMap[i]] = axisList[axisId]->zoom_begin;1666 n ZoomSize[indexMap[i]] = axisList[axisId]->zoom_n;1667 n ZoomBeginGlobal[indexMap[i]] = axisList[axisId]->global_zoom_begin;1665 nBegin[indexMap[i]] = axisList[axisId]->begin; 1666 nSize[indexMap[i]] = axisList[axisId]->n; 1667 nBeginGlobal[indexMap[i]] = 0; 1668 1668 nGlob[indexMap[i]] = axisList[axisId]->n_glo; 1669 if (axisList[axisId]->zoomByIndex()) 1670 { 1671 globalZoomIndex[i].reference(axisList[axisId]->zoom_index); 1672 } 1673 else 1674 { 1675 globalZoomIndex[i].resize(nZoomSize[indexMap[i]]); 1676 for (int idx = 0; idx < nZoomSize[indexMap[i]]; ++idx) 1677 globalZoomIndex[i](idx) = nZoomBegin[indexMap[i]] + idx; 1678 } 1669 globalIndex[i].resize(nSize[indexMap[i]]); 1670 for (int idx = 0; idx < nSize[indexMap[i]]; ++idx) 1671 globalIndex[i](idx) = nBegin[indexMap[i]] + idx; 1679 1672 1680 1673 ++axisId; … … 1682 1675 else // scalar 1683 1676 { 1684 n ZoomBegin[indexMap[i]] = 0;1685 n ZoomSize[indexMap[i]] = 1;1686 n ZoomBeginGlobal[indexMap[i]] = 0;1677 nBegin[indexMap[i]] = 0; 1678 nSize[indexMap[i]] = 1; 1679 nBeginGlobal[indexMap[i]] = 0; 1687 1680 nGlob[indexMap[i]] = 1; 1688 global ZoomIndex[i].resize(1);1689 global ZoomIndex[i](0) = 0;1681 globalIndex[i].resize(1); 1682 globalIndex[i](0) = 0; 1690 1683 ++scalarId; 1691 1684 } … … 1693 1686 dataSize = 1; 1694 1687 1695 for (int i = 0; i < n ZoomSize.size(); ++i)1696 dataSize *= n ZoomSize[i];1688 for (int i = 0; i < nSize.size(); ++i) 1689 dataSize *= nSize[i]; 1697 1690 serverDistribution_ = new CDistributionServer(server->intraCommRank, 1698 global ZoomIndex, axis_domain_order,1699 n ZoomBegin, nZoomSize, nZoomBeginGlobal, nGlob);1691 globalIndex, axis_domain_order, 1692 nBegin, nSize, nBeginGlobal, nGlob); 1700 1693 } 1701 1694
Note: See TracChangeset
for help on using the changeset viewer.