void NodeBasedCellPopulation<DIM>::UpdateMapsAfterRemesh(NodeMap& map) { if (!map.IsIdentityMap()) { UpdateParticlesAfterReMesh(map); // Update the mappings between cells and location indices ///\todo we want to make mCellLocationMap private - we need to find a better way of doing this std::map<Cell*, unsigned> old_map = this->mCellLocationMap; // Remove any dead pointers from the maps (needed to avoid archiving errors) this->mLocationCellMap.clear(); this->mCellLocationMap.clear(); for (std::list<CellPtr>::iterator it = this->mCells.begin(); it != this->mCells.end(); ++it) { unsigned old_node_index = old_map[(*it).get()]; // This shouldn't ever happen, as the cell vector only contains living cells assert(!map.IsDeleted(old_node_index)); unsigned new_node_index = map.GetNewIndex(old_node_index); this->SetCellUsingLocationIndex(new_node_index,*it); } this->Validate(); } }