Changeset 1542 for XIOS/trunk/src/node
- Timestamp:
- 06/13/18 16:48:53 (6 years ago)
- Location:
- XIOS/trunk/src/node
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/axis.cpp
r1421 r1542 202 202 { 203 203 // size estimation for sendDistributedValue 204 boost::unordered_map<int, vector<size_t> >::const_iterator it, ite = indSrv_[client->serverSize].end();204 std::unordered_map<int, vector<size_t> >::const_iterator it, ite = indSrv_[client->serverSize].end(); 205 205 for (it = indSrv_[client->serverSize].begin(); it != ite; ++it) 206 206 { … … 623 623 624 624 std::vector<int> serverZeroIndex; 625 serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t ,size_t>(indexBegin, indexEnd), 0);625 serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t&,size_t&>(indexBegin, indexEnd), 0); 626 626 627 627 std::list<int> serverZeroIndexLeader; … … 689 689 // we need to compute the local index on the server from its corresponding global index 690 690 size_t nbWritten = 0, indGlo; 691 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),691 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 692 692 ite = globalLocalIndexMap_.end(), it; 693 693 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), … … 721 721 { 722 722 nbWritten = 0; 723 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),723 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 724 724 ite = globalLocalIndexMap_.end(), it; 725 725 for (int i = 0; i < zoom_index.numElements(); ++i) … … 745 745 // { 746 746 // nbWritten = 0; 747 // boost::unordered_map<size_t,size_t> localGlobalIndexMap;747 // std::unordered_map<size_t,size_t> localGlobalIndexMap; 748 748 // for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 749 749 // { … … 810 810 CDistributionServer srvDist(server->intraCommSize, nBegin, nSize, nBeginGlobal, nGlob); 811 811 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 812 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),812 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 813 813 ite = globalLocalIndexMap_.end(), it; 814 814 815 815 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), 816 816 itSrve = writtenGlobalIndex.end(), itSrv; 817 boost::unordered_map<size_t,size_t> localGlobalIndexMap;817 std::unordered_map<size_t,size_t> localGlobalIndexMap; 818 818 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 819 819 { … … 1137 1137 } 1138 1138 1139 boost::unordered_map<int, std::vector<size_t> >::const_iterator it, iteMap;1139 std::unordered_map<int, std::vector<size_t> >::const_iterator it, iteMap; 1140 1140 iteMap = indSrv_[nbServer].end(); 1141 1141 for (int k = 0; k < connectedServerRank_[nbServer].size(); ++k) -
XIOS/trunk/src/node/axis.hpp
r1371 r1542 166 166 bool isCompressible_; 167 167 std::map<int, map<int,int> > nbSenders; // Mapping of number of communicating client to a server 168 std::map<int, boost::unordered_map<int, vector<size_t> > > indSrv_; // Global index of each client sent to server168 std::map<int, std::unordered_map<int, vector<size_t> > > indSrv_; // Global index of each client sent to server 169 169 // std::map<int, vector<int> > indWrittenSrv_; // Global written index of each client sent to server 170 boost::unordered_map<size_t,size_t> globalLocalIndexMap_;170 std::unordered_map<size_t,size_t> globalLocalIndexMap_; 171 171 std::vector<int> indexesToWrite; 172 172 std::map<int,int> numberWrittenIndexes_, totalNumberWrittenIndexes_, offsetWrittenIndexes_; -
XIOS/trunk/src/node/calendar_wrapper.cpp
r1201 r1542 32 32 \return the calendar 33 33 */ 34 boost::shared_ptr<CCalendar> CCalendarWrapper::getCalendar(bool checkValid /*= false*/) const34 std::shared_ptr<CCalendar> CCalendarWrapper::getCalendar(bool checkValid /*= false*/) const 35 35 { 36 36 if (checkValid && !this->calendar) … … 92 92 #define DECLARE_CALENDAR(MType, eType) \ 93 93 if (type.getValue() == type_attr::eType) \ 94 calendar = boost::shared_ptr<CCalendar>(new C##MType##Calendar());94 calendar = std::shared_ptr<CCalendar>(new C##MType##Calendar()); 95 95 #include "calendar_type.conf" 96 96 #undef DECLARE_CALENDAR … … 111 111 << "Both leap_year_drift and leap_year_month attributes are mandatory if you wish to use leap_year_drift_offset attribute."); 112 112 113 boost::shared_ptr<CUserDefinedCalendar> userDefinedCalendar;113 std::shared_ptr<CUserDefinedCalendar> userDefinedCalendar; 114 114 if (year_length.isEmpty()) 115 115 userDefinedCalendar.reset(new CUserDefinedCalendar(day_length.getValue(), month_lengths.getValue())); -
XIOS/trunk/src/node/calendar_wrapper.hpp
r591 r1542 67 67 public : 68 68 /// Accesseurs /// 69 boost::shared_ptr<CCalendar> getCalendar(bool checkValid = false) const;69 std::shared_ptr<CCalendar> getCalendar(bool checkValid = false) const; 70 70 71 71 const CDate& getInitDate() const; … … 78 78 private: 79 79 // Calendar of context 80 boost::shared_ptr<CCalendar> calendar;80 std::shared_ptr<CCalendar> calendar; 81 81 82 82 }; // class CCalendarWrapper -
XIOS/trunk/src/node/context.cpp
r1489 r1542 23 23 namespace xios { 24 24 25 s hared_ptr<CContextGroup> CContext::root;25 std::shared_ptr<CContextGroup> CContext::root; 26 26 27 27 /// ////////////////////// Définitions ////////////////////// /// … … 66 66 CContextGroup* CContext::getRoot(void) 67 67 { 68 if (root.get()==NULL) root=s hared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName()));68 if (root.get()==NULL) root=std::shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())); 69 69 return root.get(); 70 70 } … … 76 76 \return Calendar 77 77 */ 78 boost::shared_ptr<CCalendar> CContext::getCalendar(void) const78 std::shared_ptr<CCalendar> CContext::getCalendar(void) const 79 79 { 80 80 return (this->calendar); … … 87 87 \param[in] newCalendar new calendar 88 88 */ 89 void CContext::setCalendar( boost::shared_ptr<CCalendar> newCalendar)89 void CContext::setCalendar(std::shared_ptr<CCalendar> newCalendar) 90 90 { 91 91 this->calendar = newCalendar; … … 1414 1414 idServer_ = this->getId(); 1415 1415 idServer_ += "_server_"; 1416 idServer_ += boost::lexical_cast<string>(i);1416 idServer_ += std::to_string(static_cast<unsigned long long>(i)); 1417 1417 return idServer_; 1418 1418 } -
XIOS/trunk/src/node/context.hpp
r1378 r1542 8 8 9 9 #include "declare_group.hpp" 10 //#include "context_client.hpp"11 //#include "context_server.hpp"12 10 #include "data_output.hpp" 13 11 #include "garbage_collector.hpp" … … 83 81 84 82 /// Mutateurs /// 85 void setCalendar( boost::shared_ptr<CCalendar> newCalendar);83 void setCalendar(std::shared_ptr<CCalendar> newCalendar); 86 84 87 85 /// Accesseurs /// 88 boost::shared_ptr<CCalendar> getCalendar(void) const;86 std::shared_ptr<CCalendar> getCalendar(void) const; 89 87 90 88 public : … … 227 225 public : 228 226 // Calendar of context 229 boost::shared_ptr<CCalendar> calendar;227 std::shared_ptr<CCalendar> calendar; 230 228 231 229 // List of all enabled files (files on which fields are written or read) … … 241 239 242 240 // Context root 243 static s hared_ptr<CContextGroup> root;241 static std::shared_ptr<CContextGroup> root; 244 242 245 243 // Determine context on client or not -
XIOS/trunk/src/node/domain.cpp
r1509 r1542 150 150 } 151 151 152 boost::unordered_map<int, vector<size_t> >::const_iterator itIndexEnd = indSrv_[client->serverSize].end();152 std::unordered_map<int, vector<size_t> >::const_iterator itIndexEnd = indSrv_[client->serverSize].end(); 153 153 // std::map<int, std::vector<int> >::const_iterator itWrittenIndexEnd = indWrittenSrv_.end(); 154 154 for (size_t k = 0; k < connectedServerRank_[client->serverSize].size(); ++k) 155 155 { 156 156 int rank = connectedServerRank_[client->serverSize][k]; 157 boost::unordered_map<int, std::vector<size_t> >::const_iterator it = indSrv_[client->serverSize].find(rank);157 std::unordered_map<int, std::vector<size_t> >::const_iterator it = indSrv_[client->serverSize].find(rank); 158 158 size_t idxCount = (it != itIndexEnd) ? it->second.size() : 0; 159 159 … … 1838 1838 CServerDistributionDescription serverDescription(nGlobDomain, nbServer); 1839 1839 std::vector<int> serverZeroIndex; 1840 if (isUnstructed_) serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t ,size_t>(indexBegin, indexEnd), 0);1841 else serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t ,size_t>(indexBegin, indexEnd), 1);1840 if (isUnstructed_) serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t&,size_t&>(indexBegin, indexEnd), 0); 1841 else serverZeroIndex = serverDescription.computeServerGlobalIndexInRange(std::make_pair<size_t&,size_t&>(indexBegin, indexEnd), 1); 1842 1842 1843 1843 std::list<int> serverZeroIndexLeader; … … 1896 1896 1897 1897 size_t nbWritten = 0, indGlo; 1898 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),1898 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 1899 1899 ite = globalLocalIndexMap_.end(), it; 1900 1900 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), … … 1932 1932 // { 1933 1933 // nbWritten = 0; 1934 // boost::unordered_map<size_t,size_t> localGlobalIndexMap;1934 // std::unordered_map<size_t,size_t> localGlobalIndexMap; 1935 1935 // for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 1936 1936 // { … … 1996 1996 const CArray<size_t,1>& writtenGlobalIndex = srvDist.getGlobalIndex(); 1997 1997 1998 boost::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(),1998 std::unordered_map<size_t,size_t>::const_iterator itb = globalLocalIndexMap_.begin(), 1999 1999 ite = globalLocalIndexMap_.end(), it; 2000 2000 CArray<size_t,1>::const_iterator itSrvb = writtenGlobalIndex.begin(), 2001 2001 itSrve = writtenGlobalIndex.end(), itSrv; 2002 boost::unordered_map<size_t,size_t> localGlobalIndexMap;2002 std::unordered_map<size_t,size_t> localGlobalIndexMap; 2003 2003 for (itSrv = itSrvb; itSrv != itSrve; ++itSrv) 2004 2004 { … … 2076 2076 list<CArray<int,1> > list_indZoom, list_writtenInd, list_indGlob; 2077 2077 2078 boost::unordered_map<int, vector<size_t> >::const_iterator itIndex, iteIndex;2078 std::unordered_map<int, vector<size_t> >::const_iterator itIndex, iteIndex; 2079 2079 iteIndex = indSrv_[serverSize].end(); 2080 2080 for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) … … 2177 2177 list<CArray<bool,1> > list_mask; 2178 2178 2179 boost::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;2179 std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap; 2180 2180 iteMap = indSrv_[serverSize].end(); 2181 2181 for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) … … 2224 2224 list<CArray<double,1> > list_area; 2225 2225 2226 boost::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;2226 std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap; 2227 2227 iteMap = indSrv_[serverSize].end(); 2228 2228 for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) … … 2275 2275 list<CArray<double,2> > list_boundslon, list_boundslat; 2276 2276 2277 boost::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;2277 std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap; 2278 2278 iteMap = indSrv_[serverSize].end(); 2279 2279 for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) … … 2392 2392 } 2393 2393 2394 boost::unordered_map<int, vector<size_t> >::const_iterator it, iteMap;2394 std::unordered_map<int, vector<size_t> >::const_iterator it, iteMap; 2395 2395 iteMap = indSrv_[serverSize].end(); 2396 2396 for (int k = 0; k < connectedServerRank_[serverSize].size(); ++k) -
XIOS/trunk/src/node/domain.hpp
r1353 r1542 215 215 216 216 /** Global index of each client sent to server: map<serverSize, map<serverRank, indexes>> */ 217 std::map<int, boost::unordered_map<int, vector<size_t> > > indSrv_;217 std::map<int, std::unordered_map<int, vector<size_t> > > indSrv_; 218 218 // std::map<CContextClient*, std::map<int, vector<int> > > indWrittenSrv_; // Global written index of each client sent to server 219 219 std::vector<int> indexesToWrite; … … 229 229 TransMapTypes transformationMap_; 230 230 bool isUnstructed_; 231 boost::unordered_map<size_t,size_t> globalLocalIndexMap_;231 std::unordered_map<size_t,size_t> globalLocalIndexMap_; 232 232 233 233 private: -
XIOS/trunk/src/node/field.cpp
r1524 r1542 219 219 // Gather all data from different clients 220 220 recvDataSrv.resize(storeClient.numElements()); 221 recvFoperationSrv = boost::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv));221 recvFoperationSrv = std::shared_ptr<func::CFunctor>(new func::CInstant(recvDataSrv)); 222 222 } 223 223 … … 716 716 //---------------------------------------------------------------- 717 717 718 boost::shared_ptr<COutputPin> CField::getInstantDataFilter()718 std::shared_ptr<COutputPin> CField::getInstantDataFilter() 719 719 { 720 720 return instantDataFilter; … … 984 984 << "An operation must be defined for field \"" << getId() << "\"."); 985 985 986 boost::shared_ptr<func::CFunctor> functor;986 std::shared_ptr<func::CFunctor> functor; 987 987 CArray<double, 1> dummyData; 988 988 … … 1027 1027 { 1028 1028 if (!instantDataFilter) 1029 instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid,true));1029 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid,true)); 1030 1030 1031 1031 … … 1035 1035 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1036 1036 { 1037 fileServerWriterFilter = boost::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this));1037 fileServerWriterFilter = std::shared_ptr<CFileServerWriterFilter>(new CFileServerWriterFilter(gc, this)); 1038 1038 instantDataFilter->connectOutput(fileServerWriterFilter, 0); 1039 1039 } … … 1043 1043 { 1044 1044 if (!instantDataFilter) 1045 instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true));1045 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true)); 1046 1046 1047 1047 // If the field data is to be read by the client or/and written to a file … … 1050 1050 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1051 1051 { 1052 fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this));1052 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 1053 1053 instantDataFilter->connectOutput(fileWriterFilter, 0); 1054 1054 } … … 1064 1064 { 1065 1065 boost::scoped_ptr<IFilterExprNode> expr(parseExpr(getExpression() + '\0')); 1066 boost::shared_ptr<COutputPin> filter = expr->reduce(gc, *this);1066 std::shared_ptr<COutputPin> filter = expr->reduce(gc, *this); 1067 1067 1068 1068 // Check if a spatial transformation is needed … … 1073 1073 if (grid && grid != gridRef && grid->hasTransform()) 1074 1074 { 1075 std::pair< boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue);1075 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters = CSpatialTransformFilter::buildFilterGraph(gc, gridRef, grid, detectMissingValues, defaultValue); 1076 1076 1077 1077 filter->connectOutput(filters.first, 0); … … 1089 1089 { 1090 1090 checkTimeAttributes(); 1091 instantDataFilter = serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true,1091 instantDataFilter = serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 1092 1092 detectMissingValues, defaultValue)); 1093 1093 } … … 1095 1095 { 1096 1096 if (check_if_active.isEmpty()) check_if_active = false; 1097 instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false,1097 instantDataFilter = clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false, 1098 1098 detectMissingValues, defaultValue)); 1099 1099 } … … 1105 1105 if (!read_access.isEmpty() && read_access) 1106 1106 { 1107 storeFilter = boost::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid,1107 storeFilter = std::shared_ptr<CStoreFilter>(new CStoreFilter(gc, CContext::getCurrent(), grid, 1108 1108 detectMissingValues, defaultValue)); 1109 1109 instantDataFilter->connectOutput(storeFilter, 0); … … 1112 1112 if (file && (file->mode.isEmpty() || file->mode == CFile::mode_attr::write)) 1113 1113 { 1114 fileWriterFilter = boost::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this));1114 fileWriterFilter = std::shared_ptr<CFileWriterFilter>(new CFileWriterFilter(gc, this)); 1115 1115 getTemporalDataFilter(gc, file->output_freq)->connectOutput(fileWriterFilter, 0); 1116 1116 } … … 1126 1126 * \return the output pin corresponding to the field reference 1127 1127 */ 1128 boost::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc)1128 std::shared_ptr<COutputPin> CField::getFieldReference(CGarbageCollector& gc) 1129 1129 { 1130 1130 if (instantDataFilter || field_ref.isEmpty()) … … 1135 1135 fieldRef->buildFilterGraph(gc, false); 1136 1136 1137 std::pair< boost::shared_ptr<CFilter>, boost::shared_ptr<CFilter> > filters;1137 std::pair<std::shared_ptr<CFilter>, std::shared_ptr<CFilter> > filters; 1138 1138 // Check if a spatial transformation is needed 1139 1139 if (grid && grid != fieldRef->grid && grid->hasTransform()) … … 1144 1144 } 1145 1145 else 1146 filters.first = filters.second = boost::shared_ptr<CFilter>(new CPassThroughFilter(gc));1146 filters.first = filters.second = std::shared_ptr<CFilter>(new CPassThroughFilter(gc)); 1147 1147 1148 1148 fieldRef->getInstantDataFilter()->connectOutput(filters.first, 0); … … 1160 1160 * \return the output pin corresponding to a self reference 1161 1161 */ 1162 boost::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc)1162 std::shared_ptr<COutputPin> CField::getSelfReference(CGarbageCollector& gc) 1163 1163 { 1164 1164 if (instantDataFilter || !hasExpression()) … … 1176 1176 { 1177 1177 checkTimeAttributes(); 1178 serverSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true,1178 serverSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, freq_offset, true, 1179 1179 detectMissingValues, defaultValue)); 1180 1180 } … … 1193 1193 { 1194 1194 if (check_if_active.isEmpty()) check_if_active = false; 1195 clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, NoneDu, false,1195 clientSourceFilter = std::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true, NoneDu, false, 1196 1196 detectMissingValues, defaultValue)); 1197 1197 } … … 1213 1213 * \return the output pin corresponding to the requested temporal filter 1214 1214 */ 1215 boost::shared_ptr<COutputPin> CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)1216 { 1217 std::map<CDuration, boost::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq);1215 std::shared_ptr<COutputPin> CField::getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 1216 { 1217 std::map<CDuration, std::shared_ptr<COutputPin> >::iterator it = temporalDataFilters.find(outFreq); 1218 1218 1219 1219 if (it == temporalDataFilters.end()) … … 1226 1226 1227 1227 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1228 boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation,1228 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1229 1229 CContext::getCurrent()->getCalendar()->getInitDate(), 1230 1230 freq_op, freq_offset, outFreq, detectMissingValues)); … … 1247 1247 */ 1248 1248 1249 boost::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq)1249 std::shared_ptr<COutputPin> CField::getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq) 1250 1250 { 1251 1251 if (instantDataFilter || !hasExpression()) … … 1264 1264 1265 1265 const bool detectMissingValues = (!detect_missing_value.isEmpty() && detect_missing_value == true); 1266 boost::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation,1266 std::shared_ptr<CTemporalFilter> temporalFilter(new CTemporalFilter(gc, operation, 1267 1267 CContext::getCurrent()->getCalendar()->getInitDate(), 1268 1268 freq_op, freq_offset, outFreq, detectMissingValues)); -
XIOS/trunk/src/node/field.hpp
r1524 r1542 92 92 template <int N> void getData(CArray<double, N>& _data) const; 93 93 94 boost::shared_ptr<COutputPin> getInstantDataFilter();94 std::shared_ptr<COutputPin> getInstantDataFilter(); 95 95 96 96 /// Mutateur /// … … 143 143 144 144 145 boost::shared_ptr<COutputPin> getFieldReference(CGarbageCollector& gc);146 boost::shared_ptr<COutputPin> getSelfReference(CGarbageCollector& gc);147 boost::shared_ptr<COutputPin> getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq);148 boost::shared_ptr<COutputPin> getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq);145 std::shared_ptr<COutputPin> getFieldReference(CGarbageCollector& gc); 146 std::shared_ptr<COutputPin> getSelfReference(CGarbageCollector& gc); 147 std::shared_ptr<COutputPin> getTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq); 148 std::shared_ptr<COutputPin> getSelfTemporalDataFilter(CGarbageCollector& gc, CDuration outFreq); 149 149 150 150 // virtual void fromBinary(StdIStream& is); … … 226 226 bool mustAutoTrigger; 227 227 228 map<int, boost::shared_ptr<func::CFunctor> > foperation_srv;228 map<int,std::shared_ptr<func::CFunctor> > foperation_srv; 229 229 230 230 // map<int, CArray<double,1> > data_srv; 231 231 CArray<double,1> recvDataSrv; 232 232 233 boost::shared_ptr<func::CFunctor> recvFoperationSrv;233 std::shared_ptr<func::CFunctor> recvFoperationSrv; 234 234 string content; 235 235 … … 258 258 259 259 //! The output pin of the filter providing the instant data for the field 260 boost::shared_ptr<COutputPin> instantDataFilter;260 std::shared_ptr<COutputPin> instantDataFilter; 261 261 //! The output pin of the filters providing the result of the field's temporal operation 262 std::map<CDuration, boost::shared_ptr<COutputPin>, DurationFakeLessComparator> temporalDataFilters;262 std::map<CDuration, std::shared_ptr<COutputPin>, DurationFakeLessComparator> temporalDataFilters; 263 263 //! The output pin of the filter providing the instant data for self references 264 boost::shared_ptr<COutputPin> selfReferenceFilter;264 std::shared_ptr<COutputPin> selfReferenceFilter; 265 265 //! The source filter for data provided by the client 266 boost::shared_ptr<CSourceFilter> clientSourceFilter;266 std::shared_ptr<CSourceFilter> clientSourceFilter; 267 267 //! The source filter for data provided by the server 268 boost::shared_ptr<CSourceFilter> serverSourceFilter;268 std::shared_ptr<CSourceFilter> serverSourceFilter; 269 269 //! The terminal filter which stores the instant data 270 boost::shared_ptr<CStoreFilter> storeFilter;270 std::shared_ptr<CStoreFilter> storeFilter; 271 271 //! The terminal filter which writes the data to file 272 boost::shared_ptr<CFileWriterFilter> fileWriterFilter;272 std::shared_ptr<CFileWriterFilter> fileWriterFilter; 273 273 //! The terminal filter which writes data to file 274 boost::shared_ptr<CFileServerWriterFilter> fileServerWriterFilter;274 std::shared_ptr<CFileServerWriterFilter> fileServerWriterFilter; 275 275 }; // class CField 276 276 -
XIOS/trunk/src/node/file.cpp
r1516 r1542 64 64 \return data writer object. 65 65 */ 66 boost::shared_ptr<CDataOutput> CFile::getDataOutput(void) const66 std::shared_ptr<CDataOutput> CFile::getDataOutput(void) const 67 67 { 68 68 return data_out; … … 75 75 \return data reader object. 76 76 */ 77 boost::shared_ptr<CDataInput> CFile::getDataInput(void) const77 std::shared_ptr<CDataInput> CFile::getDataInput(void) const 78 78 { 79 79 return data_in; … … 545 545 if (isOpen) data_out->closeFile(); 546 546 547 data_out = s hared_ptr<CDataOutput>(new CNc4DataOutput(this, oss.str(), append, useClassicFormat, useCFConvention,547 data_out = std::shared_ptr<CDataOutput>(new CNc4DataOutput(this, oss.str(), append, useClassicFormat, useCFConvention, 548 548 fileComm, multifile, isCollective, time_counter_name)); 549 549 isOpen = true; … … 669 669 bool ugridConvention = !convention.isEmpty() ? (convention == convention_attr::UGRID) : false; 670 670 if (time_counter_name.isEmpty()) 671 data_in = s hared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention));671 data_in = std::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention)); 672 672 else 673 data_in = s hared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention, time_counter_name));673 data_in = std::shared_ptr<CDataInput>(new CNc4DataInput(oss.str(), readComm, multifile, isCollective, readMetaDataPar, ugridConvention, time_counter_name)); 674 674 isOpen = true; 675 675 } -
XIOS/trunk/src/node/file.hpp
r1494 r1542 71 71 /// Accesseurs /// 72 72 const StdString getFileOutputName(void) const; 73 boost::shared_ptr<CDataOutput> getDataOutput(void) const;74 boost::shared_ptr<CDataInput> getDataInput(void) const;73 std::shared_ptr<CDataOutput> getDataOutput(void) const; 74 std::shared_ptr<CDataInput> getDataInput(void) const; 75 75 CFieldGroup* getVirtualFieldGroup(void) const; 76 76 CVariableGroup* getVirtualVariableGroup(void) const; … … 186 186 CFieldGroup* vFieldGroup; 187 187 CVariableGroup* vVariableGroup; 188 boost::shared_ptr<CDataOutput> data_out;189 boost::shared_ptr<CDataInput> data_in;188 std::shared_ptr<CDataOutput> data_out; 189 std::shared_ptr<CDataInput> data_in; 190 190 std::vector<CField*> enabledFields; 191 191 -
XIOS/trunk/src/node/grid.cpp
r1397 r1542 783 783 784 784 // Compute mapping between client and server 785 std::vector< boost::unordered_map<size_t,std::vector<int> > > indexServerOnElement;785 std::vector<std::unordered_map<size_t,std::vector<int> > > indexServerOnElement; 786 786 CServerDistributionDescription serverDistributionDescription(getGlobalDimension(), client->serverSize); 787 787 std::vector<int> serverZeroIndex = serverDistributionDescription.computeServerGlobalByElement(indexServerOnElement, … … 889 889 \param [out] globalIndexOnServer global index of grid and its corresponding rank of server. 890 890 */ 891 void CGrid::computeIndexByElement(const std::vector< boost::unordered_map<size_t,std::vector<int> > >& indexServerOnElement,891 void CGrid::computeIndexByElement(const std::vector<std::unordered_map<size_t,std::vector<int> > >& indexServerOnElement, 892 892 const CContextClient* client, 893 893 CClientServerMapping::GlobalIndexMap& globalIndexOnServer) … … 942 942 943 943 std::vector<std::vector<bool> > elementOnServer(nbElement, std::vector<bool>(serverSize, false)); 944 std::vector< boost::unordered_map<int,std::vector<size_t> > > globalElementIndexOnServer(nbElement);944 std::vector<std::unordered_map<int,std::vector<size_t> > > globalElementIndexOnServer(nbElement); 945 945 CArray<int,1> nbIndexOnServer(serverSize); // Number of distributed global index held by each client for each server 946 946 // Number of temporary distributed global index held by each client for each server … … 950 950 { 951 951 nbIndexOnServer = 0; 952 const boost::unordered_map<size_t,std::vector<int> >& indexServerElement = indexServerOnElement[idx];952 const std::unordered_map<size_t,std::vector<int> >& indexServerElement = indexServerOnElement[idx]; 953 953 const CArray<size_t,1>& globalIndexElementOnClient = globalIndexElement[idx]; 954 954 CClientClientDHTInt clientClientDHT(indexServerElement, client->intraComm); -
XIOS/trunk/src/node/grid.hpp
r1422 r1542 288 288 void checkAttributesAfterTransformation(); 289 289 void setTransformationAlgorithms(); 290 void computeIndexByElement(const std::vector< boost::unordered_map<size_t,std::vector<int> > >& indexServerOnElement,290 void computeIndexByElement(const std::vector<std::unordered_map<size_t,std::vector<int> > >& indexServerOnElement, 291 291 const CContextClient* client, 292 292 CClientServerMapping::GlobalIndexMap& globalIndexOnServer); -
XIOS/trunk/src/node/mesh.cpp
r1507 r1542 6 6 7 7 #include "mesh.hpp" 8 #include <boost/functional/hash.hpp> 9 //#include <unordered_map> 8 10 9 11 namespace xios { … … 136 138 } 137 139 138 139 ///----------------------------------------------------------------140 /*!141 * \fn size_t CMesh::nodeIndex (double lon, double lat)142 * Returns its index if a node exists; otherwise adds the node and returns -1.143 * Precision check is implemented with two hash values for each dimension, longitude and latitude.144 * \param [in] lon Node longitude in degrees.145 * \param [in] lat Node latitude in degrees ranged from 0 to 360.146 * \return node index if a node exists; -1 otherwise147 */148 size_t CMesh::nodeIndex (double lon, double lat)149 {150 double minBoundLon = 0. ;151 double maxBoundLon = 360. ;152 double minBoundLat = -90 ;153 double maxBoundLat = 90 ;154 double prec=1e-11 ;155 double precLon=prec ;156 double precLat=prec ;157 158 size_t maxsize_t=numeric_limits<size_t>::max() ;159 if ( (maxBoundLon-minBoundLon)/maxsize_t > precLon) precLon=(maxBoundLon-minBoundLon)/maxsize_t ;160 if ( (maxBoundLat-minBoundLat)/maxsize_t > precLat) precLat=(maxBoundLat-minBoundLat)/maxsize_t ;161 162 size_t iMinLon=0 ;163 size_t iMaxLon=(maxBoundLon-minBoundLon)/precLon ;164 size_t iMinLat=0 ;165 size_t iMaxLat=(maxBoundLat-minBoundLat)/precLat ;166 167 size_t hash0,hash1,hash2,hash3 ;168 size_t lon0,lon1,lat0,lat1 ;169 170 lon0=(lon-minBoundLon)/precLon ;171 if ( ((lon0+1)*precLon + lon0*precLon)/2 > lon-minBoundLon)172 {173 if (lon0==iMinLon) lon1=iMaxLon ;174 else lon1=lon0-1 ;175 }176 else177 {178 if (lon0==iMaxLon) lon1=iMinLon ;179 else lon1=lon0+1 ;180 }181 182 lat0=(lat-minBoundLat)/precLat ;183 if ( ((lat0+1)*precLat + lat0*precLat)/2 > lat-minBoundLat)184 {185 if (lat0==iMinLat) lat1=lat0 ;186 else lat1=lat0-1 ;187 }188 else189 {190 if (lat0==iMaxLat) lat1=lat0 ;191 else lat1=lat0+1 ;192 }193 194 hash0=hashPair(lon0,lat0) ;195 hash1=hashPair(lon0,lat1) ;196 hash2=hashPair(lon1,lat0) ;197 hash3=hashPair(lon1,lat1) ;198 199 boost::unordered_map<size_t, size_t>::iterator end = hashed_map_nodes.end() ;200 size_t mapSize = hashed_map_nodes.size();201 if (hashed_map_nodes.find(hash0)==end && hashed_map_nodes.find(hash1)==end && hashed_map_nodes.find(hash2)==end && hashed_map_nodes.find(hash3)==end)202 {203 hashed_map_nodes[hash0] = mapSize ;204 hashed_map_nodes[hash1] = mapSize + 1;205 hashed_map_nodes[hash2] = mapSize + 2;206 hashed_map_nodes[hash3] = mapSize + 3;207 return -1;208 }209 else210 return ( (hashed_map_nodes[hash0]+1) / 4 );211 212 } // nodeIndex()213 214 140 ///---------------------------------------------------------------- 215 141 /*! … … 298 224 * \param [in] bounds_lat Array of boundary latitudes. Its size depends on the element type. 299 225 */ 300 void CMesh::createMesh(const CArray<double, 1>& lonvalue, const CArray<double, 1>& latvalue,301 const CArray<double, 2>& bounds_lon, const CArray<double, 2>& bounds_lat)302 {303 int nvertex = (bounds_lon.numElements() == 0) ? 1 : bounds_lon.rows();304 305 if (nvertex == 1)306 {307 nbNodes_ = lonvalue.numElements();308 node_lon.resizeAndPreserve(nbNodes_);309 node_lat.resizeAndPreserve(nbNodes_);310 for (int nn = 0; nn < nbNodes_; ++nn)311 {312 if (map_nodes.find(make_pair (lonvalue(nn), latvalue(nn))) == map_nodes.end())313 {314 map_nodes[make_pair (lonvalue(nn), latvalue(nn))] = nn ;315 node_lon(nn) = lonvalue(nn);316 node_lat(nn) = latvalue(nn);317 }318 }319 }320 else if (nvertex == 2)321 {322 nbEdges_ = bounds_lon.shape()[1];323 324 // Create nodes and edge_node connectivity325 node_lon.resizeAndPreserve(nbEdges_*nvertex); // Max possible number of nodes326 node_lat.resizeAndPreserve(nbEdges_*nvertex);327 edge_nodes.resizeAndPreserve(nvertex, nbEdges_);328 329 for (int ne = 0; ne < nbEdges_; ++ne)330 {331 for (int nv = 0; nv < nvertex; ++nv)332 {333 if (map_nodes.find(make_pair (bounds_lon(nv, ne), bounds_lat(nv ,ne))) == map_nodes.end())334 {335 map_nodes[make_pair (bounds_lon(nv, ne), bounds_lat(nv, ne))] = nbNodes_ ;336 edge_nodes(nv,ne) = nbNodes_ ;337 node_lon(nbNodes_) = bounds_lon(nv, ne);338 node_lat(nbNodes_) = bounds_lat(nv, ne);339 ++nbNodes_ ;340 }341 else342 edge_nodes(nv,ne) = map_nodes[make_pair (bounds_lon(nv, ne), bounds_lat(nv ,ne))];343 }344 }345 node_lon.resizeAndPreserve(nbNodes_);346 node_lat.resizeAndPreserve(nbNodes_);347 348 // Create edges349 edge_lon.resizeAndPreserve(nbEdges_);350 edge_lat.resizeAndPreserve(nbEdges_);351 352 for (int ne = 0; ne < nbEdges_; ++ne)353 {354 if (map_edges.find(make_ordered_pair (edge_nodes(0,ne), edge_nodes(1,ne))) == map_edges.end())355 {356 map_edges[make_ordered_pair ( edge_nodes(0,ne), edge_nodes(1,ne) )] = ne ;357 edge_lon(ne) = lonvalue(ne);358 edge_lat(ne) = latvalue(ne);359 }360 361 }362 edgesAreWritten = true;363 }364 else365 {366 nbFaces_ = bounds_lon.shape()[1];367 368 // Create nodes and face_node connectivity369 node_lon.resizeAndPreserve(nbFaces_*nvertex); // Max possible number of nodes370 node_lat.resizeAndPreserve(nbFaces_*nvertex);371 face_nodes.resize(nvertex, nbFaces_);372 373 for (int nf = 0; nf < nbFaces_; ++nf)374 {375 for (int nv = 0; nv < nvertex; ++nv)376 {377 if (map_nodes.find(make_pair (bounds_lon(nv, nf), bounds_lat(nv ,nf))) == map_nodes.end())378 {379 map_nodes[make_pair (bounds_lon(nv, nf), bounds_lat(nv, nf))] = nbNodes_ ;380 face_nodes(nv,nf) = nbNodes_ ;381 node_lon(nbNodes_) = bounds_lon(nv, nf);382 node_lat(nbNodes_) = bounds_lat(nv ,nf);383 ++nbNodes_ ;384 }385 else386 {387 face_nodes(nv,nf) = map_nodes[make_pair (bounds_lon(nv, nf), bounds_lat(nv ,nf))];388 }389 }390 }391 node_lon.resizeAndPreserve(nbNodes_);392 node_lat.resizeAndPreserve(nbNodes_);393 394 // Create edges and edge_nodes connectivity395 edge_lon.resizeAndPreserve(nbFaces_*nvertex); // Max possible number of edges396 edge_lat.resizeAndPreserve(nbFaces_*nvertex);397 edge_nodes.resizeAndPreserve(2, nbFaces_*nvertex);398 edge_faces.resize(2, nbFaces_*nvertex);399 face_edges.resize(nvertex, nbFaces_);400 face_faces.resize(nvertex, nbFaces_);401 402 vector<int> countEdges(nbFaces_*nvertex); // needed in case if edges have been already generated403 vector<int> countFaces(nbFaces_);404 countEdges.assign(nbFaces_*nvertex, 0);405 countFaces.assign(nbFaces_, 0);406 int edge;407 for (int nf = 0; nf < nbFaces_; ++nf)408 {409 for (int nv1 = 0; nv1 < nvertex; ++nv1)410 {411 int nv = 0;412 int nv2 = (nv1 < nvertex -1 ) ? (nv1 + 1) : (nv1 + 1 - nvertex); // cyclic rotation413 if (map_edges.find(make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))) == map_edges.end())414 {415 map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))] = nbEdges_ ;416 face_edges(nv1,nf) = map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))];417 edge_faces(0,nbEdges_) = nf;418 edge_faces(1,nbEdges_) = -999;419 face_faces(nv1,nf) = 999999;420 edge_nodes(Range::all(),nbEdges_) = face_nodes(nv1,nf), face_nodes(nv2,nf);421 edge_lon(nbEdges_) = ( abs( node_lon(face_nodes(nv1,nf)) - node_lon(face_nodes(nv2,nf))) < 180.) ?422 (( node_lon(face_nodes(nv1,nf)) + node_lon(face_nodes(nv2,nf))) * 0.5) :423 (( node_lon(face_nodes(nv1,nf)) + node_lon(face_nodes(nv2,nf))) * 0.5 -180.);424 edge_lat(nbEdges_) = ( node_lat(face_nodes(nv1,nf)) + node_lat(face_nodes(nv2,nf)) ) * 0.5;425 ++nbEdges_;426 }427 else428 {429 edge = map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))];430 face_edges(nv1,nf) = edge;431 if (edgesAreWritten)432 {433 edge_faces(countEdges[edge], edge) = nf;434 if (countEdges[edge]==0)435 {436 face_faces(nv1,nf) = 999999;437 }438 else439 {440 int face1 = nf; // = edge_faces(1,edge)441 int face2 = edge_faces(0,edge);442 face_faces(countFaces[face1], face1) = face2;443 face_faces(countFaces[face2], face2) = face1;444 ++(countFaces[face1]);445 ++(countFaces[face2]);446 }447 }448 else449 {450 edge_faces(1,edge) = nf;451 int face1 = nf; // = edge_faces(1,edge)452 int face2 = edge_faces(0,edge);453 face_faces(countFaces[face1], face1) = face2;454 face_faces(countFaces[face2], face2) = face1;455 ++(countFaces[face1]);456 ++(countFaces[face2]);457 }458 ++(countEdges[edge]);459 }460 }461 }462 edge_nodes.resizeAndPreserve(2, nbEdges_);463 edge_faces.resizeAndPreserve(2, nbEdges_);464 edge_lon.resizeAndPreserve(nbEdges_);465 edge_lat.resizeAndPreserve(nbEdges_);466 467 // Create faces468 face_lon.resize(nbFaces_);469 face_lat.resize(nbFaces_);470 face_lon = lonvalue;471 face_lat = latvalue;472 facesAreWritten = true;473 474 } // nvertex > 2475 476 } // createMesh()226 // void CMesh::createMesh(const CArray<double, 1>& lonvalue, const CArray<double, 1>& latvalue, 227 // const CArray<double, 2>& bounds_lon, const CArray<double, 2>& bounds_lat) 228 // { 229 // int nvertex = (bounds_lon.numElements() == 0) ? 1 : bounds_lon.rows(); 230 // 231 // if (nvertex == 1) 232 // { 233 // nbNodes_ = lonvalue.numElements(); 234 // node_lon.resizeAndPreserve(nbNodes_); 235 // node_lat.resizeAndPreserve(nbNodes_); 236 // for (int nn = 0; nn < nbNodes_; ++nn) 237 // { 238 // if (map_nodes.find(make_pair (lonvalue(nn), latvalue(nn))) == map_nodes.end()) 239 // { 240 // map_nodes[make_pair (lonvalue(nn), latvalue(nn))] = nn ; 241 // node_lon(nn) = lonvalue(nn); 242 // node_lat(nn) = latvalue(nn); 243 // } 244 // } 245 // } 246 // else if (nvertex == 2) 247 // { 248 // nbEdges_ = bounds_lon.shape()[1]; 249 // 250 // // Create nodes and edge_node connectivity 251 // node_lon.resizeAndPreserve(nbEdges_*nvertex); // Max possible number of nodes 252 // node_lat.resizeAndPreserve(nbEdges_*nvertex); 253 // edge_nodes.resizeAndPreserve(nvertex, nbEdges_); 254 // 255 // for (int ne = 0; ne < nbEdges_; ++ne) 256 // { 257 // for (int nv = 0; nv < nvertex; ++nv) 258 // { 259 // if (map_nodes.find(make_pair (bounds_lon(nv, ne), bounds_lat(nv ,ne))) == map_nodes.end()) 260 // { 261 // map_nodes[make_pair (bounds_lon(nv, ne), bounds_lat(nv, ne))] = nbNodes_ ; 262 // edge_nodes(nv,ne) = nbNodes_ ; 263 // node_lon(nbNodes_) = bounds_lon(nv, ne); 264 // node_lat(nbNodes_) = bounds_lat(nv, ne); 265 // ++nbNodes_ ; 266 // } 267 // else 268 // edge_nodes(nv,ne) = map_nodes[make_pair (bounds_lon(nv, ne), bounds_lat(nv ,ne))]; 269 // } 270 // } 271 // node_lon.resizeAndPreserve(nbNodes_); 272 // node_lat.resizeAndPreserve(nbNodes_); 273 // 274 // // Create edges 275 // edge_lon.resizeAndPreserve(nbEdges_); 276 // edge_lat.resizeAndPreserve(nbEdges_); 277 // 278 // for (int ne = 0; ne < nbEdges_; ++ne) 279 // { 280 // if (map_edges.find(make_ordered_pair (edge_nodes(0,ne), edge_nodes(1,ne))) == map_edges.end()) 281 // { 282 // map_edges[make_ordered_pair ( edge_nodes(0,ne), edge_nodes(1,ne) )] = ne ; 283 // edge_lon(ne) = lonvalue(ne); 284 // edge_lat(ne) = latvalue(ne); 285 // } 286 // 287 // } 288 // edgesAreWritten = true; 289 // } 290 // else 291 // { 292 // nbFaces_ = bounds_lon.shape()[1]; 293 // 294 // // Create nodes and face_node connectivity 295 // node_lon.resizeAndPreserve(nbFaces_*nvertex); // Max possible number of nodes 296 // node_lat.resizeAndPreserve(nbFaces_*nvertex); 297 // face_nodes.resize(nvertex, nbFaces_); 298 // 299 // for (int nf = 0; nf < nbFaces_; ++nf) 300 // { 301 // for (int nv = 0; nv < nvertex; ++nv) 302 // { 303 // if (map_nodes.find(make_pair (bounds_lon(nv, nf), bounds_lat(nv ,nf))) == map_nodes.end()) 304 // { 305 // map_nodes[make_pair (bounds_lon(nv, nf), bounds_lat(nv, nf))] = nbNodes_ ; 306 // face_nodes(nv,nf) = nbNodes_ ; 307 // node_lon(nbNodes_) = bounds_lon(nv, nf); 308 // node_lat(nbNodes_) = bounds_lat(nv ,nf); 309 // ++nbNodes_ ; 310 // } 311 // else 312 // { 313 // face_nodes(nv,nf) = map_nodes[make_pair (bounds_lon(nv, nf), bounds_lat(nv ,nf))]; 314 // } 315 // } 316 // } 317 // node_lon.resizeAndPreserve(nbNodes_); 318 // node_lat.resizeAndPreserve(nbNodes_); 319 // 320 // // Create edges and edge_nodes connectivity 321 // edge_lon.resizeAndPreserve(nbFaces_*nvertex); // Max possible number of edges 322 // edge_lat.resizeAndPreserve(nbFaces_*nvertex); 323 // edge_nodes.resizeAndPreserve(2, nbFaces_*nvertex); 324 // edge_faces.resize(2, nbFaces_*nvertex); 325 // face_edges.resize(nvertex, nbFaces_); 326 // face_faces.resize(nvertex, nbFaces_); 327 // 328 // vector<int> countEdges(nbFaces_*nvertex); // needed in case if edges have been already generated 329 // vector<int> countFaces(nbFaces_); 330 // countEdges.assign(nbFaces_*nvertex, 0); 331 // countFaces.assign(nbFaces_, 0); 332 // int edge; 333 // for (int nf = 0; nf < nbFaces_; ++nf) 334 // { 335 // for (int nv1 = 0; nv1 < nvertex; ++nv1) 336 // { 337 // int nv = 0; 338 // int nv2 = (nv1 < nvertex -1 ) ? (nv1 + 1) : (nv1 + 1 - nvertex); // cyclic rotation 339 // if (map_edges.find(make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))) == map_edges.end()) 340 // { 341 // map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))] = nbEdges_ ; 342 // face_edges(nv1,nf) = map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))]; 343 // edge_faces(0,nbEdges_) = nf; 344 // edge_faces(1,nbEdges_) = -999; 345 // face_faces(nv1,nf) = 999999; 346 // edge_nodes(Range::all(),nbEdges_) = face_nodes(nv1,nf), face_nodes(nv2,nf); 347 // edge_lon(nbEdges_) = ( abs( node_lon(face_nodes(nv1,nf)) - node_lon(face_nodes(nv2,nf))) < 180.) ? 348 // (( node_lon(face_nodes(nv1,nf)) + node_lon(face_nodes(nv2,nf))) * 0.5) : 349 // (( node_lon(face_nodes(nv1,nf)) + node_lon(face_nodes(nv2,nf))) * 0.5 -180.); 350 // edge_lat(nbEdges_) = ( node_lat(face_nodes(nv1,nf)) + node_lat(face_nodes(nv2,nf)) ) * 0.5; 351 // ++nbEdges_; 352 // } 353 // else 354 // { 355 // edge = map_edges[make_ordered_pair (face_nodes(nv1,nf), face_nodes(nv2,nf))]; 356 // face_edges(nv1,nf) = edge; 357 // if (edgesAreWritten) 358 // { 359 // edge_faces(countEdges[edge], edge) = nf; 360 // if (countEdges[edge]==0) 361 // { 362 // face_faces(nv1,nf) = 999999; 363 // } 364 // else 365 // { 366 // int face1 = nf; // = edge_faces(1,edge) 367 // int face2 = edge_faces(0,edge); 368 // face_faces(countFaces[face1], face1) = face2; 369 // face_faces(countFaces[face2], face2) = face1; 370 // ++(countFaces[face1]); 371 // ++(countFaces[face2]); 372 // } 373 // } 374 // else 375 // { 376 // edge_faces(1,edge) = nf; 377 // int face1 = nf; // = edge_faces(1,edge) 378 // int face2 = edge_faces(0,edge); 379 // face_faces(countFaces[face1], face1) = face2; 380 // face_faces(countFaces[face2], face2) = face1; 381 // ++(countFaces[face1]); 382 // ++(countFaces[face2]); 383 // } 384 // ++(countEdges[edge]); 385 // } 386 // } 387 // } 388 // edge_nodes.resizeAndPreserve(2, nbEdges_); 389 // edge_faces.resizeAndPreserve(2, nbEdges_); 390 // edge_lon.resizeAndPreserve(nbEdges_); 391 // edge_lat.resizeAndPreserve(nbEdges_); 392 // 393 // // Create faces 394 // face_lon.resize(nbFaces_); 395 // face_lat.resize(nbFaces_); 396 // face_lon = lonvalue; 397 // face_lat = latvalue; 398 // facesAreWritten = true; 399 // 400 // } // nvertex > 2 401 // 402 // } // createMesh() 477 403 478 404 ///---------------------------------------------------------------- … … 2088 2014 2089 2015 // faceToFaces connectivity 2090 boost::unordered_map <int, int> mapFaces; // mapFaces = < hash(face1, face2), hash> (the mapped value is irrelevant)2016 std::unordered_map <int, int> mapFaces; // mapFaces = < hash(face1, face2), hash> (the mapped value is irrelevant) 2091 2017 int maxNb = 20; // some assumption on the max possible number of neighboring cells 2092 2018 faceToFaces.resize(maxNb, nbFaces); … … 2145 2071 CArray<double, 2> faceToNodes (nvertex, nbFaces); 2146 2072 2147 boost::unordered_map <pair<double,double>, int> mapNodes;2073 std::unordered_map <pairDouble, int, boost::hash<pairDouble> > mapNodes; 2148 2074 2149 2075 for (int nf = 0; nf < nbFaces; ++nf) … … 2161 2087 2162 2088 // faceToFaces connectivity 2163 boost::unordered_map <pair<int,int>, int> mapEdges;2089 std::unordered_map <pairInt, int, boost::hash<pairInt> > mapEdges; 2164 2090 faceToFaces.resize(nvertex, nbFaces); 2165 2091 CArray<int, 2> edgeToFaces(2, nbFaces*nvertex); // max possible -
XIOS/trunk/src/node/mesh.hpp
r931 r1542 76 76 private: 77 77 78 typedef std::pair<double, double> pairDouble; 79 typedef std::pair<int, int> pairInt; 80 78 81 int nbNodes_; 79 82 int nbEdges_; … … 91 94 vector<size_t> createHashes (const double, const double); 92 95 93 size_t nodeIndex (double, double); // redundant in parallel version with epsilon precision94 boost::unordered_map <size_t, size_t> hashed_map_nodes; // redundant in parallel version with epsilon precision95 boost::unordered_map <pair<double,double>, int> map_nodes; // redundant in parallel version with epsilon precision96 boost::unordered_map <pair<int,int>, int> map_edges; // redundant in parallel version with epsilon precision97 98 96 }; 99 97
Note: See TracChangeset
for help on using the changeset viewer.