<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Oct 20, 2017 at 11:22 AM, Emil Constantinescu <span dir="ltr"><<a href="mailto:emconsta@mcs.anl.gov" target="_blank">emconsta@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 10/20/17 9:11 AM, Matthew Knepley wrote:<span class=""><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Fri, Oct 20, 2017 at 9:23 AM, Emil Constantinescu <<a href="mailto:emconsta@mcs.anl.gov" target="_blank">emconsta@mcs.anl.gov</a> <mailto:<a href="mailto:emconsta@mcs.anl.gov" target="_blank">emconsta@mcs.anl.gov</a>>> wrote:<br>
<br>
    On 10/20/17 7:57 AM, Matthew Knepley wrote:<br>
<br>
        I am confused by some of the terminology in TS. At the top<br>
        level, IFunction appears to mean the entire equation<br>
<br>
            F(u, u_t, x) = 0<br>
<br>
<br>
    Matt, page 141 of the manual: F(t, u, u_t) = G(t, u), and not zero<br>
    on the RHS side. To make the interface general we allow internally<br>
    for F:= F(t, u, u_t) - G(t, u) and then F=0.<br>
<br>
<br>
This is not "internal". Its the toplevel interface:<br>
<br>
<a href="https://bitbucket.org/petsc/petsc/src/63ae3ecac3af8ce782273a76ad4152cddc2fd80a/src/ts/interface/ts.c?at=master&fileviewer=file-view-default#ts.c-884" rel="noreferrer" target="_blank">https://bitbucket.org/petsc/pe<wbr>tsc/src/63ae3ecac3af8ce782273a<wbr>76ad4152cddc2fd80a/src/ts/<wbr>interface/ts.c?at=master&<wbr>fileviewer=file-view-default#<wbr>ts.c-884</a><br>
<br>
It computes F - G.<br>
</blockquote>
<br></span>
That's what it should do in some cases. The user provides either ifunction or rhs funtion or both. The api to the solvers can take care of this stuff automatically - that's what I meant by internal. Different TS solvers can take different definitions of the funtions; e.g., imex need both, beuler can take ifuntion and/or rhs function but instead of writing beuler for both we choose the most general case (ifunction) and compose the functions accordingly. The F - G is transparent to the user. But somewhere the sausage needs to be made and I think that is the right level because that is least likely to change and least maintenance.<br></blockquote><div><br></div><div>I know what it does. I looked at the code. You are missing the point here.</div><div><br></div><div>We cannot use the same word, IFunction, for two different things, F and F-G. The argument that is is not user facing is complete bullshit.</div><div>The user inputs the points for ifunction, and can also call the toplevel interface.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Emil<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
    Matt<br>
<br>
    Emil<br>
<br>
    PS: Manual: PETSc 3.8 September 26, 2017<br>
<br>
        However, this appears to mean something different than ifunction<br>
        at the function pointer level. Inside TSCompiteIFunction(), it<br>
        uses both ifunction and rhsfunction. This makes it hard to<br>
        understand how composition works. TSComputeRHS() is called<br>
        inside TSComputeIFunction(), so if we want to reuse vectors it<br>
        should not initialize the vector, but it seems like<br>
        TSComputeIFunction() should initialize the vector since<br>
        TSComputeIFunctionLocal() does.<br>
<br>
        What guarantees about initialization should we have?<br>
<br>
             Matt<br>
<br>
        --         What most experimenters take for granted before they begin their<br>
        experiments is infinitely more interesting than any results to<br>
        which their experiments lead.<br>
        -- Norbert Wiener<br>
<br>
        <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~k<wbr>nepley/</a><br></span>
        <<a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~<wbr>knepley/</a>><br>
        <<a href="http://www.caam.rice.edu/~mk51/" rel="noreferrer" target="_blank">http://www.caam.rice.edu/~mk5<wbr>1/</a> <<a href="http://www.caam.rice.edu/~mk51/" rel="noreferrer" target="_blank">http://www.caam.rice.edu/~mk5<wbr>1/</a>>><span class=""><br>
<br>
<br>
<br>
<br>
-- <br>
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<br>
<br>
</span><a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~k<wbr>nepley/</a> <<a href="http://www.caam.rice.edu/~mk51/" rel="noreferrer" target="_blank">http://www.caam.rice.edu/~mk5<wbr>1/</a>><br>
</blockquote>
</blockquote></div><br><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>