Dear Pascal,
This problem seems related to a problem we recently worked around in https://github.com/dealii/dealii/pull/4043
Can you check what happens if you call GrowingVectorMemory<TrilinosWrappers::MPI::Vector>::release_unused_memory()
between your optimization steps? If a communicator gets stack in those places it is likely a stale object somewhere that we fail to work around for some reason.
Best,
Martin
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dealii+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Dear Pascal,
You are right, in your case one needs to call
GrowingVectorMemory<TrilinosWrappers::MPI::BlockVector>::release_unused_memory()
rather than for the vector. Can you try that as well?
The problem appears to be that the call to SameAs returns different results for different processors, which it should not be, which is why I suspect that there might be some stale communicator object around. Another indication for that assumption is that you get stuck in the initialization of the temporary vectors of the GMRES solver, which is exactly this kind of situation.
As to the particular patch I referred to: It does release some
memory that might have stale information but it also changes some
of the call structures slightly. Could you try to change the
following:
if (vector->Map().SameAs(v.vector->Map()) == false)
Dear Pascal,
No, you do not need to try the other solution. I'm glad I could help. (This asserts the approach that we need to be careful with the vector pool between different calls.)
Best,
Martin