Changeset 1169
- Timestamp:
- 06/15/17 16:17:01 (7 years ago)
- Location:
- XIOS/trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/bld.cfg
r1140 r1169 37 37 #bld::target test_expand_domain.exe 38 38 #bld::target test_new_features.exe test_unstruct_complete.exe 39 bld::target test_client.exe #test_complete.exe test_xios2_cmip6.exe 39 bld::target test_client.exe 40 bld::target test_complete.exe test_xios2_cmip6.exe 40 41 #bld::target test_connectivity_expand.exe 41 42 #bld::target toy_cmip6.exe -
XIOS/trunk/inputs/COMPLETE/context_atmosphere.xml
r787 r1169 19 19 <axis_definition> 20 20 <axis id="axis_atm"/> 21 <axis id="axis_atm_zoom" axis_ref="axis_atm"> 22 <zoom_axis id="axis_atm_zoom" n="4"/>21 <axis id="axis_atm_zoom" axis_ref="axis_atm"> 22 <zoom_axis id="axis_atm_zoom" index="(0,2)[3 0 1]"/> 23 23 </axis> 24 24 </axis_definition> -
XIOS/trunk/src/config/axis_attribute_private.conf
r821 r1169 1 1 DECLARE_ATTRIBUTE_PRIVATE(int, global_zoom_begin) 2 2 DECLARE_ATTRIBUTE_PRIVATE(int, global_zoom_n) 3 DECLARE_ARRAY_PRIVATE(int, 1, global_zoom_index) -
XIOS/trunk/src/config/zoom_axis_attribute.conf
r787 r1169 2 2 DECLARE_ATTRIBUTE(int, begin) 3 3 DECLARE_ATTRIBUTE(int, n) 4 DECLARE_ARRAY(int ,1 , index) -
XIOS/trunk/src/distribution_server.cpp
r930 r1169 34 34 } 35 35 36 CDistributionServer::CDistributionServer(int rank, 37 const std::vector<CArray<int,1> >& globalIndexElements, 38 const CArray<int,1>& elementOrder, 39 const std::vector<int>& nZoomBeginServer, 40 const std::vector<int>& nZoomSizeServer, 41 const std::vector<int>& nZoomBeginGlobal, 42 const std::vector<int>& nGlobal) 43 : CDistribution(rank, nGlobal.size()), nGlobal_(nGlobal), nZoomBeginGlobal_(nZoomBeginGlobal), 44 nZoomSize_(nZoomSizeServer), nZoomBegin_(nZoomBeginServer), globalLocalIndexMap_() 45 { 46 createGlobalIndex(globalIndexElements, elementOrder); 47 } 48 36 49 CDistributionServer::~CDistributionServer() 37 50 { … … 89 102 90 103 /*! 104 Create global index on server side 105 Like the similar function on client side, this function serves on creating global index 106 for data written by the server. The global index is used to calculating local index of data 107 written on each server 108 \param[in] globalIndexElement global index on server side of each element of grid (scalar, axis, domain) 109 \param[in] elementOrder the order of elements of grid (e.x: domain->axis or domain->scalar) 110 */ 111 void CDistributionServer::createGlobalIndex(const std::vector<CArray<int,1> >& globalIndexElements, 112 const CArray<int,1>& elementOrder) 113 { 114 int numElement = elementOrder.numElements(), elementIdx = 0; 115 std::vector<int> indexMap(numElement); 116 for (int i = 0; i < numElement; ++i) 117 { 118 indexMap[i] = elementIdx; 119 if (2 == elementOrder(i)) 120 { 121 elementIdx += 2; 122 } 123 else 124 ++elementIdx; 125 } 126 127 std::vector<size_t> elementGlobalSize(numElement); 128 size_t globalSize = 1; 129 for (int i = 0; i < numElement; ++i) 130 { 131 int elementType = elementOrder(i); 132 elementGlobalSize[i] = globalSize; 133 if (2 == elementType) // domain 134 { 135 globalSize *= nGlobal_[indexMap[i]+1] * nGlobal_[indexMap[i]]; 136 } 137 else // axis or scalar 138 { 139 globalSize *= nGlobal_[indexMap[i]]; 140 } 141 } 142 143 size_t ssize = 1; 144 for (int i = 0; i < globalIndexElements.size(); ++i) ssize *= globalIndexElements[i].numElements(); 145 this->globalIndex_.resize(ssize); 146 globalLocalIndexMap_.rehash(std::ceil(ssize/globalLocalIndexMap_.max_load_factor())); 147 148 std::vector<int> idxLoop(numElement,0); 149 std::vector<int> currentIndex(numElement); 150 int innerLoopSize = globalIndexElements[0].numElements(); 151 152 size_t idx = 0; 153 while (idx<ssize) 154 { 155 for (int i = 0; i < numElement-1; ++i) 156 { 157 if (idxLoop[i] == globalIndexElements[i].numElements()) 158 { 159 idxLoop[i] = 0; 160 ++idxLoop[i+1]; 161 } 162 } 163 164 for (int i = 1; i < numElement; ++i) currentIndex[i] = globalIndexElements[i](idxLoop[i]); 165 166 size_t mulDim, globalIndex; 167 for (int i = 0; i < innerLoopSize; ++i) 168 { 169 globalIndex = 0; 170 currentIndex[0] = globalIndexElements[0](i); 171 172 for (int k = 0; k < numElement; ++k) 173 { 174 globalIndex += (currentIndex[k])*elementGlobalSize[k]; 175 } 176 globalLocalIndexMap_[globalIndex] = idx; 177 this->globalIndex_(idx) = globalIndex; 178 ++idx; 179 } 180 idxLoop[0] += innerLoopSize; 181 } 182 } 183 184 /*! 91 185 Compute local index for writing data on server 92 186 \param [in] globalIndex global index received from client -
XIOS/trunk/src/distribution_server.hpp
r930 r1169 31 31 const std::vector<int>& nGlobal); 32 32 33 CDistributionServer(int rank, 34 const std::vector<CArray<int,1> >& globalIndexElements, 35 const CArray<int,1>& elementOrder, 36 const std::vector<int>& nZoomBeginServer, 37 const std::vector<int>& nZoomSizeServer, 38 const std::vector<int>& nZoomBeginGlobal, 39 const std::vector<int>& nGlobal); 40 33 41 /** Default destructor */ 34 42 virtual ~CDistributionServer(); … … 44 52 protected: 45 53 virtual void createGlobalIndex(); 54 void createGlobalIndex(const std::vector<CArray<int,1> >& globalIndexElements, 55 const CArray<int,1>& elementOrder); 46 56 47 57 protected: -
XIOS/trunk/src/io/nc4_data_output.cpp
r1135 r1169 1044 1044 int zoom_begin_srv = axis->zoom_begin_srv; 1045 1045 int zoom_size = (MULTI_FILE == SuperClass::type) ? zoom_size_srv 1046 : axis->global_zoom_n; 1047 int zoom_begin = (MULTI_FILE == SuperClass::type) ? zoom_begin_srv 1048 : axis->global_zoom_begin; 1046 : axis->global_zoom_size_srv; 1049 1047 1050 1048 if ((0 == zoom_size_srv) && (MULTI_FILE == SuperClass::type)) return; … … 1125 1123 std::vector<StdSize> start(1), startBounds(2) ; 1126 1124 std::vector<StdSize> count(1), countBounds(2) ; 1127 start[0] = startBounds[0] = zoom_begin_srv-axis->global_zoom_begin ;1125 start[0] = startBounds[0] = zoom_begin_srv-axis->global_zoom_begin_srv; 1128 1126 count[0] = countBounds[0] = zoom_size_srv; 1129 1127 startBounds[1] = 0; -
XIOS/trunk/src/node/axis.cpp
r1117 r1169 354 354 // We don't check if the mask is valid here, just if a mask has been defined at this point. 355 355 isCompressible_ = !mask.isEmpty(); 356 } 357 358 bool CAxis::zoomByIndex() 359 { 360 return (!global_zoom_index.isEmpty() && (0 != global_zoom_index.numElements())); 356 361 } 357 362 … … 450 455 size_t nZoomCount = 0; 451 456 size_t nbIndex = index.numElements(); 452 for (size_t idx = 0; idx < nbIndex; ++idx) 457 458 int end = (0 == n) ? begin : begin + n - 1; 459 int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 460 int minInd = min(index); 461 int maxInd = max(index); 462 for (size_t idx = 0; idx < zoom_size; ++idx) 463 { 464 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 465 if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) ++nZoomCount; 466 } 467 468 /* for (size_t idx = 0; idx < nbIndex; ++idx) 453 469 { 454 470 size_t globalIndex = index(idx); 455 471 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nZoomCount; 456 } 457 472 }*/ 473 458 474 CArray<size_t,1> globalIndexAxis(nbIndex); 475 for (size_t idx = 0; idx < nbIndex; ++idx) 476 { 477 globalIndexAxis(idx) = (size_t)index(idx); 478 } 479 459 480 std::vector<size_t> globalAxisZoom(nZoomCount); 460 481 nZoomCount = 0; 461 for (size_t idx = 0; idx < nbIndex; ++idx) 462 { 463 size_t globalIndex = index(idx); 464 globalIndexAxis(idx) = globalIndex; 465 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) 466 { 467 globalAxisZoom[nZoomCount] = globalIndex; 482 for (size_t idx = 0; idx < zoom_size; ++idx) 483 { 484 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 485 if (globalZoomIndex >= minInd && globalZoomIndex <= maxInd) 486 { 487 globalAxisZoom[nZoomCount] = globalZoomIndex; 468 488 ++nZoomCount; 469 } 489 } 470 490 } 471 491 … … 585 605 int zoom_end = global_zoom_begin + global_zoom_n - 1; 586 606 int nb = 0; 587 for (size_t idx = 0; idx < n; ++idx)607 /* for (size_t idx = 0; idx < n; ++idx) 588 608 { 589 609 size_t globalIndex = begin + idx; 590 610 if (globalIndex >= global_zoom_begin && globalIndex <= zoom_end) ++nb; 611 }*/ 612 613 int end = (0 == n) ? begin : begin + n - 1; 614 int zoom_size = zoomByIndex() ? global_zoom_index.numElements() : global_zoom_n; 615 for (size_t idx = 0; idx < zoom_size; ++idx) 616 { 617 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 618 if (globalZoomIndex >= begin && globalZoomIndex <= end) ++nb; 591 619 } 592 620 … … 609 637 CArray<double,1> val(nb); 610 638 nb = 0; 611 for (size_t idx = 0; idx < n; ++idx)639 /* for (size_t idx = 0; idx < n; ++idx) 612 640 { 613 641 size_t globalIndex = begin + idx; … … 615 643 { 616 644 val(nb) = value(idx); 645 ++nb; 646 } 647 }*/ 648 649 for (size_t idx = 0; idx < zoom_size; ++idx) 650 { 651 size_t globalZoomIndex = zoomByIndex() ? global_zoom_index(idx) : global_zoom_begin + idx; 652 if (globalZoomIndex >= begin && globalZoomIndex <= end) 653 { 654 val(nb) = value(globalZoomIndex-begin); 617 655 ++nb; 618 656 } … … 920 958 const int ni = serverDimensionSizes[*itRank][orderPositionInGrid]; 921 959 const int end = begin + ni - 1; 960 const bool zoomIndex = zoomByIndex(); 922 961 923 962 msgs.push_back(CMessage()); … … 926 965 msg << ni << begin << end; 927 966 msg << global_zoom_begin.getValue() << global_zoom_n.getValue(); 928 msg << isCompressible_; 967 msg << isCompressible_; 968 msg << zoomIndex; 969 if (zoomIndex) 970 msg << global_zoom_index.getValue(); 929 971 930 972 event.push(*itRank,1,msg); … … 946 988 { 947 989 int ni_srv, begin_srv, end_srv, global_zoom_begin_tmp, global_zoom_n_tmp; 990 bool zoomIndex; 991 CArray<int,1> zoom_index_recv; 992 std::vector<int> zoom_index_tmp; 993 std::vector<int>::iterator itZoomBeginSrv, itZoomEndSrv, itZoomSrv; 948 994 949 995 buffer >> ni_srv >> begin_srv >> end_srv; 950 996 buffer >> global_zoom_begin_tmp >> global_zoom_n_tmp; 951 997 buffer >> isCompressible_; 998 buffer >> zoomIndex; 999 if (zoomIndex) 1000 { 1001 buffer >> zoom_index_recv; 1002 global_zoom_index.reference(zoom_index_recv); 1003 zoom_index_tmp.resize(global_zoom_index.numElements()); 1004 std::copy(global_zoom_index.begin(), global_zoom_index.end(), zoom_index_tmp.begin()); 1005 std::sort(zoom_index_tmp.begin(), zoom_index_tmp.end()); 1006 itZoomBeginSrv = std::lower_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), begin_srv); 1007 itZoomEndSrv = std::upper_bound(zoom_index_tmp.begin(), zoom_index_tmp.end(), end_srv); 1008 int sz = std::distance(itZoomBeginSrv, itZoomEndSrv); 1009 zoom_index_srv.resize(sz); 1010 itZoomSrv = itZoomBeginSrv; 1011 for (int i = 0; i < sz; ++i, ++itZoomSrv) 1012 { 1013 zoom_index_srv(i) = *(itZoomSrv); 1014 } 1015 } 1016 952 1017 global_zoom_begin = global_zoom_begin_tmp; 953 1018 global_zoom_n = global_zoom_n_tmp; 954 1019 int global_zoom_end = global_zoom_begin + global_zoom_n - 1; 955 1020 956 zoom_begin_srv = global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 957 zoom_end_srv = global_zoom_end < end_srv ? global_zoom_end : end_srv ; 1021 zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 1022 : global_zoom_begin > begin_srv ? global_zoom_begin : begin_srv ; 1023 zoom_end_srv = zoomIndex ? std::distance(zoom_index_tmp.begin(), itZoomEndSrv) - 1 1024 : global_zoom_end < end_srv ? global_zoom_end : end_srv ; 958 1025 zoom_size_srv = zoom_end_srv - zoom_begin_srv + 1; 1026 1027 global_zoom_begin_srv = zoomIndex ? 0 : global_zoom_begin ; 1028 global_zoom_size_srv = zoomIndex ? zoom_index_tmp.size() : global_zoom_n; 959 1029 960 1030 if (zoom_size_srv<=0) … … 965 1035 if (n_glo == n) 966 1036 { 967 zoom_begin_srv = global_zoom_begin; 968 zoom_end_srv = global_zoom_end; //zoom_end; 969 zoom_size_srv = zoom_end_srv - zoom_begin_srv + 1; 1037 zoom_begin_srv = zoomIndex ? std::distance(itZoomBeginSrv, zoom_index_tmp.begin()) 1038 : global_zoom_begin; 1039 zoom_size_srv = zoomIndex ? zoom_index_tmp.size() 1040 : global_zoom_n; 970 1041 } 971 1042 if (hasValue) -
XIOS/trunk/src/node/axis.hpp
r1106 r1169 122 122 int zoom_begin_srv, zoom_end_srv, zoom_size_srv; 123 123 int ni_srv, begin_srv, end_srv; 124 int global_zoom_begin_srv, global_zoom_end_srv, global_zoom_size_srv; 124 125 CArray<double,1> value_srv; 125 126 CArray<double,2> bound_srv; 126 127 CArray<StdString,1> label_srv; 128 CArray<int,1> zoom_index_srv; 127 129 bool hasValue; 128 130 … … 138 140 void sendDistributedValue(); 139 141 void sendNonDistributedValue(); 142 bool zoomByIndex(); 140 143 141 144 static void recvIndex(CEventServer& event); -
XIOS/trunk/src/node/grid.cpp
r1093 r1169 1253 1253 std::vector<CAxis*> axisList = getAxis(); 1254 1254 std::vector<int> nZoomBegin(ssize), nZoomSize(ssize), nGlob(ssize), nZoomBeginGlobal(ssize); 1255 std::vector<CArray<int,1> > globalZoomIndex(numElement); 1255 1256 for (int i = 0; i < numElement; ++i) 1256 1257 { … … 1266 1267 nZoomBeginGlobal[indexMap[i] + 1] = domainList[domainId]->global_zoom_jbegin; 1267 1268 nGlob[indexMap[i] + 1] = domainList[domainId]->nj_glo; 1269 1270 { 1271 int count = 0; 1272 globalZoomIndex[i].resize(nZoomSize[indexMap[i]]*nZoomSize[indexMap[i]+1]); 1273 for (int jdx = 0; jdx < nZoomSize[indexMap[i]+1]; ++jdx) 1274 for (int idx = 0; idx < nZoomSize[indexMap[i]]; ++idx) 1275 { 1276 globalZoomIndex[i](count) = (nZoomBegin[indexMap[i]] + idx) + (nZoomBegin[indexMap[i]+1] + jdx) * nGlob[indexMap[i]]; 1277 ++count; 1278 } 1279 } 1268 1280 ++domainId; 1269 1281 } … … 1272 1284 nZoomBegin[indexMap[i]] = axisList[axisId]->zoom_begin_srv; 1273 1285 nZoomSize[indexMap[i]] = axisList[axisId]->zoom_size_srv; 1274 nZoomBeginGlobal[indexMap[i]] = axisList[axisId]->global_zoom_begin ;1286 nZoomBeginGlobal[indexMap[i]] = axisList[axisId]->global_zoom_begin_srv; 1275 1287 nGlob[indexMap[i]] = axisList[axisId]->n_glo; 1288 if (!axisList[axisId]->global_zoom_index.isEmpty()) 1289 { 1290 globalZoomIndex[i].reference(axisList[axisId]->zoom_index_srv); 1291 } 1292 else 1293 { 1294 globalZoomIndex[i].resize(nZoomSize[indexMap[i]]); 1295 for (int idx = 0; idx < nZoomSize[indexMap[i]]; ++idx) 1296 globalZoomIndex[i](idx) = nZoomBegin[indexMap[i]] + idx; 1297 } 1298 1276 1299 ++axisId; 1277 1300 } … … 1282 1305 nZoomBeginGlobal[indexMap[i]] = 0; 1283 1306 nGlob[indexMap[i]] = 1; 1307 globalZoomIndex[i].resize(1); 1308 globalZoomIndex[i](0) = 0; 1284 1309 ++scalarId; 1285 1310 } … … 1289 1314 dataSize *= nZoomSize[i]; 1290 1315 1291 serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 1292 nZoomBeginGlobal, nGlob); 1316 /* serverDistribution_ = new CDistributionServer(server->intraCommRank, nZoomBegin, nZoomSize, 1317 nZoomBeginGlobal, nGlob);*/ 1318 serverDistribution_ = new CDistributionServer(server->intraCommRank, 1319 globalZoomIndex, axis_domain_order, 1320 nZoomBegin, nZoomSize, nZoomBeginGlobal, nGlob); 1293 1321 } 1294 1322 -
XIOS/trunk/src/node/zoom_axis.cpp
r836 r1169 46 46 axisGlobalSize = axisDest->n_glo.getValue(); 47 47 48 begin = (this->begin.isEmpty()) ? 0 : this->begin.getValue(); 49 n = (this->n.isEmpty()) ? axisGlobalSize : this->n.getValue(); 50 end = begin+n-1; 48 bool zoomByIndex = !this->index.isEmpty() && (0 != this->index.numElements()); 49 50 if (zoomByIndex) 51 { 52 begin = min(this->index); 53 end = max(this->index); 54 n = end - begin + 1; 55 } 56 else 57 { 58 begin = (this->begin.isEmpty()) ? 0 : this->begin.getValue(); 59 n = (this->n.isEmpty()) ? axisGlobalSize : this->n.getValue(); 60 end = begin+n-1; 61 } 51 62 52 63 if (begin < 0 || begin > axisGlobalSize - 1 || end < 0 || end > axisGlobalSize - 1 … … 55 66 << "One or more attributes among 'begin' (" << begin << "), 'end' (" << end << "), 'n' (" << n << ") " 56 67 << "of axis transformation [ id = '" << axisDest->getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] are not well specified"); 68 69 if (zoomByIndex && (!this->begin.isEmpty() || !this->n.isEmpty())) 70 ERROR("CZoomAxis::checkValid(CAxis* axisDest)", 71 << "Only one type of zoom is accepted. Define zoom by index with global_zoom_index or define zoom with begin and n. " 72 << "Axis transformation [ id = '" << axisDest->getId() << "' , context = '" << CObjectFactory::GetCurrentContextId() << "' ] are not well specified"); 57 73 58 74 this->begin.setValue(begin); -
XIOS/trunk/src/transformation/axis_algorithm_zoom.cpp
r933 r1169 44 44 zoomBegin_ = zoomAxis->begin.getValue(); 45 45 zoomSize_ = zoomAxis->n.getValue(); 46 zoomEnd_ = zoomBegin_ + zoomSize_ - 1; 46 zoomEnd_ = zoomBegin_ + zoomSize_ - 1; 47 47 48 48 if (zoomSize_ > axisSource->n_glo.getValue()) … … 53 53 << "Zoom size is " << zoomSize_ ); 54 54 } 55 56 if (!zoomAxis->index.isEmpty()) 57 { 58 int sz = zoomAxis->index.numElements(); 59 zoomIndex_.resize(sz); 60 for (int i = 0; i < sz; ++i) 61 zoomIndex_[i] = zoomAxis->index(i); 62 63 std::sort(zoomIndex_.begin(), zoomIndex_.end()); 64 } 55 65 } 56 66 … … 60 70 void CAxisAlgorithmZoom::computeIndexSourceMapping_(const std::vector<CArray<double,1>* >& dataAuxInputs) 61 71 { 72 this->transformationMapping_.resize(1); 73 this->transformationWeight_.resize(1); 74 75 TransformationIndexMap& transMap = this->transformationMapping_[0]; 76 TransformationWeightMap& transWeight = this->transformationWeight_[0]; 77 62 78 StdSize niSource = axisSrc_->n.getValue(); 63 79 StdSize ibeginSource = axisSrc_->begin.getValue(); … … 69 85 if (iend < ibegin) ni = 0; 70 86 71 this->transformationMapping_.resize(1); 72 this->transformationWeight_.resize(1); 73 74 TransformationIndexMap& transMap = this->transformationMapping_[0]; 75 TransformationWeightMap& transWeight = this->transformationWeight_[0]; 76 77 for (StdSize idx = 0; idx < ni; ++idx) 87 if (!zoomIndex_.empty()) 78 88 { 79 transMap[ibegin+idx].push_back(ibegin+idx); 80 transWeight[ibegin+idx].push_back(1.0); 89 std::vector<int>::iterator itZoomBegin, itZoomEnd; 90 itZoomBegin = std::lower_bound(zoomIndex_.begin(), zoomIndex_.end(), ibeginSource); 91 itZoomEnd = std::upper_bound(zoomIndex_.begin(), zoomIndex_.end(), iendSource); 92 for (; itZoomBegin != itZoomEnd; ++itZoomBegin) 93 { 94 transMap[*itZoomBegin].push_back(*itZoomBegin); 95 transWeight[*itZoomBegin].push_back(1.0); 96 } 97 } 98 else 99 { 100 for (StdSize idx = 0; idx < ni; ++idx) 101 { 102 transMap[ibegin+idx].push_back(ibegin+idx); 103 transWeight[ibegin+idx].push_back(1.0); 104 } 81 105 } 82 106 … … 92 116 axisDest_->global_zoom_begin = zoomBegin_; 93 117 axisDest_->global_zoom_n = zoomSize_; 118 if (!zoomIndex_.empty()) 119 { 120 axisDest_->global_zoom_index.resize(zoomIndex_.size()); 121 std::copy(zoomIndex_.begin(), zoomIndex_.end(), axisDest_->global_zoom_index.begin()); 122 } 94 123 } 95 124 -
XIOS/trunk/src/transformation/axis_algorithm_zoom.hpp
r933 r1169 48 48 StdSize zoomSize_; 49 49 50 std::vector<int> zoomIndex_; 51 50 52 private: 51 53
Note: See TracChangeset
for help on using the changeset viewer.