Richard,

    Your argument is reasonable, I've pushed a change to make them public.

  Barry

On Mar 7, 2013, at 7:23 PM, Richard Tran Mills <rtm at eecs.utk.edu> wrote:

> 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
> 

Reply via email to