Hi Bruno,
> - for the constrained_linear_operator, the documentation says:
> "Currently, this function may not work correctly for distributed data
> structures." What's the problem with distributed data structures?
This comment was requested by me when reviewing the patch I think. As
far as I know, the code uses distributed_constraints_linear_operator in
the vmult_add and Tvmult_add versions which implements the matrix-vector
product by explicitly going through the 'get_constraint_entries' of the
ConstraintMatrix object. However, the loop that goes through the
constraints usually involves remote vector entries from other
processors. Unless you have a vector that has imported the appropriate
ghosts, it will lead to invalid access. (Invalid read for vmult_add and
invalid write for Tvmult_add.)
We should probably fix this at some point but I don't see a trivial
solution (we could use the ConstraintMatrix::distribute/condense
operations that implement these operations in a distributed sense but
they create+copy some temporary vectors which is quite expensive
efficient). Looking at the code we have now, I wonder how this has
worked in parallel at all, though. Luca, did you have different code
when evaluating these things or were you just lucky to not have any
constraints that cross processor boundaries?
Best,
Martin