From: Kirk, B. (JSC-EG311) <ben...@na...> - 2012-02-01 18:56:42
|
>> To me that's more confusing than the current approach or the >> all-in-debug/nothing-in-opt approach. > > Perhaps. How about replicating the behavior of libmesh_do_once, but > with a static std::set<Elem*> (and corresponding mutex to avoid > threaded STL problems) rather than with a single static bool? Then > you get one printout per element which had trouble converging. In > AMR/C runs you might get a few false negatives (a newly-refined > distorted child element gets allocated at exactly the same memory > address as a different, previously-coarsened-away distorted child) or > false positives (a previously-coarsened-away distorted child gets > created by re-refining its parent, but gets allocated a new memory > address) but it's still probably a uniformly better solution. I strongly second that suggestion. But at a minimum I'd say leave the print as is unless NDEBUG is defined so that devel mode continues to be noisy. And if the static bool case is adopted then the error message might read something like "at least one element failed to converge... rerun without NDEBUG..." -Ben |