idaholab / moose

Multiphysics Object Oriented Simulation Environment
https://www.mooseframework.org
GNU Lesser General Public License v2.1
1.77k stars 1.05k forks source link

Add capability to build different Jacobian and Preconditioner matrices for NEWTON #8434

Open lindsayad opened 7 years ago

lindsayad commented 7 years ago

Description of the enhancement or error report

Currently in NEWTON solves the Jacobian and preconditioning matrices are the same. It would be nice to be able to select pieces of the Jacobian to form the preconditioner as opposed to always using all of it. There's some discussion on the list here: https://groups.google.com/forum/#!topic/moose-users/2uBMPtQXBTk

Rationale for the enhancement or information for reproducing the error

There's often a balance between improving the condition number of the problem and the expense of applying the preconditioner. Giving the user a choice would be nice.

Identified impact

This would impact users who use NEWTON solves and want control over their preconditioning operator.

fdkong commented 7 years ago

@lindsayad, it looks a reasonable requirement, in my opinion. But could you add a bit more description about how are you going to use this capability? If you just want to select pieces of the Jacobian to form the preconditioner, I would be going to add this in PETSc. How do you specify which pieces you want them in the preconditioner?

lindsayad commented 7 years ago

@fdkong Sorry I never replied to this. Yes I'm essentially just interested in selecting pieces from the Jacobian to form the preconditioner. I was thinking maybe it could be done in a fashion like what we currently do, where we can specify off-diagonal columns and rows like described on the wiki here for SMP: http://mooseframework.org/wiki/MooseSystems/Preconditioners/

friedmud commented 7 years ago

While this is technically possible... I think it may be a better idea to use something like FieldSplit to select the blocks of the (true) Jacobian to work with... and what to do with them than it would be to create an extra matrix in memory.

What do you think @fdkong ?

andrsd commented 7 years ago

There is another use case for this. In CFD, when using the explicit solve, people form the full mass matrix and precondition the solve with diagonal matrix (lumped mass matrix). It is supposed to have good convergence when using CG - I did not try it myself, that's only what I heard.

lindsayad commented 7 years ago

I've also heard the same. Not quite the case that David referenced, but related, this is a great paper on segregated vs monolithic solve approaches that discusses choices for Jacobian and preconditioning matrices: https://link.springer.com/article/10.1007%2Fs00466-008-0270-6?LI=true

On 06/26/2017 09:39 AM, David Andrs wrote:

There is another use case for this. In CFD, when using the explicit solve, people form the full mass matrix and precondition the solve with diagonal matrix (lumped mass matrix). It is supposed to have good convergence when using CG - I did not try it myself, that's only what I heard.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/idaholab/moose/issues/8434#issuecomment-311079147, or mute the thread https://github.com/notifications/unsubscribe-auth/AJxgcNRwtDmjfGzsNHJJgsshxA-dFCkiks5sH8KpgaJpZM4Lyy4m.

fdkong commented 7 years ago

I've also heard the same. Not quite the case that David referenced, but related, this is a great paper on segregated vs monolithic solve approaches that discusses choices for Jacobian and preconditioning matrices: https://link.springer.com/article/10.1007%2Fs00466-008-0270-6?LI=true

It is an interesting case. We have tried several FSI cases before for the simulation of blood flows. Monolithic preconditioning is way better than the partitioned. There are actually some papers that prove the monolithic coupling is better than the split form. For example,

P. Causin, J.-F. Gerbeau, F. Nobile Added-mass effect in the design of partitioned algorithms for fluid–structure problems
fdkong commented 7 years ago

While this is technically possible... I think it may be a better idea to use something like FieldSplit to select the blocks of the (true) Jacobian to work with... and what to do with them than it would be to create an extra matrix in memory.

What do you think @fdkong ?

We could do this, but the problem is that the preconditioning matrix might not be derived from the Jacobian matrix in certain cases. For example, the preconditioning matrix for the Schur complement is different from the original Jacobian matrix.

If the preconditioning matrix can be derived from the Jacobian matrix, users may prefer to use the Jacobian matrix as the preconditioning.

There are definitely cases in which the preconditioning matrix is formed by choosing some entries from the Jacobian matrix. But we do not know what rules they are going to use for the choice of the preconditioning matrix. Still not clear how interfaces would look like.