> 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?
> 
> 

Reply via email to