Utkarsh / Jul 02 2020
Remix of QNDF Benchmarks for POLLU by UUtkarsh
QNDF Benchmarks for ROBER

These are some of the benchmarks on Stiff-ODE problems for QNDF Methods. The problems are based on DiffEqBenchmarks.jl
Installing required dependencies
using Pkgpkg"update"pkg"add BenchmarkTools DiffEqBase DiffEqDevTools DiffEqFlux DiffEqOperators DiffEqProblemLibrary DifferentialEquations FillArrays Flux LSODA ODE ODEInterfaceDiffEq ParameterizedFunctions Test Plots RecursiveArrayTools StaticArrays Sundials LinearAlgebra Random"pkg"add OrdinaryDiffEq"9.6s
Julia
using OrdinaryDiffEq, DiffEqDevTools, Sundials, ParameterizedFunctions, Plots, ODE, ODEInterfaceDiffEq, LSODAgr() # gr(fmt=:png)using LinearAlgebraLinearAlgebra.BLAS.set_num_threads(1)733.1s
Julia
Defining the ROBER Problem
rober =  begin  dy₁ = -k₁*y₁+k₃*y₂*y₃  dy₂ =  k₁*y₁-k₂*y₂^2-k₃*y₂*y₃  dy₃ =  k₂*y₂^2end k₁ k₂ k₃prob = ODEProblem(rober,[1.0,0.0,0.0],(0.0,1e5),(0.04,3e7,1e4))29.7s
Julia
ODEProblem with uType Array{Float64,1} and tType Float64. In-place: true
timespan: (0.0, 100000.0)
u0: [1.0, 0.0, 0.0]
Defining our test solution to compare our benchmarks with
sol = solve(prob,CVODE_BDF(),abstol=1/10^14,reltol=1/10^14)test_sol = TestSolution(sol)7.2s
Julia
retcode: Success
Interpolation: 3rd order Hermite
t: nothing
u: nothing
plot(sol,dpi=200)63.1s
Julia
High Tolerances
The speed of solvers when you just want the answer.
Setups
abstols = 1.0 ./ 10.0 .^ (5:8)reltols = 1.0 ./ 10.0 .^ (1:4);setups = [Dict(:alg=>Rosenbrock23()),          Dict(:alg=>TRBDF2()),          Dict(:alg=>ImplicitEulerExtrapolation()),          #Dict(:alg=>ImplicitDeuflhardExtrapolation()), # Diverges          #Dict(:alg=>ImplicitHairerWannerExtrapolation()), # Diverges          #Dict(:alg=>ABDF2()), # Maxiters          Dict(:alg=>QNDF()),          Dict(:alg=>Exprb43()),          Dict(:alg=>Exprb32()),]names= ["Rosenbrock23" "TRBDF2" "ImplicitEulerExtrapolation" "QNDF"  "Exprb43" "Exprb32"]3.6s
Julia
1×6 Array{String,2}:
 "Rosenbrock23"  "TRBDF2"  …  "QNDF"  "Exprb43"  "Exprb32"
wp = WorkPrecisionSet(prob,abstols,reltols,setups;  save_everystep=false,appxsol=test_sol,maxiters=Int(1e5),numruns=10)plot(wp)110.3s
Julia
The QNDF performs much better which was diverging previously in POLLU benchmarks here .
versioninfo()5.0s
Julia