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