On Thu, 1 Aug 2013, Manav Bhatia wrote:
> This is perhaps a very rudimentary question, but I am trying to
> understand what happens with the hanging nodes with AMR.
No worries. There's actually two ways to handle hanging nodes with
AMR: restrict the fine elements' solution with constraint equations or
enrich the coarse elements' solution with bubble functions. We only
do the former, for simplicity. You can then either modify or condense
the resulting linear system; we have two options for modification.
> Is the standard procedure to apply the constraint matrices so that
> the hanging node values (matrix/vector) are migrated to the the
> connected nonhanging ones?
Not migrated to, but (in solution vectors) entirely determined from.
> If so, then is ENABLE_CONSTRAINTS always enabled whenever ENABLE_AMR
> is enabled?
Yes; see dof_map.h:
#if defined(LIBMESH_ENABLE_AMR)  \
defined(LIBMESH_ENABLE_PERIODIC)  \
defined(LIBMESH_ENABLE_DIRICHLET)
# define LIBMESH_ENABLE_CONSTRAINTS 1
#endif
> If this is the standard procedure,
Sadly it is the standard procedure; bubble function enrichment is
better but nobody seems to use it.
> then I assume that unit values are placed at the diagonal of the
> hanging node dofs and rhs is zeroed out.
If you pass symmetry=true to the constraint functions, then yes.
Otherwise the constraint equations themselves get added to your linear
system and solved (inexactly) by your linear solver.
> If so, then once the solution is complete, are the values for the
> hanging nodes interpolated back? If so, where in the code does
> this happen?
Typically after each linear solve.
grep for enforce_constraints_exactly

Roy
