This is a continuation of the libmesh-users thread:
https://sourceforge.net/p/libmesh/mailman/message/34800517/

I moved this part of the discussion here since it's development related. In
that thread, the focus was on the AMR case, but this is actually problem
even if there is no AMR since all the vectors get updated with the same
libMesh::System time (if I understand the problem correctly). Mainly, at
this point, I'm just trying to sort out how this works.

As pointed out by Roy in the users thread, the outline of the fix is
something like:

1. DofMap::process_constraints() needs to be fixed to properly update
adjoint and not just primal rhs'es when expanding constraint
equations.  I'm doing this myself right now, partly because I know
even more people it could affect, partly because it's very
straightforward to fix, partly because it's a prerequisite for the
rest, and partly because it was just plain embarrassing to run across.

Looks like this is part of PR #812, still open?

2. AdjointDofConstraintValues needs to be changed to index over
strings (vector names), not just integers.  Loops over qoi_index which
directly look up adjoint constraint rhs via that index need to instead
prepend the rest of the adjoint vector name first.

3. We need a new enforce_constraints_exactly() version which takes a
vector name.

4. We need to use this function (probably with a new overloaded
argument to figure out which) in project_vector().


I sort of see what's going with these last steps, but I'm still missing the
big picture here. The idea is that we want to be able to have different
constraint values for the old_solution_vector (or whatever the name is,
it's different in the TimeSolvers) and, IIUC, in such a way that reinit
only needs to be called once?

That's my main gap ATM (which is probably due to not totally understanding
the constraints code yet) is that, since reinit_constraints() uses the time
set in the system, how do we accomplish this without having to call
reinit_constraints() twice (which is what the workaround is having to do)?
Even if we have a new enforce_constraints_exactly() version, don't we have
to reinit_constraints() for each of the different System::time values that
are needed? I thought the reinit_constraints was the expensive part? What
am I missing?

Thanks,

Paul
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to