Changeset 1205 for XIOS/dev/branch_yushan_merged/src/node/axis.cpp
- Timestamp:
- 07/10/17 18:17:04 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_yushan_merged/src/node/axis.cpp
r1134 r1205 367 367 // We don't check if the mask is valid here, just if a mask has been defined at this point. 368 368 isCompressible_ = !mask.isEmpty(); 369 } 370 371 bool CAxis::zoomByIndex() 372 { 373 return (!global_zoom_index.isEmpty() && (0 != global_zoom_index.numElements())); 369 374 } 370 375 … … 463 468 size_t nZoomCount = 0; 464 469 size_t nbIndex = index.numElements(); 465 for (size_t idx = 0; idx < nbIndex; ++idx) 470 471 int end = (0 == n) ? begin : begin + n - 1; 472 int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 473 int minInd = min(index); 474 int maxInd = max(index); 475 for (size_t idx = 0; idx < zoom_size; ++idx) 476 { 477 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 478 if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) ++nZoomCount; 479 } 480 481 /* for (size_t idx = 0; idx < nbIndex; ++idx) 466 482 { 467 483 size_t globalIndex = index(idx); 468 484 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nZoomCount; 469 } 470 485 }*/ 486 471 487 CArray<size_t,1> globalIndexAxis(nbIndex); 488 for (size_t idx = 0; idx < nbIndex; ++idx) 489 { 490 globalIndexAxis(idx) = (size_t)index(idx); 491 } 492 472 493 std::vector<size_t> globalAxisZoom(nZoomCount); 473 494 nZoomCount = 0; 474 for (size_t idx = 0; idx < nbIndex; ++idx) 475 { 476 size_t globalIndex = index(idx); 477 globalIndexAxis(idx) = globalIndex; 478 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) 479 { 480 globalAxisZoom[nZoomCount] = globalIndex; 495 for (size_t idx = 0; idx < zoom_size; ++idx) 496 { 497 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 498 if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) 499 { 500 globalAxisZoom[nZoomCount] = globalZoomIndex; 481 501 ++nZoomCount; 482 502 } … … 598 618 int zoom_end = global_zoom_begin + global_zoom_n - 1; 599 619 int nb = 0; 600 for (size_t idx = 0; idx < n; ++idx)620 /* for (size_t idx = 0; idx < n; ++idx) 601 621 { 602 622 size_t globalIndex = begin + idx; 603 623 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nb; 624 }*/ 625 626 int end = (0 == n) ? begin : begin + n - 1; 627 int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 628 for (size_t idx = 0; idx < zoom_size; ++idx) 629 { 630 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 631 if (globalZoomIndex >= begin && globalZoomIndex <= end) ++nb; 604 632 } 605 633 … … 622 650 CArray<double,1> val(nb); 623 651 nb = 0; 624 for (size_t idx = 0; idx < n; ++idx)652 /* for (size_t idx = 0; idx < n; ++idx) 625 653 { 626 654 size_t globalIndex = begin + idx; … … 628 656 { 629 657 val(nb) = value(idx); 658 ++nb; 659 } 660 }*/ 661 662 for (size_t idx = 0; idx < zoom_size; ++idx) 663 { 664 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 665 if (globalZoomIndex >= begin && globalZoomIndex <= end) 666 { 667 val(nb) = value(globalZoomIndex-begin); 630 668 ++nb; 631 669 } … … 933 971 const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; 934 972 const int end = begin + ni - 1; 973 const bool zoomIndex = zoomByIndex(); 935 974 936 975 msgs.push_back(CMessage()); … … 940 979 msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 941 980 msg << isCompressible_; 981 msg << zoomIndex; 982 if (zoomIndex) 983 msg << global_zoom_index.getValue(); 942 984 943 985 event.push(*itRank,1,msg); … … 959 1001 { 960 1002 int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_n_tmp; 1003 bool zoomIndex; 1004 CArray<int,1> zoom_index_recv; 1005 std::vector<int> zoom_index_tmp; 1006 std::vector<int>::iterator itZoomBeginSrv, itZoomEndSrv, itZoomSrv; 961 1007 962 1008 buffer >> ni_srv >> begin_srv >> end_srv; 963 1009 buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 964 1010 buffer >> isCompressible_; 1011 buffer >> zoomIndex; 1012 if (zoomIndex) 1013 { 1014 buffer >> zoom_index_recv; 1015 global_zoom_index.reference(zoom_index_recv); 1016 zoom_index_tmp.resize(global_zoom_index.numElements()); 1017 std::copy(global_zoom_index.begin(), global_zoom_index.end(), zoom_index_tmp.begin()); 1018 std::sort(zoom_index_tmp.begin(), zoom_index_tmp.end()); 1019 itZoomBeginSrv = std::lower_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), begin_srv); 1020 itZoomEndSrv = std::upper_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), end_srv); 1021 int sz = std::distance(itZoomBeginSrv, itZoomEndSrv); 1022 zoom_index_srv.resize(sz); 1023 itZoomSrv = itZoomBeginSrv; 1024 for (int i = 0; i < sz; ++i, ++itZoomSrv) 1025 { 1026 zoom_index_srv(i) = *(itZoomSrv); 1027 } 1028 } 1029 965 1030 global_zoom_begin = global_zoom_begin_tmp; 966 1031 global_zoom_n = global_zoom_n_tmp; 967 1032 int global_zoom_end = global_zoom_begin + global_zoom_n - 1; 968 1033 969 zoom_begin_srv = global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 970 zoom_end_srv = global_zoom_end < end_srv ? global_zoom_end : end_srv ; 1034 zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 1035 : global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 1036 zoom_end_srv = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomEndSrv) - 1 1037 : global_zoom_end < end_srv ? global_zoom_end : end_srv ; 971 1038 zoom_size_srv = zoom_end_srv - zoom_begin_srv + 1; 1039 1040 global_zoom_begin_srv = zoomIndex ? 0 : global_zoom_begin ; 1041 global_zoom_size_srv = zoomIndex ? zoom_index_tmp.size() : global_zoom_n; 972 1042 973 1043 if (zoom_size_srv<=0) … … 978 1048 if (n_glo == n) 979 1049 { 980 zoom_begin_srv = global_zoom_begin; 981 zoom_end_srv = global_zoom_end; //zoom_end; 982 zoom_size_srv = zoom_end_srv - zoom_begin_srv + 1; 1050 zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 1051 : global_zoom_begin; 1052 zoom_size_srv = zoomIndex ? zoom_index_tmp.size() 1053 : global_zoom_n; 983 1054 } 984 1055 if (hasValue) … … 1043 1114 } 1044 1115 1045 1046 1047 1116 void CAxis::duplicateTransformation(CAxis* src) 1048 1117 {
Note: See TracChangeset
for help on using the changeset viewer.