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@inl.gov>

To: Kirk, Benjamin (JSC-EG)

Cc: libmesh-devel@lists.sourceforge.net <libmesh-devel@lists.sourceforge.net>

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

> constrained.

> Would the residual value then be the current value - the constraned

> value,

> 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.

Derek