I'd propose if any changes are made to inverse_map() to check that the mapped point agrees that it be turned on only through an optional argument or something like that. I'm pretty sure there are places that rely on finding this normal projection to get the *closest* point, even if it is not an exact match. I know I've used that in applications, at least...
-Ben ________________________________________ From: Roy Stogner [[email protected]] Sent: Friday, March 25, 2011 12:05 AM To: [email protected] Cc: [email protected] Subject: Re: [Libmesh-users] Problem with contains_point in face element in 3D On Fri, 25 Mar 2011, [email protected] wrote: > I have a 2D mesh in 3 spacial dimensions and I'd like to get the > element, which contains a point. The point_locator uses > Elem::contains_point which uses FEInterface::inverse_map and then > checks, if the reference point is in the reference element. For 3D > points the inverse map is not defined in the whole space, which causes > problems, when mapping non coplanar points falsely to the reference > element. Hmm... yes, inverse_map() is solving the normal equations, and so ought to be converging to the inverse of the projection of the point into the plane/line of the element... which is fine on interior meshes or on boundary meshes generated from "flat enough" boundary subsets but which would give false positives for many boundary meshes. > I then changed the function a bit by mapping the reference > point back again in physical space and checked the distance there for > < tol*hmin(). However now it looks like I've got other problems > probably caused by this hack. That sounds like the right fix, but inverse_map is used in a lot of places and it would indeed be easy to break something else by missing a corner case... like we seem to have done in the first place. Are your other problems replicable on any of the examples or on anything you can send us in a short code? > Am I doing something wrong, is there a common pitfall with boundary > meshes, or does anybody know, how to locate an element containing the > point on boundary meshes. You're doing everything right, and found a bug that needs fixing; it's just not a common pitfall because it's not a common usage type, I suppose. --- Roy ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users ------------------------------------------------------------------------------ Enable your software for Intel(R) Active Management Technology to meet the growing manageability and security demands of your customers. Businesses are taking advantage of Intel(R) vPro (TM) technology - will your software be a part of the solution? Download the Intel(R) Manageability Checker today! http://p.sf.net/sfu/intel-dev2devmar _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
