> On Jul 22, 2018, at 11:47 AM, Mark Lohry <[email protected]> wrote: > > Thanks Stefano. > > If the filter is part got your residual evaluation (your R), then you should > do it inside your RHS function itself. > > I've tried this and it works okay for explicit, but with implicit it seems to > totally tank the krylov convergence. >
What do you mean by “tank”? more iterations? larger time to solution? Also, which kind of filter is this? Probably you are changing the sparsity of the Jacobian. > > Instead, if the filter applies to y(t+dt), you should do it in PostEvaluate. > Note that PostStep is equivalent to PostEvaluate if you don’t have TSEvents > set. > > And it's okay to call a TSSetSolution here without any side effects? > There’s no need to call TSSetSolution inside the PostEvaluate routine. Just call TSGetSolution(ts,&U) and apply your filter on U. You are allowed to change U inside the post evaluate routine. > The filter is only applied to the time step direction, not y(t+dt) itself > (i.e. if R=0 then y(t+dt) should equal y(t) without any filter effects), so I > assume I'll have to store the previous time step and manually do the > arithmetic here. > > On Sun, Jul 22, 2018 at 10:06 AM, Stefano Zampini <[email protected] > <mailto:[email protected]>> wrote: > If the filter is part got your residual evaluation (your R), then you should > do it inside your RHS function itself. > > Instead, if the filter applies to y(t+dt), you should do it in PostEvaluate. > Note that PostStep is equivalent to PostEvaluate if you don’t have TSEvents > set. > > > On Jul 22, 2018, at 11:13 AM, Mark Lohry <[email protected] > > <mailto:[email protected]>> wrote: > > > > For the time iteration > > > > y(t+dt) = y(t) + dt * R(y,t,...) > > > > I need to apply a spectral filter to R prior to moving to the next step, > > e.g. so not use exactly the step computed by TS. > > > > Where is the appropriate place to do this? SNES provides > > SNESLineSearchSetPostCheck where you can modify the newton step; is there a > > TS equivalent? > > > > Or do I need to internally maintain a copy of y(t) to re-compute R and then > > call TSSetSolution with a modified vector? > >
