void CopyGridLevelElements(MultiGrid& srcMG, Grid& destGrid, ISubsetHandler& srcSH, ISubsetHandler& destSH, int lvl, AVertex& aNewVrt) { Grid::VertexAttachmentAccessor<AVertex> aaNewVrt(srcMG, aNewVrt); GridObjectCollection goc = srcMG.get_grid_objects(); CustomVertexGroup vrts; typedef typename Grid::traits<TElem>::iterator iter_t; for(iter_t eIter = goc.begin<TElem>(lvl); eIter != goc.end<TElem>(lvl); ++eIter) { TElem* e = *eIter; vrts.resize(e->num_vertices()); for(size_t iv = 0; iv < e->num_vertices(); ++iv) { vrts.set_vertex(iv, aaNewVrt[e->vertex(iv)]); } TElem* ne = *destGrid.create_by_cloning(e, vrts); destSH.assign_subset(ne, srcSH.get_subset_index(e)); } }
void AssignAssociatedVerticesToSubsets(TSubsetHandler& sh, const ISubsetHandler& srcIndHandler) { typedef typename geometry_traits<TElem>::const_iterator iterator; for(size_t l = 0; l < sh.num_levels(); ++l){ for(int si = 0; si < sh.num_subsets(); ++si){ for(iterator iter = sh.template begin<TElem>(si, l); iter != sh.template end<TElem>(si, l); ++iter) { TElem* e = *iter; for(size_t i = 0; i < e->num_vertices(); ++i) { Vertex* vrt = e->vertex(i); sh.assign_subset(vrt, srcIndHandler.get_subset_index(vrt)); } } } } }