void CollapsedAKQReducedCubSComplexSupplier<Traits>::CreateKappaMapFromQuotient( CubCellSetPtr cubCellSet, Dims& dims, KappaMap& kappaMap) { _allCells.clear(); _cellsMapByDim.clear(); _nullSetCell = new CellDescriptor(0, 0); _allCells.push_back(_nullSetCell); _cellsCountByDim[0] = 1; size_t maxDim = static_cast<size_t>(cubCellSet().embDim()); PointCoordIterator it = PointCoordIterator(cubCellSet().begin()); BitCoordIterator itEnd = cubCellSet().end(); for ( ; it < itEnd; ++it) { if (it.ownDim() == maxDim) { CreateCell(cubCellSet, it, maxDim); } } std::map<size_t, size_t> cellsIndicesOffsets; size_t totalCellsCount = 0; for (size_t i = 0; i <= maxDim; i++) { if (i > 0) { cellsIndicesOffsets[i] = cellsIndicesOffsets[i - 1] + _cellsCountByDim[i - 1]; } totalCellsCount += _cellsCountByDim[i]; _logger.Log(FGLogger::Debug)<<_cellsCountByDim[i]<<" cells in dim "<<i; _logger.Log(FGLogger::Debug)<<" with offset "<<cellsIndicesOffsets[i]<<std::endl; } _logger.Log(FGLogger::Debug)<<"total cells generated: "<<totalCellsCount<<std::endl; dims.resize(totalCellsCount); kappaMap.clear(); typename CellsDescriptors::iterator jt = _allCells.begin(); typename CellsDescriptors::iterator jtEnd = _allCells.end(); for ( ; jt != jtEnd; ++jt) { CellDescriptor* cell = *jt; size_t index = cell->_index + cellsIndicesOffsets[cell->_dim]; size_t faceIndexOffset = cellsIndicesOffsets[cell->_dim - 1]; dims[index] = cell->_dim; std::vector<int>::iterator cIt = cell->_coefficients.begin(); for (typename CellsDescriptors::iterator fIt = cell->_faces.begin(); fIt != cell->_faces.end(); ++fIt) { CellDescriptor* face = *fIt; kappaMap.push_back(KappaMapEntry(static_cast<Id>(index), static_cast<Id>(face->_index + faceIndexOffset), *cIt)); cIt++; } } jt = _allCells.begin(); for ( ; jt != jtEnd; ++jt) { delete *jt; } }