OrdinaryDiffEqExtrapolation

Solvers based on within method parallelism. These solvers perform well for medium sized systems of ordinary differential equations, of about 20 to 500 equations, at low tolerances.

Installation

To be able to access the solvers in OrdinaryDiffEqExtrapolation, you must first install them use the Julia package manager:

using Pkg
Pkg.add("OrdinaryDiffEqExtrapolation")

This will only install the solvers listed at the bottom of this page. If you want to explore other solvers for your problem, you will need to install some of the other libraries listed in the navigation bar on the left.

Example usage

using OrdinaryDiffEqExtrapolation

function lorenz!(du, u, p, t)
    du[1] = 10.0 * (u[2] - u[1])
    du[2] = u[1] * (28.0 - u[3]) - u[2]
    du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
u0 = [1.0; 0.0; 0.0]
tspan = (0.0, 100.0)
prob = ODEProblem(lorenz!, u0, tspan)
sol = solve(prob, ImplicitEulerBarycentricExtrapolation())

Full list of solvers

OrdinaryDiffEqExtrapolation.ImplicitEulerExtrapolationType
ImplicitEulerExtrapolation(;
        autodiff = AutoForwardDiff(), concrete_jac = nothing,
        linsolve = nothing, max_order = 12, min_order = 3, init_order = 5,
        threading = false, sequence = :harmonic
    ) -> ImplicitEulerExtrapolation

Adaptive implicit Euler extrapolation, similar to SEULEX. It is intended for stiff problems and varies both its step size and extrapolation order.

Keywords

  • autodiff = AutoForwardDiff(): ADTypes backend used to construct Jacobians.
  • concrete_jac = nothing: Jacobian materialization policy. nothing lets the solver choose; use true or false to request or disable a concrete Jacobian.
  • linsolve = nothing: LinearSolve algorithm for implicit stage systems. nothing selects the OrdinaryDiffEq default.
  • max_order::Integer = 12: largest internal extrapolation order.
  • min_order::Integer = 3: smallest internal extrapolation order; values below 3 are raised to 3.
  • init_order::Integer = 5: initial internal order. It is raised when necessary so that min_order < init_order < max_order.
  • threading = false: enable concurrent extrapolation columns when true.
  • sequence::Symbol = :harmonic: subdivision sequence. Supported values are :harmonic, :romberg, and :bulirsch; other values warn and use :harmonic.

Returns

  • ImplicitEulerExtrapolation: configured implicit extrapolation algorithm for CommonSolve.solve.

Examples

using OrdinaryDiffEqExtrapolation: ImplicitEulerExtrapolation
using CommonSolve: solve
using SciMLBase: ODEProblem

prob = ODEProblem((u, p, t) -> -100u, 1.0, (0.0, 1.0))
sol = solve(prob, ImplicitEulerExtrapolation(); abstol = 1.0e-10, reltol = 1.0e-8)

References

C. Elrod et al., "Parallelizing explicit and implicit extrapolation methods for ordinary differential equations," HPEC 2022, pp. 1-9.

source
OrdinaryDiffEqExtrapolation.ImplicitDeuflhardExtrapolationType
ImplicitDeuflhardExtrapolation(;
        autodiff = AutoForwardDiff(),
        concrete_jac = nothing, linsolve = nothing, min_order = 1,
        init_order = 5, max_order = 10, sequence = :harmonic,
        threading = false
    ) -> ImplicitDeuflhardExtrapolation

Adaptive implicit midpoint extrapolation with Deuflhard's order and step-size selection. It targets stiff problems and uses barycentric extrapolation of the implicit midpoint approximations.

Keywords

  • autodiff = AutoForwardDiff(): ADTypes backend used to construct Jacobians.
  • concrete_jac = nothing: Jacobian materialization policy. nothing lets the solver choose; use true or false to request or disable a concrete Jacobian.
  • linsolve = nothing: LinearSolve algorithm for implicit stage systems. nothing selects the OrdinaryDiffEq default.
  • min_order::Integer = 1: smallest internal extrapolation order; values below 1 are raised to 1.
  • init_order::Integer = 5: initial internal order. It is raised to at least min_order.
  • max_order::Integer = 10: largest internal order. It is raised to at least init_order.
  • sequence::Symbol = :harmonic: subdivision sequence. Supported values are :harmonic, :romberg, and :bulirsch; other values warn and use :harmonic.
  • threading = false: enable concurrent extrapolation columns when true.

Returns

  • ImplicitDeuflhardExtrapolation: configured implicit extrapolation algorithm for CommonSolve.solve.

Examples

using OrdinaryDiffEqExtrapolation: ImplicitDeuflhardExtrapolation
using CommonSolve: solve
using SciMLBase: ODEProblem

prob = ODEProblem((u, p, t) -> -100u, 1.0, (0.0, 1.0))
alg = ImplicitDeuflhardExtrapolation(sequence = :romberg)
sol = solve(prob, alg; abstol = 1.0e-10, reltol = 1.0e-8)

References

C. Elrod et al., "Parallelizing explicit and implicit extrapolation methods for ordinary differential equations," HPEC 2022, pp. 1-9.

source
OrdinaryDiffEqExtrapolation.ImplicitHairerWannerExtrapolationType
ImplicitHairerWannerExtrapolation(;
        autodiff = AutoForwardDiff(),
        concrete_jac = nothing, linsolve = nothing, min_order = 2,
        init_order = 5, max_order = 10, sequence = :harmonic,
        threading = false
    ) -> ImplicitHairerWannerExtrapolation

Adaptive implicit midpoint extrapolation with the order and step-size controller from Hairer and Wanner's SODEX algorithm. It is intended for stiff problems and supports parallel evaluation of independent extrapolation columns.

Keywords

  • autodiff = AutoForwardDiff(): ADTypes backend used to construct Jacobians.
  • concrete_jac = nothing: Jacobian materialization policy. nothing lets the solver choose; use true or false to request or disable a concrete Jacobian.
  • linsolve = nothing: LinearSolve algorithm for implicit stage systems. nothing selects the OrdinaryDiffEq default.
  • min_order::Integer = 2: smallest internal extrapolation order; values below 2 are raised to 2.
  • init_order::Integer = 5: initial internal order. It is raised when necessary so that min_order < init_order.
  • max_order::Integer = 10: largest internal order. It is raised when necessary so that init_order < max_order.
  • sequence::Symbol = :harmonic: subdivision sequence. Supported values are :harmonic, :romberg, and :bulirsch; other values warn and use :harmonic.
  • threading = false: enable concurrent extrapolation columns when true.

Returns

  • ImplicitHairerWannerExtrapolation: configured implicit extrapolation algorithm for CommonSolve.solve.

Examples

using OrdinaryDiffEqExtrapolation: ImplicitHairerWannerExtrapolation
using CommonSolve: solve
using SciMLBase: ODEProblem

prob = ODEProblem((u, p, t) -> -100u, 1.0, (0.0, 1.0))
alg = ImplicitHairerWannerExtrapolation(sequence = :bulirsch)
sol = solve(prob, alg; abstol = 1.0e-10, reltol = 1.0e-8)

References

C. Elrod et al., "Parallelizing explicit and implicit extrapolation methods for ordinary differential equations," HPEC 2022, pp. 1-9.

source
OrdinaryDiffEqExtrapolation.ImplicitEulerBarycentricExtrapolationType
ImplicitEulerBarycentricExtrapolation(;
        autodiff = AutoForwardDiff(),
        concrete_jac = nothing, linsolve = nothing, min_order = 3,
        init_order = 5, max_order = 12, sequence = :harmonic,
        threading = false, sequence_factor = 2
    ) -> ImplicitEulerBarycentricExtrapolation

Adaptive implicit Euler extrapolation using barycentric coordinates and the Hairer-Wanner order and step-size strategy. It targets stiff problems and can evaluate independent extrapolation columns concurrently.

Keywords

  • autodiff = AutoForwardDiff(): ADTypes backend used to construct Jacobians.
  • concrete_jac = nothing: Jacobian materialization policy. nothing lets the solver choose; use true or false to request or disable a concrete Jacobian.
  • linsolve = nothing: LinearSolve algorithm for implicit stage systems. nothing selects the OrdinaryDiffEq default.
  • min_order::Integer = 3: smallest internal extrapolation order; values below 3 are raised to 3.
  • init_order::Integer = 5: initial internal order. It is raised when necessary so that min_order < init_order.
  • max_order::Integer = 12: largest internal order. It is raised when necessary so that init_order < max_order.
  • sequence::Symbol = :harmonic: subdivision sequence. Supported values are :harmonic, :romberg, and :bulirsch; other values warn and use :harmonic.
  • threading = false: enable concurrent extrapolation columns when true.
  • sequence_factor::Integer = 2: positive multiplier applied to the subdivision sequence used by the implicit Euler base method.

Returns

  • ImplicitEulerBarycentricExtrapolation: configured implicit extrapolation algorithm for CommonSolve.solve.

Examples

using OrdinaryDiffEqExtrapolation: ImplicitEulerBarycentricExtrapolation
using CommonSolve: solve
using SciMLBase: ODEProblem

prob = ODEProblem((u, p, t) -> -100u, 1.0, (0.0, 1.0))
alg = ImplicitEulerBarycentricExtrapolation(sequence = :romberg)
sol = solve(prob, alg; abstol = 1.0e-10, reltol = 1.0e-8)

References

C. Elrod et al., "Parallelizing explicit and implicit extrapolation methods for ordinary differential equations," HPEC 2022, pp. 1-9.

source