On 10/20/17 11:06 AM, Matthew Knepley wrote:
On Fri, Oct 20, 2017 at 11:58 AM, Emil Constantinescu
<[email protected] <mailto:[email protected]>> wrote:
On 10/20/17 10:43 AM, Matthew Knepley wrote:
On Fri, Oct 20, 2017 at 11:22 AM, Emil Constantinescu
<[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>> wrote:
On 10/20/17 9:11 AM, Matthew Knepley wrote:
On Fri, Oct 20, 2017 at 9:23 AM, Emil Constantinescu
<[email protected] <mailto:[email protected]>
<mailto:[email protected] <mailto:[email protected]>>
<mailto:[email protected]
<mailto:[email protected]> <mailto:[email protected]
<mailto:[email protected]>>>> wrote:
On 10/20/17 7:57 AM, Matthew Knepley wrote:
I am confused by some of the terminology in
TS. At the top
level, IFunction appears to mean the entire
equation
F(u, u_t, x) = 0
Matt, page 141 of the manual: F(t, u, u_t) = G(t,
u), and
not zero
on the RHS side. To make the interface general we
allow
internally
for F:= F(t, u, u_t) - G(t, u) and then F=0.
This is not "internal". Its the toplevel interface:
https://bitbucket.org/petsc/petsc/src/63ae3ecac3af8ce782273a76ad4152cddc2fd80a/src/ts/interface/ts.c?at=master&fileviewer=file-view-default#ts.c-884
<https://bitbucket.org/petsc/petsc/src/63ae3ecac3af8ce782273a76ad4152cddc2fd80a/src/ts/interface/ts.c?at=master&fileviewer=file-view-default#ts.c-884>
<https://bitbucket.org/petsc/petsc/src/63ae3ecac3af8ce782273a76ad4152cddc2fd80a/src/ts/interface/ts.c?at=master&fileviewer=file-view-default#ts.c-884
<https://bitbucket.org/petsc/petsc/src/63ae3ecac3af8ce782273a76ad4152cddc2fd80a/src/ts/interface/ts.c?at=master&fileviewer=file-view-default#ts.c-884>>
It computes F - G.
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.
I know what it does. I looked at the code. You are missing the
point here.
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.
The user inputs the points for ifunction, and can also call the
toplevel interface.
Matt, we do not. IFunction is F(t,u_t,u), RHS function is G(t,u).
What we solve is F=G and not F=0. Do you doubt that?
When the user specifies IFunction it is that F; when the user
specifies RHS it is that G.
Nope. We use the word IFunction, specifically in the ifunction function
pointer to mean
F
but we use the word IFunction, specifically in TSComputeIFunction, to mean
F - G
And, no its visible to everyone, not just "TS developers".
Matt, that depends, if TS method is imex, then it computes just F, not
F-G so your argument is not correct. If the method can do only implicit
it computes F and subtracts G *if defined*. If the TS method can only do
explicit and you define F then it fails.
Again, this has to do with the TS methods and PETSc doing the work for
you of packing the functions in different ways.
Emil
Matt
Now internally, because different solvers have different needs the
IFunction ... presented to the TS solver may look differently. This
is a design choice - if you are not a TS developer it should not
affect you.
This is a design decision: if implemented at this level, we avoid
having every TS method be aware of the upper level functions.
Emil
--
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
https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/~mk51/>