On Feb 10, 2012, at 6:45 PM, Dmitry Karpeev wrote:

> 
> 
> On Fri, Feb 10, 2012 at 5:24 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> On Feb 10, 2012, at 5:14 PM, Jed Brown wrote:
> 
> > On Fri, Feb 10, 2012 at 17:08, Dmitry Karpeev <karpeev at mcs.anl.gov> 
> > wrote:
> > I think it's completely natural for a DM to assemble two operators -- the 
> > discretizations for the two are likely to be related anyway -- as soon as 
> > we decide that it's natural for KSP to take in two matrices and, more 
> > importantly, for the callback set with DMSetJacobian() to compute two 
> > matrices: if a DM knows how to compute  two "Jacobians",
> 
>    DM doesn't/shouldn't know how to compute two Jacobians. Where did you get 
> that from?
> 
>  Here's the current declaration of DMSetJacobian:
>  PetscErrorCode  DMSetJacobian(DM dm,PetscErrorCode 
> (*f)(DM,Vec,Mat,Mat,MatStructure*))
> This attaches (to a single DM) a callback that computes *two* matrices, just 
> like SNES/KSP would want.

   You are right this is odd now and eventually needs some kind of fixing. I 
kept the two Mats to match the SNESSetJacobian(). Of course we cannot really 
use it since a DM can only give back one matrix. Shouldn't this be changed to 
the function f taking two DMs?

   Barry

> Dmitry.
> 
> > why wouldn't it know how to create/preallocate the two corresponding 
> > matrices?
> 
> 
>   The reason I don't like having the single DM doing this is that one could 
> use very different beasties to do the true Jacobian and preconditioner (not 
> just a simple stencil change) and shoving that stuff into a single DM is 
> unnatural. For example true problem is on an unstructured grid, 
> preconditioner problem on a simplier structured grid.
> 
> 
> >
> > Lots of functions get messy if the DM has multiple ways to do something. 
> > Should DMCreateLocalVector() use the full stencil or the preconditioning 
> > stencil, what should DMGlobalToLocalBegin() be updating, etc.
> >
> > Barry's solution of having separate DMs sounds cleaner to me, at least 
> > modulo needing conventions about which DM on which to PetscObjectCompose() 
> > things needed by certain callbacks (e.g. in the FAS with TS stuff I'm 
> > doing).
> 
>   Clean that up and provide a formal way to do those callbacks that don't use 
> kludgy PetscObjectCompose() or PetscObjectComposeFunction()
> 
>   Barry
> 
> Yes, it will be slightly painful to pass two DM into the KSP and PC and track 
> them in multigrid but we do do that with the two operators already so using 
> two DM seems very natural.
> 


Reply via email to