On Wed, 17 Nov 2010, Cody Permann wrote:
> On Nov 17, 2010, at 2:24 PM, Roy Stogner wrote: > >> And because >> PointLocatorTree only operates on active elements, it shouldn't care >> whether or not we delete subactive elements after it's constructed. > > Sounds good, but are you completely sure? Check out the find_element() > routine > on line 501 inside of tree_node.C which is where the seg fault occurs. That > method > is using an internal data structure of pointers to elements. That data > structure would > be out of date after the call to mesh::contract() because contract() calls > renumber_nodes_and_elements() which changes pointers around. I don't think it's supposed to change pointers around (other than by deleting the subactive elements and unused nodes), at least in the existing Mesh implementations. ParallelMesh uses a mapvector<Elem*> as a container; SerialMesh uses a vector<Elem*>. We move Elem* from place to place within at least the latter data structure, but the Elem itself should never change addresses. > I propose we add a call to clear_point_locator() right after the > call to contract() inside of EquationSystems.reinit(). I already > made this change in my local copy and everything seems to be working > correctly without the explicit call to clear the point locator in > user code anymore. Sounds like the best place for an additional clear_point_locator() is at the end of UnstructuredMesh::contract(), then. That method is supposed to be callable in more contexts, even if we never do so and I doubt any of our users do either. Once that's done, your patch is probably safe to commit - I still want to better understand this bug but it appears we've at least fixed it. --- Roy ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today http://p.sf.net/sfu/msIE9-sfdev2dev _______________________________________________ Libmesh-devel mailing list Libmesh-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libmesh-devel