[petsc-dev] Discussion about time-dependent optimization moved from PR
Barry Smith
bsmith at mcs.anl.gov
Tue Oct 17 08:51:48 CDT 2017
> On Oct 17, 2017, at 8:19 AM, Jed Brown <jed at jedbrown.org> wrote:
>
> Matthew Knepley <knepley at gmail.com> writes:
>
>> On Tue, Oct 17, 2017 at 8:51 AM, Jed Brown <jed at jedbrown.org> wrote:
>>
>>> Matthew Knepley <knepley at gmail.com> writes:
>>>
>>>>> It's a recipe for confusion. Either the parameters are never passed
>>>>> explicitly or they are always passed explicitly and should not be stored
>>>>> redundantly in the context, thus perhaps enabling some sort of higher
>>>>> level analysis that dynamically changes parameter values. I would go
>>>>> with the former for now.
>>>>
>>>>
>>>> I want to say again how much I dislike ad hoc memory layouts through
>>>> contexts and the like. We have a perfectly good layout descriptor (DM)
>>>> that should be used to describe data layout.
>>>
>>> This is an independent change from the adjoint work and I think it's out
>>> of scope right now. If we change it, it should go in its own PR. I
>>> don't like having one PR with a smattering of non-essential changes to
>>> old interfaces bundled together with new conventions and new
>>> functionality.
>>>
>>
>> My understanding was that this discussion is not about a particular
>> PR, but about the interface we should have for sensitivity and optimal
>> control.
>
> Sure, but changing the way parameters are passed isn't an essential part
> of the adjoint interface. This particular debate spawned from Stefano's
> claim that passing the parameter vector to one of his functions was a
> feature of his interface relative to Hong's. I replied that it was an
> inconsistency -- we should either change all interfaces to pass
> parameter vectors explicitly or we never pass them.
>
> But any such change would be orthogonal to the merits of TSAdjointSolve
> versus TSCreateAdjointTS. Indeed, discussion of how parameters are
> accessed is derailing the present discussion from this crucial
> difference in interfaces. Let's cut it out of the current thread.
>
> I want to hear rationale for TSAdjointSolve() or a plan for refactoring
> those algorithms into TSCreateAdjointTS().
Yes, we are waiting for Hong to provide his proposed API.
BTW: Stefano has not really submitted a proposed API as I requested, just some minor explanation of his current API and minor changes.
Barry
>
>>> Putting the parameters in a vector would enable finite differencing of
>>> the RHSFunction to obtain its dependence on parameters. That might have
>>> high (non-scalable in number of parameters) cost, but would be less
>>> expensive than finite differencing an entire model. Consider the
>>> scenario of 100 parameters and 1e6 state variables (at each time step).
>>> If we have the ability to apply the transpose of the Jacobian with
>>> respect to model state, we could run an adjoint simulation and only need
>>> 100 RHSFunction evaluations per stage, rather than 100 solves.
>>>
>>
>> I am not sure of the point of the above paragraph. Saying the point rather
>> than implying
>> the point helps me.
>
> It is a potential functional case for making the parameter vector an
> explicit argument.
More information about the petsc-dev
mailing list