I am not yet comfortable with a MatSetApplicationContext() nor a 
VecSetApplicationContext(). I do think it makes sense to have a 
PCSetApplicationContext().

  Should the "solver" application contexts be unified in the following way. 

     TSSetApplicationContext() calls SNESSetApplicationContext() calls 
KSPSetApplicationContext() calls PCSetApplicationContext(). And users with 
nonlinear problems call SNESSetApplicationContext() directly and linear 
problems call KSPSetApplicationContext() directly, of course.

    Meanwhile DMSetContext() is changed to DMSetApplicationContext(), while 
MatShellSetContext() remains MatShellSetContext().  Note that it does not have 
application in it because it is the MatShell context only. 


    Barry


On Jun 6, 2011, at 6:25 AM, Jed Brown wrote:

> We already semi-sanction using MatShellSetOperation() to provide different 
> implementations for matrices that are not of type MATSHELL. An example of 
> this is having a matrix-free way to apply the action of a MatNest in one pass 
> over the mesh.
> 
> The problem is that one can't call MatShellGetContext() if given a matrix of 
> a type that is not MATSHELL. MatShellSetContext() is just silently ignored 
> and then NULL is returned by MatShellGetContext().
> 
> Should we promote these functions to Mat, as in MatSetOperation(), 
> MatSetContext(), and MatGetContext()?
> 
> The alternative is for the user to make their application context a 
> PetscObject so that it can be composed. I've done this quite a lot, but I 
> don't think it should be necessary.
> 
> Also, this looks like a minor naming inconsistency:
> 
> PCShellSetContext
> DMSetContext
> MatShellSetContext
> 
> KSPSetApplicationContext
> SNESSetApplicationContext
> TSSetApplicationContext


Reply via email to