Changeset 620 for XIOS/trunk/src/node/grid.cpp
- Timestamp:
- 06/22/15 13:36:17 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/grid.cpp
r619 r620 14 14 #include "array_new.hpp" 15 15 #include "client_server_mapping_distributed.hpp" 16 #include "invert_algorithm.hpp"17 #include "visitable.hpp"18 16 19 17 namespace xios { … … 26 24 , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false) 27 25 , serverDistribution_(0), serverDistributionDescription_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_() 28 , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), algorithms_(), transformations_(), isTransformed_(false) 26 , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), transformations_(0), isTransformed_(false) 27 , axisPositionInGrid_() 29 28 { 30 29 setVirtualDomainGroup(); … … 37 36 , vDomainGroup_(), vAxisGroup_(), axisList_(), isAxisListSet(false), isDomListSet(false), clientDistribution_(0), isIndexSent(false) 38 37 , serverDistribution_(0), serverDistributionDescription_(0), clientServerMap_(0), writtenDataSize_(0), globalDim_() 39 , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), algorithms_(), transformations_(), isTransformed_(false) 38 , connectedDataSize_(), connectedServerRank_(), isDataDistributed_(true), transformations_(0), isTransformed_(false) 39 , axisPositionInGrid_() 40 40 { 41 41 setVirtualDomainGroup(); … … 53 53 if (0 != serverDistribution_) delete serverDistribution_; 54 54 if (0 != serverDistributionDescription_) delete serverDistributionDescription_; 55 for (std::vector<CGenericAlgorithm*>::iterator it = algorithms_.begin(); it != algorithms_.end(); ++it) delete *it;55 if (0 != transformations_) delete transformations_; 56 56 } 57 57 … … 324 324 { 325 325 int idx = 0; 326 std::vector<int> axisPositionMap;326 axisPositionInGrid_.resize(0); 327 327 for (int i = 0; i < axis_domain_order.numElements(); ++i) 328 328 { 329 329 if (false == axis_domain_order(i)) 330 330 { 331 axisPosition Map.push_back(idx);331 axisPositionInGrid_.push_back(idx); 332 332 ++idx; 333 333 } … … 339 339 { 340 340 if (sendAtt) 341 axisListP[i]->sendCheckedAttributes(globalDim_,axisPosition Map[i]);341 axisListP[i]->sendCheckedAttributes(globalDim_,axisPositionInGrid_[i]); 342 342 else 343 axisListP[i]->checkAttributesOnClient(globalDim_,axisPosition Map[i]);343 axisListP[i]->checkAttributesOnClient(globalDim_,axisPositionInGrid_[i]); 344 344 ++idx; 345 345 } … … 347 347 } 348 348 } 349 350 std::vector<int> CGrid::getAxisPositionInGrid() const 351 { 352 return axisPositionInGrid_; 353 } 354 349 355 350 356 //--------------------------------------------------------------- … … 759 765 { 760 766 return serverDistribution_; 767 } 768 769 const CDistributionClient* CGrid::getDistributionClient() const 770 { 771 return clientDistribution_; 761 772 } 762 773 … … 1103 1114 } 1104 1115 1105 CGrid::EElementType CGrid::getGridElementType() 1106 { 1107 EElementType gridType = GRID_ONLY_AXIS; 1108 int numElements = axis_domain_order.numElements(); 1109 if (1 == numElements) 1110 { 1111 if (true == axis_domain_order(0)) gridType = GRID_ONLY_DOMAIN; 1112 } 1113 else gridType = GRID_AXIS_DOMAIN; 1114 } 1115 1116 void CGrid::solveTransformations() 1117 { 1118 std::vector<CAxis*> axisPtr = getAxis(); 1119 for (std::vector<CAxis*>::iterator it = axisPtr.begin(); it != axisPtr.end(); ++it) 1120 { 1121 std::vector<ETransformationType> axisTransformation = (*it)->getTransformations(); 1122 std::vector<ETransformationType>::iterator itTrans = axisTransformation.begin(), 1123 iteTrans = axisTransformation.end(); 1124 for (;itTrans != iteTrans; ++ itTrans) 1125 transformations_.push_back(*itTrans); 1126 } 1127 } 1128 1129 void CGrid::setTransformationAlgorithms() 1130 { 1131 std::vector<ETransformationType>::iterator itTrans = transformations_.begin(), 1132 iteTrans = transformations_.end(); 1133 std::set<ETransformationType> tmp; 1134 for (; itTrans != iteTrans; ++itTrans) 1135 { 1136 if (tmp.end() == tmp.find(*itTrans)) 1137 { 1138 switch (*itTrans) { 1139 case eInverse: 1140 algorithms_.push_back(new CInvertAlgorithm()); 1141 break; 1142 default: 1143 break; 1144 } 1145 } 1146 tmp.insert(*itTrans); 1147 } 1148 } 1149 1150 std::vector<ETransformationType> CGrid::getTransformations() 1116 bool CGrid::isTransformed() 1117 { 1118 return isTransformed_; 1119 } 1120 1121 void CGrid::setTransformed() 1122 { 1123 isTransformed_ = true; 1124 } 1125 1126 CGridTransformation* CGrid::getTransformations() 1151 1127 { 1152 1128 return transformations_; 1153 }1154 1155 bool CGrid::isTransformed()1156 {1157 return isTransformed_;1158 }1159 1160 void CGrid::setTransformed()1161 {1162 isTransformed_ = true;1163 }1164 1165 const std::vector<CGenericAlgorithm*>& CGrid::getTransformationAlgo()1166 {1167 return algorithms_;1168 1129 } 1169 1130 … … 1189 1150 } 1190 1151 1191 EElementType gridType = getGridElementType(); 1192 CGenericTransformation* gTransform = 0; 1193 switch (gridType) { 1194 case GRID_ONLY_AXIS: 1195 gTransform = new CAxisTransformation(this->getAxis(), transformedGrid->getAxis()); 1196 break; 1197 case GRID_ONLY_DOMAIN: 1198 break; 1199 case GRID_AXIS_DOMAIN: 1200 break; 1201 default: 1202 break; 1203 } 1204 1205 transformedGrid->solveTransformations(); 1206 transformedGrid->setTransformationAlgorithms(); 1207 gTransform->apply(transformedGrid->algorithms_); 1208 if (0 != gTransform) delete gTransform; 1152 transformations_ = new CGridTransformation(transformedGrid, this); 1153 transformations_->computeTransformationMapping(); 1154 std::cout << "send index " << *(transformations_->getLocalIndexToSendFromGridSource()[0]) << std::endl; 1155 std::cout << "receive index " << *(transformations_->getLocalIndexToReceiveOnGridDest()[0][0]) << std::endl; 1209 1156 } 1210 1157
Note: See TracChangeset
for help on using the changeset viewer.