[petsc-dev] Some questions about adding default global to local, etc., functions for DMShell

Richard Tran Mills rtm at eecs.utk.edu
Thu Mar 7 19:23:18 CST 2013


Hi Barry,

I used the names without underscores because at first my intention had 
been for those to simply be user functions like SNESConvergedDefault(), 
and if a user wanted them to be used then this had to be explicitly set 
via DMShellSetGlobalToLocalBegin()/End().  After adding 
DMShellSetGlobalToLocalVecScatter(), I'm having trouble thinking of a 
good reason that DMShellDefaultGlobalToLocalBegin()/End() need to be 
user functions, but I think I lean towards keeping them that way because

1) DMShell is supposed to be able to wrap *anything*, and maybe there is 
some weird situation in which DMShellDefaultGlobalToLocalBegin()/End() 
should be called, but something else should happen as well to some 
ancillary data, analogous to how in PFLOTRAN we call 
SNESConvergedDefault() in our convergence routines but then run a bunch 
of other checks as well.

2) Since the user can set dm->ops->globaltolocalbegin/end to whatever 
they want via DMShellSetGlobalToLocalBegin()/End(), I just like the 
completeness of having the default functions exposed so that the user 
could set things back to that.

But if everyone prefers, we can make those private.

Thanks for the pointer to the current developers guide.  After hacking 
on some PETSc internals after a long hiatus, I had been about to ask 
where that lived these days, actually. =)

--Richard

On 3/6/13 4:19 PM, Barry Smith wrote:
> [...]
> I have also added some new functions like DMShellDefaultGlobalToLocalBegin()/End(), and in DMCreate_Shell I do
>
>    dm->ops->globaltolocalbegin = DMShellDefaultGlobalToLocalBegin;
>    dm->ops->globaltolocalend   = DMShellDefaultGlobalToLocalEnd;
>
>     Bad names. Since they are not user functions they should have an underscore in them and specification of implementation after the underscore. Perhaps  DMGlobalToLocalBegin_Shell_Default?
>
>      Check out the PETSc developers manual style guide (which is now chapter one so people actually read it :-)) Section 1.1 and 1.2 http://www.mcs.anl.gov/petsc/developers/developers.pdf
>
>
>     Barry
>
>
>
>> The user can set different routines via DMShellSetGlobalToLocalBegin()/End(), but if the user only sets the gtol and ltog scatter contexts, then the default routines will perform the appropriate scatter operations.
>>
>> Second question: What is the proper "PETSc way" to throw an error if gtol is NULL and tell the user that DMShellDefaultGlobalToLocalBegin() cannot be used without first setting the scatter context via DMShellSetGlobalToLocalVecScatter()?
>>
>> SETERRQ(comm, PETSC_ERR_ARG_WRONGSTATE, "DMShellDefaultGlobalToLocalBegin() cannot be used without first setting the scatter context via DMShellSetGlobalToLocalVecScatter()");
>>
>>     Matt
>>   
>> Thanks,
>> Richard
>>
>>
>>
>> -- 
>> Richard Tran Mills, Ph.D.
>> Computational Earth Scientist      | Joint Assistant Professor
>> Hydrogeochemical Dynamics Team     | EECS and Earth & Planetary Sciences
>> Oak Ridge National Laboratory      | University of Tennessee, Knoxville
>> E-mail:
>> rmills at ornl.gov  V: 865-241-3198 http://climate.ornl.gov/~rmills
>>
>>
>>
>> -- 
>> 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


-- 
Richard Tran Mills, Ph.D.
Computational Earth Scientist      | Joint Assistant Professor
Hydrogeochemical Dynamics Team     | EECS and Earth & Planetary Sciences
Oak Ridge National Laboratory      | University of Tennessee, Knoxville
E-mail: rmills at ornl.gov  V: 865-241-3198 http://climate.ornl.gov/~rmills




More information about the petsc-dev mailing list