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.ImplicitEulerExtrapolation — Type
ImplicitEulerExtrapolation(;
autodiff = AutoForwardDiff(), concrete_jac = nothing,
linsolve = nothing, max_order = 12, min_order = 3, init_order = 5,
threading = false, sequence = :harmonic
) -> ImplicitEulerExtrapolationAdaptive 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.nothinglets the solver choose; usetrueorfalseto request or disable a concrete Jacobian.linsolve = nothing: LinearSolve algorithm for implicit stage systems.nothingselects the OrdinaryDiffEq default.max_order::Integer = 12: largest internal extrapolation order.min_order::Integer = 3: smallest internal extrapolation order; values below3are raised to3.init_order::Integer = 5: initial internal order. It is raised when necessary so thatmin_order < init_order < max_order.threading = false: enable concurrent extrapolation columns whentrue.sequence::Symbol = :harmonic: subdivision sequence. Supported values are:harmonic,:romberg, and:bulirsch; other values warn and use:harmonic.
Returns
ImplicitEulerExtrapolation: configured implicit extrapolation algorithm forCommonSolve.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.
OrdinaryDiffEqExtrapolation.ImplicitDeuflhardExtrapolation — Type
ImplicitDeuflhardExtrapolation(;
autodiff = AutoForwardDiff(),
concrete_jac = nothing, linsolve = nothing, min_order = 1,
init_order = 5, max_order = 10, sequence = :harmonic,
threading = false
) -> ImplicitDeuflhardExtrapolationAdaptive 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.nothinglets the solver choose; usetrueorfalseto request or disable a concrete Jacobian.linsolve = nothing: LinearSolve algorithm for implicit stage systems.nothingselects the OrdinaryDiffEq default.min_order::Integer = 1: smallest internal extrapolation order; values below1are raised to1.init_order::Integer = 5: initial internal order. It is raised to at leastmin_order.max_order::Integer = 10: largest internal order. It is raised to at leastinit_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 whentrue.
Returns
ImplicitDeuflhardExtrapolation: configured implicit extrapolation algorithm forCommonSolve.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.
OrdinaryDiffEqExtrapolation.ImplicitHairerWannerExtrapolation — Type
ImplicitHairerWannerExtrapolation(;
autodiff = AutoForwardDiff(),
concrete_jac = nothing, linsolve = nothing, min_order = 2,
init_order = 5, max_order = 10, sequence = :harmonic,
threading = false
) -> ImplicitHairerWannerExtrapolationAdaptive 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.nothinglets the solver choose; usetrueorfalseto request or disable a concrete Jacobian.linsolve = nothing: LinearSolve algorithm for implicit stage systems.nothingselects the OrdinaryDiffEq default.min_order::Integer = 2: smallest internal extrapolation order; values below2are raised to2.init_order::Integer = 5: initial internal order. It is raised when necessary so thatmin_order < init_order.max_order::Integer = 10: largest internal order. It is raised when necessary so thatinit_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 whentrue.
Returns
ImplicitHairerWannerExtrapolation: configured implicit extrapolation algorithm forCommonSolve.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.
OrdinaryDiffEqExtrapolation.ImplicitEulerBarycentricExtrapolation — Type
ImplicitEulerBarycentricExtrapolation(;
autodiff = AutoForwardDiff(),
concrete_jac = nothing, linsolve = nothing, min_order = 3,
init_order = 5, max_order = 12, sequence = :harmonic,
threading = false, sequence_factor = 2
) -> ImplicitEulerBarycentricExtrapolationAdaptive 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.nothinglets the solver choose; usetrueorfalseto request or disable a concrete Jacobian.linsolve = nothing: LinearSolve algorithm for implicit stage systems.nothingselects the OrdinaryDiffEq default.min_order::Integer = 3: smallest internal extrapolation order; values below3are raised to3.init_order::Integer = 5: initial internal order. It is raised when necessary so thatmin_order < init_order.max_order::Integer = 12: largest internal order. It is raised when necessary so thatinit_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 whentrue.sequence_factor::Integer = 2: positive multiplier applied to the subdivision sequence used by the implicit Euler base method.
Returns
ImplicitEulerBarycentricExtrapolation: configured implicit extrapolation algorithm forCommonSolve.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.