<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Ok, thanks for the information.  I am looking at a Hamiltonian system, and I wanted to try out different schemes for preserving the energy.  I was curious about textbook projected RK, so I think I’ll try Barry’s suggestion about TSSetPostStep.<div class=""><br class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;  ">-gideon</span>

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Feb 4, 2017, at 10:26 PM, Emil Constantinescu <<a href="mailto:emconsta@mcs.anl.gov" class="">emconsta@mcs.anl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><br class=""><br class="">On 2/4/17 11:00 AM, Matthew Knepley wrote:<br class=""><blockquote type="cite" class="">On Sat, Feb 4, 2017 at 9:47 AM, Gideon Simpson <<a href="mailto:gideon.simpson@gmail.com" class="">gideon.simpson@gmail.com</a><br class=""><<a href="mailto:gideon.simpson@gmail.com" class="">mailto:gideon.simpson@gmail.com</a>>> wrote:<br class=""><br class="">    Would setting it up as a DAE in petsc be algorithmically euivalent<br class="">    to a projected method (i.e., step of standard RK followed by<br class="">    nonlinear projection)?<br class=""></blockquote><br class="">Not quite, if you set it as a DAE, then both the time stepping part and the algebraic constraint are solved at the same time (you are going to use an implicit time stepping method.<br class=""><br class="">So for backward Euler and DAE, PETSc solves something like:<br class=""><br class="">y_{n+1} - y{n} - dt* f(y_{n+1}) = 0<br class="">g(y_{n+1}) = 0<br class=""><br class="">By projection (assuming index 1 or 2): you are solving<br class=""><br class="">y* - y{n} - dt* f(y*) = 0<br class=""><br class="">then initialize SNES to y* and solve:<br class=""><br class="">g(y_{n+1}) = 0<br class=""><br class="">In some cases g(y_{n+1}) may not have a value (you may not land on the manifold that is defined by the conservation property). Whereas, if you define it as a DAE in almost all cases (there are crazy exceptions) you will.<br class=""><br class=""><br class="">Emil<br class=""><br class=""><blockquote type="cite" class=""><br class="">I am not sure, as I do not understand those solvers. However, I wrote my<br class="">own solver that does exactly that MIMEX.<br class=""><br class="">   Matt<br class=""><br class=""><br class="">    -gideon<br class=""><br class=""><blockquote type="cite" class="">    On Feb 3, 2017, at 11:47 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a><br class="">    <<a href="mailto:knepley@gmail.com" class="">mailto:knepley@gmail.com</a>>> wrote:<br class=""><br class="">    That is one answer. Another one is that this particular system is<br class="">    a DAE and we have methods for that.<br class=""><br class="">       Matt<br class=""><br class="">    On Fri, Feb 3, 2017 at 8:40 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov" class="">bsmith@mcs.anl.gov</a><br class="">    <<a href="mailto:bsmith@mcs.anl.gov" class="">mailto:bsmith@mcs.anl.gov</a>>> wrote:<br class=""><br class=""><br class="">        TSSetPostStep(); in your function use TSGetSolution() to get<br class="">        the current solution.<br class=""><br class="">          Please let us know how it works out<br class=""><br class="">           Barry<br class=""><br class=""><br class=""><br class="">        > On Feb 3, 2017, at 7:14 PM, Gideon Simpson<br class="">        <<a href="mailto:gideon.simpson@gmail.com" class="">gideon.simpson@gmail.com</a> <<a href="mailto:gideon.simpson@gmail.com" class="">mailto:gideon.simpson@gmail.com</a>>><br class="">        wrote:<br class="">        ><br class="">        > I’m interested in implementing a projection method for an<br class="">        ODE of the form:<br class="">        ><br class="">        > y’ = f(y),<br class="">        ><br class="">        > such that g(y) = 0 for all time (i.e., g is conserved).<br class="">        Note that in a projection method, a standard time step is made<br class="">        to produce y* from y_{n}, and then this is corrected to obtain<br class="">        y_{n+1} satisfying g(y) = 0.<br class="">        ><br class="">        > There were two ways I was thinking of doing this, and I was<br class="">        hoping to get some input:<br class="">        ><br class="">        > Idea 1: Manually loop through using taking a time step and<br class="">        then implementing the projection routine.  I see that there is<br class="">        a TSStep command, but this doesn’t  seem to be much<br class="">        documentation on how to use it in this scenario.  Does anyone<br class="">        have any guidance?<br class="">        ><br class="">        > Idea 2: Is there some analog to TSMonitor that allows me to<br class="">        modify the solution after each time step, instead of just<br class="">        allowing for some computation of a statistic?<br class="">        ><br class="">        ><br class=""><br class=""><br class=""><br class=""><br class="">    --<br class="">    What most experimenters take for granted before they begin their<br class="">    experiments is infinitely more interesting than any results to<br class="">    which their experiments lead.<br class="">    -- Norbert Wiener<br class=""></blockquote><br class=""><br class=""><br class=""><br class="">--<br class="">What most experimenters take for granted before they begin their<br class="">experiments is infinitely more interesting than any results to which<br class="">their experiments lead.<br class="">-- Norbert Wiener<br class=""></blockquote></div></div></blockquote></div><br class=""></div></body></html>