<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Oct 21, 2017 at 9:28 AM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> writes:<br>
<br>
> On Fri, Oct 20, 2017 at 4:21 PM, Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</a>> wrote:<br>
><br>
>> Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> writes:<br>
>><br>
>> >> Note that TSComputeIFunction is very much like SNESComputeFunction,<br>
>> >> which includes<br>
>> >><br>
>> >>   if (snes->vec_rhs) {<br>
>> >>     ierr = VecAXPY(y,-1.0,snes->vec_rhs);<wbr>CHKERRQ(ierr);<br>
>> >>   }<br>
>> >><br>
>> >> Why haven't you complained about that?<br>
>> >><br>
>> ><br>
>> > Good point. I did not notice. This came up because the initialization<br>
>> > of input vectors is inconsistent between TSComputeIFunction() and<br>
>> > TSComputeIFunctionLocal(). The former does not zero the output vec,<br>
>> > but the later does.<br>
>><br>
>> The latter function doesn't exist so maybe you mean<br>
>> TSComputeIFunction_DMDA with ADD_VALUES?  That's because the DMDA needs<br>
>> it when using ADD_VALUES, just like SNESComputeFunction_DMDA.  When<br>
>> using INSERT_VALUES, the user is responsible for setting every entry.<br>
>> Is any of this different from SNES?<br>
>><br>
><br>
> No I mean TSComputeIFunction_DMLocal().<br>
<br>
</span>That's just some code you wrote for finite elements when you hard-coded<br>
it for ADD_VALUES.<br>
<br>
  ierr = DMLocalToGlobalBegin(dm, locF, ADD_VALUES, F);CHKERRQ(ierr);<br>
  ierr = DMLocalToGlobalEnd(dm, locF, ADD_VALUES, F);CHKERRQ(ierr);<br>
<br>
It's analogous to what TSComputeIFunction_DMDA does when you set<br>
ADD_VALUES.  Note that with INSERT_VALUES, as is typically used for FD<br>
and FV, you can assemble directly into the global vector<br>
<span class=""><br>
> So if you use DMTSSetIFunction() you get different initialization<br>
> behavior than if you use DMTSSetIFunctionLocal().  This is what Brad<br>
> was complaining about originally.<br>
<br>
</span>Maybe you should document your finite element interfaces better.<br>
</blockquote></div><br>I think the fair statement would be that it is not documented either way.</div><div class="gmail_extra"><br></div><div class="gmail_extra">   Matt<br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.caam.rice.edu/~mk51/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div>
</div></div>