Opened 7 years ago

Closed 4 years ago

#4247 closed enhancement (fixed)

Implement state-of-the-art high-order variable-step-size explicit integration methods

Reported by: casella Owned by: wbraun
Priority: critical Milestone: 1.16.0
Component: Run-time Version:
Keywords: Cc:

Description

The current default choice of integration method is DASSL, which is good to stay on the safe side because it has error control, step-size and order (up to 5th) adaptation, and event handling; being a stiff solver, it won't provide horrible performance with stiff systems as a standard explicit solver would. Eventually, we should replace this default choice with the more modern IDA solver, once its integration into OMC is sufficiently tested and deemed reliable.

On the other hand, for non-stiff systems, the performance penalty paid to compute the Jacobian and to solve the embedded implicit equations when using DASSL or IDA could be significant and simply not justified.

Other simulation environments provide high-order explicit integration methods with variable step-size and error control, such as the ode23 and ode45 methods in Matlab.

As far as I understand, we only provide adaptive step size on the explicit solvers symEuleSsc and rungetutta_ssc. The former is first-order, so it's not quite inefficient even with moderately tight tolerances, while the latter is optimized for moderately stiff systems.

IMHO, having the equivalent of Matlab's ode23 and ode45 (with event support) would be recommended and very useful in a number of applications that result in non-stiff ODE systems.

Change History (2)

comment:1 Changed 7 years ago by wbraun

  • Owner changed from somebody to wbraun
  • Status changed from new to accepted

Actually, I have something therefore on my branches. Try to push it asap.

comment:2 Changed 4 years ago by casella

  • Milestone changed from 2.0.0 to 1.16.0
  • Resolution set to fixed
  • Status changed from accepted to closed

We have now integrated the CVODE solver, so I guess we can finally close this ticket for good.

Note: See TracTickets for help on using tickets.