19template<
typename ID,
typename LENGTH>
inline void sortIds(
const uint dimension,
20 const LENGTH meshSize,
21 const std::vector<ID>& ids,
22 std::map<ID, ID>& mapping){
27 for (uint
i = 0;
i < ids.size() ; ++
i ) {
30 if (
id > meshSize[0] * meshSize[1] * meshSize[2])
35 const ID idMapped = id;
36 mapping[idMapped] = id;
44 const ID x_index = (
id-1) % meshSize[0];
45 const ID y_index = ((
id-1) / meshSize[0]) % meshSize[1];
48 const ID idMapped =
id - (x_index + y_index*meshSize[0]) + y_index + x_index * meshSize[1];
50 mapping[idMapped] = id;
57 const ID x_index = (
id-1) % meshSize[0];
58 const ID y_index = ((
id-1) / meshSize[0]) % meshSize[1];
59 const ID z_index = ((
id-1) / (meshSize[0] * meshSize[1]));
66 const ID idMapped = 1 + z_index + y_index*meshSize[2] + x_index*meshSize[1]*meshSize[2];
67 mapping[idMapped] = id;
86 std::vector<ID> & ids,
87 std::vector<uint> & columnIdOffsets,
88 std::vector<uint> & columnNumIds,
89 std::vector<uint> & setColumnOffsets,
90 std::vector<uint> & setNumColumns) {
92 const uint nIds = ids.size();
95 std::vector<std::pair<ID, ID> > sortedIdPairs;
100 columnIdOffsets.push_back(0);
101 setColumnOffsets.push_back(0);
102 uint prev_column_id, prev_dimension_id;
104 for (uint
i=0;
i<nIds; ++
i) {
106 uint column_id = sortedIdPairs[
i].first / meshSize[dimension];
109 uint dimension_id = sortedIdPairs[
i].first % meshSize[dimension];
112 ids[
i] = sortedIdPairs[
i].second;
114 if (
i > 0 && ( column_id != prev_column_id || dimension_id != (prev_dimension_id + 1) )){
118 columnIdOffsets.push_back(
i);
120 columnNumIds.push_back(columnIdOffsets[columnIdOffsets.size()-1] - columnIdOffsets[columnIdOffsets.size()-2]);
122 if (column_id != prev_column_id ){
124 setColumnOffsets.push_back(columnIdOffsets.size() - 1);
126 setNumColumns.push_back(setColumnOffsets[setColumnOffsets.size()-1] - setColumnOffsets[setColumnOffsets.size()-2]);
129 prev_column_id = column_id;
130 prev_dimension_id = dimension_id;
133 columnNumIds.push_back(nIds - columnIdOffsets[columnIdOffsets.size()-1]);
134 setNumColumns.push_back(columnNumIds.size() - setColumnOffsets[setColumnOffsets.size()-1]);
void sortIds(const uint dimension, const LENGTH meshSize, const std::vector< ID > &ids, std::map< ID, ID > &mapping)
void sortIdlistByDimension(const uint dimension, const LENGTH meshSize, std::vector< ID > &ids, std::vector< uint > &columnIdOffsets, std::vector< uint > &columnNumIds, std::vector< uint > &setColumnOffsets, std::vector< uint > &setNumColumns)