[petsc-users] petsc-users Digest, Vol 38, Issue 41

Matthew Knepley knepley at gmail.com
Fri Feb 17 13:29:16 CST 2012


On Fri, Feb 17, 2012 at 1:09 PM, <coco at dmi.unict.it> wrote:

>
> Thank you for the answer.
>
>  Date: Fri, 17 Feb 2012 10:11:51 -0600
>> From: Matthew Knepley <knepley at gmail.com>
>> Subject: Re: [petsc-users] Multigrid as a preconditioner
>> To: PETSc users list <petsc-users at mcs.anl.gov>
>> Message-ID:
>>        <**CAMYG4GkKE6doSQ1FgHCSr1deZRYS0**kpvLQF8daqv0au==tOgyw at mail.**
>> gmail.com <tOgyw at mail.gmail.com>>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> On Fri, Feb 17, 2012 at 6:38 AM, <coco at dmi.unict.it> wrote:
>>
>>  Thank you very much for the answer, but some other doubts remain.
>>>
>>> Date: Thu, 16 Feb 2012 13:39:11 -0600
>>>
>>>> From: Matthew Knepley <knepley at gmail.com>
>>>> Subject: Re: [petsc-users] Multigrid as a preconditioner
>>>> To: PETSc users list <petsc-users at mcs.anl.gov>
>>>> Message-ID:
>>>>      <CAMYG4Gmt_mn_****hPVKOrbC452geco3Zz26SF05pGy6t7****
>>>> RPAq+0Zg at mail.gmail.com<CAMYG4**Gmt_mn_**hPVKOrbC452geco3Zz26SF05pGy6t7
>>>> **RPAq%2B0Zg at mail.gmail.com<CAMYG4Gmt_mn_hPVKOrbC452geco3Zz26SF05pGy6t7RPAq%252B0Zg at mail.gmail.com>
>>>> >
>>>>
>>>>>
>>>>>  Content-Type: text/plain; charset="iso-8859-1"
>>>>
>>>> On Thu, Feb 16, 2012 at 12:54 PM, <coco at dmi.unict.it> wrote:
>>>>
>>>> Dear list,
>>>>
>>>>>
>>>>> I would like to parallelize a multigrid code by Petsc. I do not want to
>>>>> use the DMMG infrastructure, since it will be replaced in the next
>>>>> PETSc
>>>>> release. Therefore I preferred to use the multigrid as a
>>>>> preconditioner.
>>>>> In
>>>>> practice, I use the Richardson iteration, choosing the same matrix of
>>>>> the
>>>>> linear system as a preconditioner, so that I think the Richardson
>>>>> iteration
>>>>> should converge in only one iteration, and effectively it is like
>>>>> solving
>>>>> the whole linear system by the multigrid.
>>>>>
>>>>>
>>>>>  Your understanding of the Richardson iteration is flawed. You can
>>>> consult
>>>> Yousef Saad's book for the standard definition and anaysis.
>>>>
>>>>
>>>>  I think my explanation was not so clear. What I would like to do is to
>>> use
>>> a preconditioned Richardson iteration:
>>>
>>> x^(n+1) = x^n + P^(-1) (f-A x^n)
>>>
>>> Choosing P=A, I should expect to obtain the exact solution at the first
>>> iteration. Then, the whole linear system is solved by the preconditioner
>>> method that I chose. Is it what Petsc would do?
>>>
>>>
>> I am not sure what you mean by "Is it what Petsc would do?". PETSc does
>> what you tell it to do. If you want it
>> to solve in one iteration, tell it to use LU, -ksp_type richardson
>> -pc_type
>> lu.
>>
>>
> Indeed I would like to solve the whole linear system by a multigrid
> approach and not by a lu factorization. Therefore I would like to use
> -ksp_type richardson -pc_type mg.
> In this case, the preconditioned problem P^(-1) (f-A x^n) is solved
> exactly or it performs just a V-cycle iteration? In both cases, since I am
> using a one-grid multigrid (just for debugging), it should anyway provide
> the exact solution at the first iteration, but it is not so.
>

Great, however I have no idea what you are actually using if you do not
send what I asked for in the last message.

   Matt


>
>>
>>>  As a first test, I tried to use a one-grid multigrid (then not a truly
>>>>
>>>>> multigrid). I just set the coarse solver (by a standard KSPSolve), and
>>>>> it
>>>>> should be enough, because the multigrid starts already from the
>>>>> coarsest
>>>>> grid and then it does not need the smoother and the transfer operators.
>>>>> Unfortunately, the iteration scheme (which should be the Richardson
>>>>> scheme) converges with a reason=4 (KSP_CONVERGED_ITS) to a wrong
>>>>> solution.
>>>>> On the other hand, if I solve the whole problem with the standard
>>>>> KSPSolve
>>>>> (then withouth setting the multigrid as a preconditioner ...), it
>>>>> converges
>>>>> to the right solution with a reason=2.
>>>>>
>>>>>
>>>>>  Yes, give Richardson many more iterations, -ksp_max_it.
>>>>
>>>>  Matt
>>>>
>>>>
>>>>  I tried, but unfortunately nothing changed.
>>> Another strange phenomen is that, even with the standard KSP solver
>>> (which
>>> provides the right solution), if I use the flag -ksp_monitor, nothing is
>>> displayed. Is that an indicator of some troubles?
>>>
>>>
>> 1) You must call KSPSetFromOptions() to use command line options
>>
>> 2) Run with -ksp_monitor -ksp_view and send the results, or there is no
>> way
>> we can know what is happening.
>>
>>  Matt
>>
>>
> Thank you. I plotted the residual and it decreases so much slowly. It
> seems like it is using the non-preconditioned Richardson iteration x^(n+1)
> = x^n + P^(-1) (f-A x^n) with P=I instead of P=A.
>
> Thank you.
> Armando
>
>
>>  Thank you in advance.
>>> Armando
>>>
>>>
>>>  I thought that the two methods should be the exactly the same method,
>>>> and
>>>>
>>>>> I do not understand why they provide different convergence results.
>>>>>
>>>>> Here is the relevant code:
>>>>>
>>>>> // Set the matrix of the linear system
>>>>> Mat Mcc;
>>>>> ierr=MatCreate(PETSC_COMM_******WORLD,&Mcc); CHKERRQ(ierr);
>>>>> ierr=MatSetType(Mcc, MATMPIAIJ); CHKERRQ(ierr);
>>>>> ierr=MatSetSizes(Mcc,PETSC_******DECIDE,PETSC_DECIDE,1000,**1000)****;
>>>>> CHKERRQ(ierr);
>>>>> ierr=setMatrix(Mcc); //It is a routine that set the values of the
>>>>> matrix
>>>>> Mcc
>>>>>
>>>>> // Set the ksp solver with the multigrid as a preconditioner
>>>>> KSP ksp, KspSolver;
>>>>> ierr = KSPCreate(PETSC_COMM_WORLD,&******ksp);CHKERRQ(ierr);
>>>>> ierr = KSPSetType(ksp,KSPRICHARDSON);
>>>>> ierr = KSPGetPC(ksp,&pc);CHKERRQ(******ierr);
>>>>> ierr = PCSetType(pc,PCMG);CHKERRQ(******ierr);
>>>>> ierr = PCMGSetLevels(pc,1,&PETSC_******COMM_WORLD);CHKERRQ(ierr);
>>>>> ierr = PCMGSetType(pc,PC_MG_******MULTIPLICATIVE);CHKERRQ(ierr);
>>>>> ierr = PCMGGetCoarseSolve(pc,&******kspCoarseSolve);CHKERRQ(ierr);
>>>>> ierr = KSPSetOperators(******kspCoarseSolve,Mcc,Mcc,**
>>>>> DIFFERENT_NONZERO_PATTERN);******CHKERRQ(ierr);
>>>>> ierr = KSPSetTolerances(******kspCoarseSolve,1.e-12,PETSC_**
>>>>> DEFAULT,PETSC_DEFAULT,PETSC_******DEFAULT);CHKERRQ(ierr);
>>>>> ierr = KSPSetOperators(ksp,Mcc,Mcc,******DIFFERENT_NONZERO_PATTERN);**
>>>>> **
>>>>> CHKERRQ(ierr);
>>>>> ierr = KSPSetTolerances(ksp,1.e-12,******PETSC_DEFAULT,PETSC_DEFAULT,*
>>>>> ***
>>>>> PETSC_DEFAULT);CHKERRQ(ierr);
>>>>> ierr = KSPSolve(ksp,RHS,U);CHKERRQ(******ierr);
>>>>>
>>>>> // Solve with the standard KSPSolve
>>>>> KSP ksp1;
>>>>> ierr = KSPCreate(PETSC_COMM_WORLD,&******ksp1);CHKERRQ(ierr);
>>>>> ierr = KSPSetOperators(ksp1,Mcc,Mcc,******DIFFERENT_NONZERO_PATTERN);*
>>>>> ***
>>>>> CHKERRQ(ierr);
>>>>> ierr = KSPSetTolerances(ksp1,1.e-12/(******2*nn123),PETSC_DEFAULT,**
>>>>> PETSC_**
>>>>> DEFAULT,PETSC_DEFAULT);******CHKERRQ(ierr);
>>>>> ierr = KSPSolve(ksp1,RHS,U1);CHKERRQ(******ierr);
>>>>>
>>>>>
>>>>> At the end, the Vector U and U1 are different.
>>>>> Thank you.
>>>>>
>>>>> Best regards,
>>>>> Armando
>>>>>
>>>>>
>>>>>
>>>>>
>


-- 
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/20120217/da893132/attachment.htm>


More information about the petsc-users mailing list