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(); } }
void MeshBasedCellPopulationWithGhostNodes<DIM>::UpdateGhostNodesAfterReMesh(NodeMap& rMap) { // Copy mIsGhostNode to a temporary vector std::vector<bool> ghost_nodes_before_remesh = mIsGhostNode; // Reinitialise mIsGhostNode mIsGhostNode.clear(); mIsGhostNode.resize(this->GetNumNodes()); // Update mIsGhostNode using the node map for (unsigned old_index=0; old_index<rMap.GetSize(); old_index++) { if (!rMap.IsDeleted(old_index)) { unsigned new_index = rMap.GetNewIndex(old_index); mIsGhostNode[new_index] = ghost_nodes_before_remesh[old_index]; } } }