On Tue, Mar 15, 2011 at 3:46 PM, Jed Brown <jed at 59a2.org> wrote: > On Tue, Mar 15, 2011 at 21:39, Matthew Knepley <knepley at gmail.com> wrote: > >> Here is the scenario. I have a FieldSplit solve with 4 splits. For the 4th >> split, I have >> a good preconditioner matrix. In the linear case, KSP, I am just doing >> this: >> >> err = KSPSetUp(_ksp); >> err = KSPGetPC(_ksp, &pc); >> err = PCFieldSplitGetSubKSP(pc, &num, &ksps); >> >> MatStructure flag; >> err = KSPGetOperators(ksps[num-1], &A, PETSC_NULL, &flag); >> err = PetscObjectReference((PetscObject) A); >> err = KSPSetOperators(ksps[num-1], A, _precondMatrix, flag); >> err = PetscFree(ksps); >> > > Yuck. > > >> which works fine. However, if we embed this in a nonlinear solve, so that >> I now call >> >> err = SNESGetKSP(_snes, &ksp); >> <same code> >> >> then the PC matrix for the 4th split is ignored. This happens because >> SNESSolve_LS() >> calls KSPSetOperators() right before the solve. This causes FS to pull out >> the same >> matrices again and overwrite my special PC matrix. >> > > The preconditioning matrix for this piece should be put into the global > preconditioning matrix, perhaps stored as a MatNest. Fieldsplit should take > that matrix apart for preconditioning and it'll find the preconditioning > matrix for this part. More tricky is dealing with auxiliary operators such > as appear in approximate-commutator Schur complement preconditioners. The > current method is punting, you PetscObjectCompose the auxiliary matrix. >
Really? That seems perverse. I have to build some global PC matrix, with pieces I do not even have. How is that going to happen? Is this really how we want to handle it? Also, I really need this to work now. So baring some other idea, I am going to put something in PETSc that lets me set this operator during the SNES loop. Matt -- 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-dev/attachments/20110315/11835b8d/attachment.html>
