diff --git a/MechJeb2/MechJebLib/Core/ODE/AbstractIVP.cs b/MechJeb2/MechJebLib/Core/ODE/AbstractIVP.cs index 4db0b9794..e83021949 100644 --- a/MechJeb2/MechJebLib/Core/ODE/AbstractIVP.cs +++ b/MechJeb2/MechJebLib/Core/ODE/AbstractIVP.cs @@ -77,9 +77,21 @@ public abstract class AbstractIVP public void Solve(IVPFunc f, IReadOnlyList y0, IList yf, double t0, double tf, Hn? interpolant = null, List? events = null) { - N = y0.Count; - Initialize(); + try + { + N = y0.Count; + Initialize(); + _Solve(f, y0, yf, t0, tf, interpolant, events); + } + finally + { + Cleanup(); + } + } + private void _Solve(IVPFunc f, IReadOnlyList y0, IList yf, double t0, double tf, Hn? interpolant, + List? events) + { using var ynew = Vn.Rent(N); using var dynew = Vn.Rent(N); using var dy = Vn.Rent(N); @@ -156,8 +168,6 @@ public abstract class AbstractIVP interpolant?.Add(t, y, dy); y.CopyTo(yf); - - Cleanup(); } protected abstract double Step(IVPFunc f, double t, double habs, int direction, Vn y, Vn dy, Vn ynew, Vn dynew);