Oval2 Long Times

Chris Rackauckas
using StochasticDiffEq, DiffEqProblemLibrary, Random
Random.seed!(200)
using DiffEqProblemLibrary.SDEProblemLibrary: importsdeproblems; importsdeproblems()
prob = DiffEqProblemLibrary.SDEProblemLibrary.oval2ModelExample(largeFluctuations=true,useBigs=false)

SDEProblem with uType Array{Float64,1} and tType Float64. In-place: true
timespan: (0.0, 500.0)
u0: [0.128483, 1.25685, 0.0030203, 0.0027977, 0.0101511, 0.0422942, 0.23913
5, 0.0008014, 0.0001464, 2.67e-5, 4.8e-6, 9.0e-7, 0.0619917, 1.24443, 0.048
6676, 199.938, 137.427, 1.51802, 1.51802]

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SRIW1(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-5,reltol=1e-3)
end

116.177791 seconds (700.93 M allocations: 58.527 GiB, 7.11% gc time)

Random.seed!(200)
@time for i in 1:10
@show i
sol = solve(prob,ImplicitEM(),dt=1/60000)
end

i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
82.827103 seconds (90.56 M allocations: 22.743 GiB, 10.66% gc time)

Random.seed!(200)
@time for i in 1:10
@show i
sol = solve(prob,ImplicitRKMil(),dt=1/50000)
end

i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
264.427996 seconds (245.32 M allocations: 57.379 GiB, 16.32% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-4,reltol=1e-2)
end

49.238101 seconds (175.38 M allocations: 23.118 GiB, 8.56% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI2(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-4,reltol=1e-4)
end

97.365943 seconds (379.43 M allocations: 39.453 GiB, 8.73% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI2(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-5,reltol=1e-3)
end

90.227467 seconds (421.51 M allocations: 33.809 GiB, 4.70% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-3,reltol=1e-2)
end

22.505249 seconds (105.66 M allocations: 8.548 GiB, 4.91% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-4,reltol=1e-4)
end

75.941366 seconds (362.42 M allocations: 28.925 GiB, 4.51% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-2,reltol=1e-2)
end

18.945290 seconds (87.37 M allocations: 7.028 GiB, 6.22% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-5,reltol=1e-3)
end

90.604371 seconds (435.36 M allocations: 34.751 GiB, 4.41% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-2,reltol=1e-1)
end

11.769803 seconds (56.09 M allocations: 4.493 GiB, 4.14% gc time)

Random.seed!(200)
@time for i in 1:10
sol = solve(prob,SOSRI2(),dt=(1/2)^(18),qmax=1.125,
saveat=0.1,maxiters=1e7,abstol=1e-4,reltol=1e-1)
end

0.046872 seconds (194.82 k allocations: 18.354 MiB, 7.65% gc time)

Random.seed!(200)
@time for i in 1:10
@show i
sol = solve(prob,ImplicitEM(),dt=1/50000)
end

i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
25.284452 seconds (20.13 M allocations: 4.613 GiB, 10.37% gc time)

Random.seed!(200)
@time for i in 1:10
@show i
sol = solve(prob,ImplicitRKMil(),dt=1/40000)
end

i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
195.930307 seconds (169.76 M allocations: 36.963 GiB, 15.75% gc time)

using DiffEqBenchmarks
DiffEqBenchmarks.bench_footer(WEAVE_ARGS[:folder],WEAVE_ARGS[:file])


Appendix

These benchmarks are a part of the DiffEqBenchmarks.jl repository, found at: https://github.com/JuliaDiffEq/DiffEqBenchmarks.jl

To locally run this tutorial, do the following commands:

using DiffEqBenchmarks
DiffEqBenchmarks.weave_file("StiffSDE","Oval2LongTimes.jmd")

Computer Information:

Julia Version 1.1.0
Commit 80516ca202 (2019-01-21 21:24 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.1 (ORCJIT, haswell)


Package Information:

Status: /home/crackauckas/.julia/environments/v1.1/Project.toml
[c52e3926-4ff0-5f6e-af25-54175e0327b1] Atom 0.8.5
[bcd4f6db-9728-5f36-b5f7-82caef46ccdb] DelayDiffEq 5.2.0
[bb2cbb15-79fc-5d1e-9bf1-8ae49c7c1650] DiffEqBenchmarks 0.1.0
[459566f4-90b8-5000-8ac3-15dfb0a30def] DiffEqCallbacks 2.5.2
[f3b72e0c-5b89-59e1-b016-84e28bfd966d] DiffEqDevTools 2.8.0
[78ddff82-25fc-5f2b-89aa-309469cbf16f] DiffEqMonteCarlo 0.14.0
[77a26b50-5914-5dd7-bc55-306e6241c503] DiffEqNoiseProcess 3.2.0
[055956cb-9e8b-5191-98cc-73ae4a59e68a] DiffEqPhysics 3.1.0
[a077e3f3-b75c-5d7f-a0c6-6bc4c8ec64a9] DiffEqProblemLibrary 4.1.0
[41bf760c-e81c-5289-8e54-58b1f1f8abe2] DiffEqSensitivity 3.2.2
[0c46a032-eb83-5123-abaf-570d42b7fbaa] DifferentialEquations 6.3.0
[b305315f-e792-5b7a-8f41-49f472929428] Elliptic 0.5.0
[7f56f5a3-f504-529b-bc02-0b1fe5e64312] LSODA 0.4.0
[c030b06c-0b6d-57c2-b091-7029874bd033] ODE 2.4.0
[54ca160b-1b9f-5127-a996-1867f4bc2a2c] ODEInterface 0.4.5
[09606e27-ecf5-54fc-bb29-004bd9f985bf] ODEInterfaceDiffEq 3.2.0
[1dea7af3-3e70-54e6-95c3-0bf5283fa5ed] OrdinaryDiffEq 5.6.0
[2dcacdae-9679-587a-88bb-8b444fb7085b] ParallelDataTransfer 0.5.0
[65888b18-ceab-5e60-b2b9-181511a3b968] ParameterizedFunctions 4.1.1
[91a5bcdd-55d7-5caf-9e0b-520d859cae80] Plots 0.24.0
[d330b81b-6aea-500a-939a-2ce795aea3ee] PyPlot 2.8.1
[e88e6eb3-aa80-5325-afca-941959d7151f] Zygote 0.3.0