[petsc-users] ILU, ASM, GMRES and memory
Barry Smith
bsmith at mcs.anl.gov
Fri Feb 18 10:21:44 CST 2011
You will still need to delete your reference to the pmat by calling MatDestroy(pmat); after you have called KSPSetOperators().
Barry
On Feb 18, 2011, at 9:42 AM, Barry Smith wrote:
>
> On Feb 18, 2011, at 9:22 AM, francois pacull wrote:
>
>> Dear PETSc team,
>>
>> I am using a gmres solver along with an additive Schwarz preconditioner and an ILU factorization within the sub-domains: ksp GMRES + pc ASM + subksp PREONLY + subpc ILU (MAT_SOLVER_PETSC). Also, I am using a preconditioner matrix Pmat that is different from the linear system operator matrix Amat.
>>
>> So, from my understanding, just after the end of the ILU factorization (for example, just after a call to PCSetUp(subpc) and before a call to KSPSolve(ksp,...)), the rank i process holds in the memory:
>> 1 - the local rows of Amat (ksp&pc's linear system matrix)
>> 2 - the local rows of Pmat (ksp&pc's precond matrix)
>> 3 - the sub-domain preconditioner operator, P[i], which is the local diagonal block of Pmat augmented with the overlap (subksp&subpc's matrix, linear system matrix = precond matrix)
>> 4 - the incomplete factorization of P[i] (subpc's ILU matrix)
>>
>> Is it correct?
>> If it is, how can I destroy parts 2 and 3, Pmat and the P[i]'s, in order to save some memory space for the Arnoldi vectors?
>
> You will need to "hack" slightly to get the affect. Edit src/ksp/pc/impls/asm/asm.c and add a new function
>
> PCASMFreeSpace(PC pc)
> {
> PC_ASM *osm = (PC_ASM*)pc->data;
> PetscErrorCode ierr;
>
> if (osm->pmat) {
> if (osm->n_local_true > 0) {
> ierr = MatDestroyMatrices(osm->n_local_true,&osm->pmat);CHKERRQ(ierr);
> }
> osm->pmat = 0;
> }
> if (pc->pmat) {ierr = MatDestroy(pc->pmat);CHKERRQ(ierr); pc->pmat = 0;}
> return 0;
> }
> run make in that directory.
>
> Now call this routine in your program AFTER calling KSPSetUp() and KSPSetUpOnBlocks() or SNESSetUp() but before KSPSolve() or SNESSolve().
>
> report any problems to petsc-maint at mcs.anl.gov
>
>
>> When Pmat is destroyed with MatDestroy, its corresponding memory space seems to be actually freed only when the ksp is destroyed?
>
> Yes, all PETSc objects are reference counted and the KSP object keeps a reference to Pmat (actually the PC underneath keeps the reference.)
>
>> From what I remember, PCFactorSetUseInPlace will destroy the P[i]'s, but under the constraints that there is no fill-in and the natural matrix ordering is used?
>
> Under those conditions the space in P[i] is reused for the factor, thus saving the space of the "incomplete factorization of P"
>
>
>>
>> Thanks for your help,
>> francois.
>>
>>
>
More information about the petsc-users
mailing list