[petsc-users] ILU and Block Gauss Seidel smoothing

Gianluca Meneghello gianmail at gmail.com
Fri Jul 1 07:11:07 CDT 2011


Jed, Barry, thanks for your answers.

I've tried to implement Jed's solution as it was looking faster to
try. This is what I came up with for two different orders, FENOrder
and FWNOrder respectively

283       KSP ksp;
284       PC pc;
285
286       ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);  CHKERRQ(ierr);
287       ierr = KSPSetOptionsPrefix(ksp,"mg_");    CHKERRQ(ierr);
288       ierr = KSPSetOperators(ksp,J,J,SAME_NONZERO_PATTERN); CHKERRQ(ierr);
289       ierr = KSPSetFromOptions(ksp);    CHKERRQ(ierr);
290       ierr = KSPGetPC(ksp,&pc);         CHKERRQ(ierr);
291       ierr = PCFactorSetFill(pc,1);     CHKERRQ(ierr);
292       ierr = PCFactorSetMatOrderingType(pc,"FENOrder"); CHKERRQ(ierr);
293       ierr = KSPSolve(ksp,b,x); CHKERRQ(ierr);
294       ierr = KSPDestroy(&ksp);  CHKERRQ(ierr);
295
296       ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);  CHKERRQ(ierr);
297       ierr = KSPSetOptionsPrefix(ksp,"mg_");    CHKERRQ(ierr);
298       ierr = KSPSetOperators(ksp,J,J,SAME_NONZERO_PATTERN); CHKERRQ(ierr);
299       ierr = KSPSetFromOptions(ksp);    CHKERRQ(ierr);
300       ierr = KSPGetPC(ksp,&pc);         CHKERRQ(ierr);
301       ierr = PCFactorSetFill(pc,1);     CHKERRQ(ierr);
302       ierr = PCFactorSetMatOrderingType(pc,"FWNOrder"); CHKERRQ(ierr);
303       ierr = KSPSolve(ksp,b,x); CHKERRQ(ierr);
304       ierr = KSPDestroy(&ksp);  CHKERRQ(ierr);

I don't know if this is what you intended... is there a way to make
KSP recompute the factorization with the different ordering without
destroying and recreating the KSP?

Concerning Barry's option, js it possible to use the PETSc ilu
factorization function (and eventually the ones provided by external
libraries) inside my PCSHELL, passing it the various ordering I will
need? If so, what's the best way to access it?

Thanks again

Gianluca

On 20 June 2011 22:20, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>  I would suggest implementing your own PCSHELL that contains the four factored matrices and orders. The PCSetUp() you write would compute the orderings and call the Mat factorization routines. The PCApply() you write would do the appropriate applications of the triangular solves. The PCILU in PETSc is just for one ordering and factorization so is not a good starting point for your algorithm.
>
>   Barry
>
> On Jun 20, 2011, at 8:48 AM, Jed Brown wrote:
>
>> On Mon, Jun 20, 2011 at 16:26, Gianluca Meneghello <gianmail at gmail.com> wrote:
>> My goal is to perform some relaxation sweeps for each ordering at each
>> level of a multigrid process, probably using ksptype PREONLY and
>> pctype ILU.
>> Is that possible?
>>
>> Yes, but you would need to perform a separate factorization for each ordering. Also, the orderings that are not aligned with the grid in memory will have poor performance. This is a general problem with using different orderings.
>>
>> Is there the equivalent of -pc_sor_its with ILU
>> (-pc_ilu_its maybe)?
>>
>> -ksp_type richardson is the same thing, put it inside -pc_type bjacobi for -pc_sor_lits. (-pc_sor_its is just a lower overhead way to do that cycling).
>>
>>
>> I also have the problem that in order to build the ordering I would
>> need to have access to a structure containing some grid informations,
>> and it seems I cannot pass that structure to the YourOrdering function
>> you suggested.
>>
>> You can PetscObjectCompose() your structure to the Mat. You might need PetscContainerCreate() to wrap your struct.
>>
>>
>> I guess a solution for me could be to build the IS from an external
>> function (not used by petsc) and then attach them directly to the mat
>> structure. I also guess that the one to use are the ones at line 36 of
>>
>> No, those slots are not public. Use PetscObjectCompose().
>
>



-- 
"[Je pense que] l'homme est un monde qui vaut des fois les mondes et
que les plus ardentes ambitions sont celles qui ont eu l'orgueil de
l'Anonymat" -- Non omnibus, sed mihi et tibi
Amedeo Modigliani


More information about the petsc-users mailing list