[petsc-users] GMRES with matrix-free method and preconditioning matrix for higher performance.

Matthew Knepley knepley at gmail.com
Wed Aug 31 07:23:58 CDT 2016


On Wed, Aug 31, 2016 at 7:22 AM, Choi Kyungjun <kyungjun.choi92 at gmail.com>
wrote:

> Thank you very much again Matt.
>
> Just another simple question.
>
> 2016-08-31 20:00 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>
>> On Wed, Aug 31, 2016 at 5:46 AM, Choi Kyungjun <kyungjun.choi92 at gmail.com
>> > wrote:
>>
>>> Thanks Matt.
>>>
>>> I really appreciate your help every time.
>>>
>>>
>>> I think I forgot mentioning code info again.
>>>
>>> 1)
>>> I'm working on 2-D/3-D Compressible Euler equation solver, which is
>>> completely hyperbolic system.
>>>
>>
>> Okay, then MG is out. I would start by using a sparse direct solver, like
>> SuperLU. Then for parallelism
>> you could use ASM, and as the subsolver use SuperLU, so something like
>>
>>   -ksp_type gmres -pc_type asm -sub_pc_type superlu
>>
>> You could get more sophisticated by
>>
>>   - Trying to have blocks bigger than 1 process and using SuperLU_dist
>>
>>   - Splitting up the fields using PCFIELDSPLIT. There are indications
>> that solving one of the fields first
>>     can really help convergence. I am thinking of the work of David Keyes
>> and LuLu Liu on MSM methods.
>>
>
> For the above part,
>
> It's not compatible with -snes_mf  command line option, is it?
>

No. I think MF is not a useful idea unless you have a preconditioning
matrix.

  Thanks,

     Matt


> I applied cmd line options like below
> *-snes_mf     -ksp_type  gmres     -pc_type asm     -sub_pc_type superlu
>   -snes_view     -snes_monitor     -ksp_monitor    -snes_converged_reason
>  -ksp_converged_reason*
>
>
> and my code flows like this
>
> *- call SNESCreate(PETSC_COMM_WORLD, Mixt%snes, ier)*
> *- call SNESSetFunction(Mixt%snes, Mixt%r, FormFunction, userctx, ier)*
> *- call SNESSetFromOptions(Mixt%snes, ier)*
> *- call SNESGetKSP(Mixt%snes, ksp, ier)*
> *- call KSPGetPC(ksp, pc, ier)*
>
> *- call KSPSetFromOptions(ksp, ier)*
> *- call PCSetFromOptions(pc, ier)*
>
>
>
>
>
>
>>
>>
>>> 2)
>>> And I'm trying to implement some implicit time scheme for convergence of
>>> my steady state problem.
>>>
>>> I used LUSGS implicit scheme before, but these days GMRES implicit
>>> scheme is popular for quadratic convergence characteristics.
>>>
>>
>> I am not sure I understand here. Nothing about GMRES is quadratic.
>> However, Newton's method can be quadratic
>> if your initial guess is good, and GMRES could be part of a solver for
>> that.
>>
>>
>>> For implicit time scheme, it is just same as matrix inversion, so I
>>> started PETSc library for GMRES, which is one of the greatest mathematical
>>> library.
>>>
>>>
>>> 3)
>>> As I'm using different numerical convective flux scheme (e.g. Roe's FDS,
>>> AUSM, etc), it would be really time consuming to derive Jacobian matrix for
>>> each scheme.
>>>
>>
>> Yes. However, the preconditioner matrix only needs to be approximate. I
>> think you should derive one for the easiest flux scheme and
>> always use that. The important thing is to couple the unknowns which
>> influence each other, rather than the precise method of influence.
>>
>>   Thanks,
>>
>>       Matt
>>
>>
>>> So I was fascinated by matrix-free method (I didn't completely
>>> understand this method back then), and I implemented GMRES with no
>>> preconditioning matrix with your help.
>>>
>>> After that, I wanted to ask you about any accelerating methods for my
>>> GMRES condition.
>>>
>>> I will try applying CHEBY preconditioner as you mentioned first (even if
>>> its performance wouldn't be that good).
>>>
>>> In order to constitute user-provided preconditioning matrix, could you
>>> tell me any similar examples?
>>>
>>>
>>> Thanks again.
>>>
>>> Your best,
>>>
>>> Kyungjun.
>>>
>>>
>>> 2016-08-31 19:07 GMT+09:00 Matthew Knepley <knepley at gmail.com>:
>>>
>>>> On Wed, Aug 31, 2016 at 3:49 AM, Choi Kyungjun <
>>>> kyungjun.choi92 at gmail.com> wrote:
>>>>
>>>>> Dear Petsc.
>>>>>
>>>>> I am implementing Petsc library for my CFD flow code.
>>>>>
>>>>> Thanks to Matt, I got what I wanted last week.
>>>>>
>>>>> It was the GMRES with matrix-free method, no preconditioning matrix
>>>>> and command line options are below.
>>>>>
>>>>> *-snes_mf    -pc_type none    -..monitor   -..converged_reason*
>>>>>
>>>>> The solve worked, but performed very poorly.
>>>>>
>>>>>
>>>>> I learned that the efficiency of Krylov-subspace methods depends
>>>>> strongly depends on a good preconditioner.
>>>>>
>>>>> And in the Petsc manual, the matrix-free method is allowed only with
>>>>> no preconditioning, a user-provided preconditioner matrix, or a
>>>>> user-provided preconditioner shell.
>>>>>
>>>>>
>>>>> Here are my questions.
>>>>>
>>>>> 1) To improve the solver performance using GMRES, is there any way
>>>>> using snes_mf without preconditioning matrix?
>>>>>
>>>>
>>>> Not really. The CHEBY preconditioner will work without an explicit
>>>> matrix, however its not great by itself.
>>>>
>>>>
>>>>> 2) For user-provided preconditioner matrix, I saw some example codes
>>>>> that provide approx. Jacobian matrix as preconditioner matrix. But this
>>>>> means that I should derive approx. Jacobian mat for system, am I right?
>>>>>
>>>>
>>>> Yes.
>>>>
>>>>
>>>>> 3) I'd like to know which is the fastest way to solve with GMRES
>>>>> method. Could you tell me or let me know any other examples?
>>>>>
>>>>
>>>> 1) The solve depends greatly on the physics/matrix you are using.
>>>> Without knowing that, we can't say anything. For example, is
>>>> the system elliptic? If so, then using Multigrid (MG) is generally a
>>>> good idea.
>>>>
>>>> 2) In general, I think its a mistake to think of GMRES or any KSP as a
>>>> solver. We should think of them as accelerators for solvers,
>>>> as they were originally intended. For example, MG is a good solver for
>>>> elliptic CFD equations, as long as you somehow deal with
>>>> incompressibility. Then you can use GMRES to cleanup some things you
>>>> miss when implementing your MG solver.
>>>>
>>>> 3) The best thing to do in this case is to look at the literature,
>>>> which is voluminous, and find the solver you want to implement. PETSc
>>>> really speeds up the actually implementation and testing.
>>>>
>>>>   Thanks,
>>>>
>>>>      Matt
>>>>
>>>>
>>>>> Thank you very much for your help.
>>>>>
>>>>> Sincerely,
>>>>>
>>>>> Kyungjun.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> What most experimenters take for granted before they begin their
>>>> experiments is infinitely more interesting than any results to which their
>>>> experiments lead.
>>>> -- Norbert Wiener
>>>>
>>>
>>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> experiments lead.
>> -- Norbert Wiener
>>
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160831/35fe9efa/attachment.html>


More information about the petsc-users mailing list