On Jun 6, 2011, at 1:32 PM, Jed Brown wrote:

> On Mon, Jun 6, 2011 at 19:57, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 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.
> 
> What about nested linear (or nonlinear) solvers? Does the app context get 
> forwarded in at each level?

   Yes, that is the whole point (in the same way I want DM's propagated down 
inside mulgrid and fieldsplit created subksps and pcs) So for example it can be 
set in the main program into the SNES (or TS) and is accessible deep inside 
some nested preconditioner that is a problem specific PC beasty thing.

> What happens when a component is accessed from multiple places?

   Not sure what you mean by multiple places.

> 
> I wonder if this forwarding should be made to not overwrite what is already 
> there. That is, if the user sets it explicitly, then it will not be 
> overwritten by a parent.

   Hmm, yes this gets tricky. I general I think it should overwrite and the 
user needs to set it differently if they want after they set it on the outside. 
 So they do TSSetApplicationContext() and then TSGetSNES, SNESGetKSP, KSPGetPC 
etc etc to change it down there.
>  
> 
>    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.
> 
> How should MatShellSetOperation behave? Should it error or do nothing when 
> the matrix type is not MATSHELL?

   Error

> If the current behavior is to be preserved, what is your recommended way to 
> get a context into the function overloading a method on a non-MATSHELL Mat?

    PetscObjectCompose()  

    If there is one particular pattern of a non-MATSHELL matrix needing a user 
provided function overloading on a regular basis we need to examine that 
pattern and see what is most appropriate.

    Barry



   Barry



Reply via email to