On Wed, 2 Mar 2011, Cody Permann wrote:

>> point_locator(), and topological_neighbor(), and perhaps an expanding
>> range of future functions, should not be used inside element loops
>> unless the loop is preceded by an explicit PointLocator construction.
>
> Yes - I did in fact run into this in our code.

And in the library code; one or two of the broken spots in
MeshRefinement had "codyperm" in the svn blame column.  ;-)

Not to criticize; I looked at the code too and didn't see the problem.
And in hindsight my fix isn't the best: we should only build a new
PointLocator in cases where there actually is a non-empty
PeriodicBoundaries.  I'll add a utility function for that now.

> We were puzzled why we needed that extra call in there but it seemed
> to be necessary for correct functionality.

How'd the bug manifest for you?  I just discovered that, at least with
mpich2, our "parallel_only();" calls are much less effective than
intended.  Instead of a failing libmesh_assert() doing the nice
message, stack trace file, and exception thing, we get an obscure MPI
stack error due to mismatched buffer sizes and the whole program
exits.  Hard problem, since by definition it's an assert that's
supposed to fail when catching code that would be trying to
communicate with mismatched buffer sizes.  We're going to need to use
MPI_Errhandler_set or something to catch these things properly.

> When using Periodic Boundaries we've noticed that
> occasionally under the right conditions as we get lots of activity
> near the nodes that are double constrained, it appears that
> "sometimes" during the mesh coarsening phase some of the values at
> those nodes appear to get "bad" values.  In 2D, I'm talking about
> the four corners of a square domain where periodic boundaries are
> applied at both sets of edges.  In 3D I'm talking about the edges
> (lines) of the cube where periodic boundaries are applied on all 3
> sets of sides.  I did build a problem in MOOSE that demonstrates the
> problem.  It's actually an adaptation of the existing periodic
> boundaries example but I moved the forcing function around the
> domain and approached one of the edges.  Some of the nodes
> eventually get the wrong values.

Definitely see if you can get this to trigger with an example.
Preferably 2D first, if it shows up there.

One thing you might try: Add topological_neighbor support to
JumpErrorEstimator.  Then you'll be able to use DiscontinityMeasure
(for C0, or Kelly for C1) as a simple way of automatically detecting
when and where the constraints aren't being properly satisfied.
---
Roy

------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to