From: Cody P. <Cod...@in...> - 2011-01-27 00:44:31
|
I have traced the source of the sideset problem with AMR. The problem lies in the virtual function "Elem::is_child_on_side". The typical implementation of this function for most of the different element types is to compare the actual child number (NOT the Element ID) with the corresponding parent vertex associated with that child. (i.e. the order of the children is well defined because of the embedding_matrix and lines up nicely with the vertices of the parent element). The problem arises when this assumption does not hold because the embedding matrix purposely switches that order. Here is the comment from cell_hex8.C which does just that! // The 8 children of the Hex-type elements can be thought of as being // associated with the 8 vertices of the Hex. Some of the children are // numbered the same as their corresponding vertex, while some are // not. The children which are numbered differently have been marked // with ** in the comments below. Specifically, here is the list of changes for Hex elements: Vertex 2 holds child 3 Vertex 3 holds child 2 Vertex 6 holds child 7 Vertex 7 holds child 6 OOPS! The result is that the call to "Elem::active_family_tree_by_side" returns bogus elements for a given side! This seems like a somewhat critical issue so before I get in there and hack a fix, I just wanted to bring the findings to the development team's attention. Does anybody have a preferred fix for this problem? The same error will be present in each of of the element types that has "renumbered" children. Thanks, Cody |