Ok, I'm with you and agree that function is probably the way to go. I'd think a function call like extract_... is what you need.
The full matrix method embeds (or used to) the constraint in the row (at the cost of introducing asymmetry), so even without enforce_constraints_exactly() you should recover the constrained value to some accuracy commensurate with your linear solver tolerance.
The constrain_element_residual() should do the trick if it replaces whatever residual value you have with
Re(i) = u(i) - u_constrained
For either dirichlet or hanging-node type constraints... Right?
----- Original Message -----
From: Derek Gaston <derek.gaston@...>
To: Kirk, Benjamin (JSC-EG)
Cc: libmesh-devel@... <libmesh-devel@...>
Sent: Fri Oct 31 15:36:47 2008
Subject: Re: [Libmesh-devel] Contraints for JFNK hanging nodes and Dirchlet BC's
On Oct 31, 2008, at 2:00 PM, Benjamin Kirk wrote:
> I use it to extract element-based Dofs, and they get properly
> Would the residual value then be the current value - the constraned
> as you mention?
I didn't know that method existed. It looks like it's pretty much
achieving the same goal that enforce_constraints_exactly() does.... it
at least means that you are calculating your next residual using the
properly constrained value.
Unfortunately, this doesn't help with calculating a constrained
value. For instance, let's say that on solve #23 your solver decides
it's converged... and libMesh writes out the solution. Do you have
any idea what the value of your solution at the hanging nodes is?
Unless you called enforce_constraints_exactly() before you wrote out
the solution.... you don't.
One idea would be for me to overwrite my own residual before I add it
into the global residual.... I guess I could call is_constrained() on
every node on the element and if it is then I could overwrite what
residual is there with u - constrained_value before I add it in.....
this is essentially the work I was thinking
constrain_element_residual() would do.