# Reinit \`tdir\` in ODEIntegrator

**URL:** <https://discourse.julialang.org/t/reinit-tdir-in-odeintegrator/126865>\
**Category:** Modelling & Simulations\
**Created:** [March 12, 2025, 11:58am UTC](https://discourse.julialang.org/t/reinit-tdir-in-odeintegrator/126865 "2025-03-12T11:58:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ivborissov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ivborissov/32/2841_2.png) [@ivborissov](https://discourse.julialang.org/u/ivborissov)\
**Post date:** [March 12, 2025, 11:58am UTC](https://discourse.julialang.org/t/reinit-tdir-in-odeintegrator/126865/1 "2025-03-12T11:58:27Z")

</div>

Hi @ChrisRackauckas , is there a way to change integration direction with `reinit!` when solving an ODE? Or the only way is to remake the `ODEProblem`?  
E.g.:

```julia
using OrdinaryDiffEq

prob = ODEProblem((du, u, p, t) -> du[1] = 1.0, [0.], (0.,1.))

# right direction
integrator = init(prob, Tsit5())
reinit!(integrator; t0=0., tf=5.0)
solve!(integrator)
integrator.sol.t[end] 
# 5.0 correct

# left direction
integrator = init(prob, Tsit5())
reinit!(integrator; t0=0., tf=-5.0)
solve!(integrator)
integrator.sol.t[end] 
# 5.0 wrong

```

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 12, 2025, 2:57pm UTC](https://discourse.julialang.org/t/reinit-tdir-in-odeintegrator/126865/2 "2025-03-12T14:57:09Z")

</div>

I don’t think there is. You can open an issue in OrdinaryDiffEq and we can see if we can get some integrators to handle that, but instead it might just be good to validate that it’s going the right direction.

---

<div class="post-metadata">

**Author:** ![ivborissov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ivborissov/32/2841_2.png) [@ivborissov](https://discourse.julialang.org/u/ivborissov)\
**Post date:** [March 12, 2025, 8:51pm UTC](https://discourse.julialang.org/t/reinit-tdir-in-odeintegrator/126865/3 "2025-03-12T20:51:59Z")

</div>

Thanks! I’ve opened an issue:

> <https://github.com/SciML/OrdinaryDiffEq.jl/issues/2623>
>
> \*\*Is your feature request related to a problem? Please describe.\*\*
> 
> Currently \`r…einit!\` supports \`tspan\` change. However changing the endpoint to a negative (reverse) direction doesn't work. An artificial MWE of a problem, which arises when integrating a profile of a likelihood function:
> 
> \`\`\`
> using OrdinaryDiffEq
> 
> prob = ODEProblem((du, u, p, t) -\> du\[1\] = 1.0, \[0.\], (0.,1.))
> 
> \# right direction
> integrator = init(prob, Tsit5())
> reinit!(integrator; t0=0., tf=5.0)
> solve!(integrator)
> integrator.sol.t\[end\] 
> \# 5.0 correct
> 
> \# left direction
> integrator = init(prob, Tsit5())
> reinit!(integrator; t0=0., tf=-5.0)
> solve!(integrator)
> integrator.sol.t\[end\] 
> \# 5.0 wrong
> \`\`\`
> 
> A trick, which seems to makes the code work is to change \`tdir\`, \`dtmax\` manualy:
> \`\`\`
> integrator = init(prob, Tsit5())
> integrator.tdir = -1.0
> integrator.opts.dtmax \*= -1.0
> reinit!(integrator; t0=0., tf=-5.0)
> solve!(integrator)
> integrator.sol.t\[end\] 
> \# -5.0 correct
> \`\`\`
> \*\*Describe the solution you’d like\*\*
> 
> Can we add support for integration direction change to \`reinit!\` if it is just about checking and changing \`tdir\` and \`dtmax\`?
> 
> \*\*Describe alternatives you’ve considered\*\*
> 
> An alternative solution is to \`remake\` the problem.
