Skip to content

Commit a5cbf1c

Browse files
Merge pull request #11 from JuliaDiffEq/myb/v0.7
0.7 compatibility
2 parents 4d18458 + ebff660 commit a5cbf1c

12 files changed

+86
-90
lines changed

src/DiffEqDevTools.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ module DiffEqDevTools
55
using DiffEqBase, RecipesBase, RecursiveArrayTools, DiffEqPDEBase,
66
DiffEqMonteCarlo, DiffEqNoiseProcess, Juno
77

8+
using LinearAlgebra
9+
810
using Statistics
911

1012
import Base: length
1113

1214
import DiffEqBase: AbstractODEProblem, AbstractDDEProblem,
1315
AbstractODESolution, AbstractRODEProblem, AbstractSDEProblem,
1416
AbstractDAEProblem, @def, ConvergenceSetup, DEAlgorithm,
15-
ODERKTableau, AbstractTimeseriesSolution, ExplicitRKTableau
17+
ODERKTableau, AbstractTimeseriesSolution, ExplicitRKTableau,
18+
ImplicitRKTableau
1619

1720

1821
const TIMESERIES_ERRORS = Set([:l2,:l∞,:L2,:L∞])

src/benchmark.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## Shootouts
22

3-
type Shootout
3+
mutable struct Shootout
44
setups::Vector{Dict{Symbol,Any}}
55
times#::Vector{Float64}
66
errors#::Vector{uType}
@@ -13,7 +13,7 @@ type Shootout
1313
winner::String
1414
end
1515

16-
type ShootoutSet
16+
mutable struct ShootoutSet
1717
shootouts::Vector{Shootout}
1818
probs#::Vector{DEProblem}
1919
probaux#::Vector{Dict{Symbol,Any}}
@@ -115,7 +115,7 @@ Base.show(io::IO, set::ShootoutSet) = print(io,"ShootoutSet of $(set.N) shootout
115115

116116
## WorkPrecisions
117117

118-
type WorkPrecision
118+
mutable struct WorkPrecision
119119
prob
120120
abstols
121121
reltols
@@ -125,7 +125,7 @@ type WorkPrecision
125125
N::Int
126126
end
127127

128-
type WorkPrecisionSet
128+
mutable struct WorkPrecisionSet
129129
wps::Vector{WorkPrecision}
130130
N::Int
131131
abstols

src/convergence.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
type ConvergenceSimulation{SolType}
1+
mutable struct ConvergenceSimulation{SolType}
22
solutions::Array{SolType}
33
errors
44
N

src/tableau_info.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using NLsolve
1+
using NLsolve, LinearAlgebra
22
"""
33
`Base.length(tab::ODERKTableau)`
44
@@ -15,7 +15,7 @@ Calculates the stability function from the tableau at `z`. Stable if <1.
1515
r(z) = \\frac{\\det(I-zA+zeb^T)}{\\det(I-zA)}
1616
```
1717
"""
18-
stability_region(z,tab::ODERKTableau) = det(eye(tab.stages)- z*tab.A + z*ones(tab.stages)*tab.α')/det(eye(tab.stages)-z*tab.A)
18+
stability_region(z,tab::ODERKTableau) = det(Matrix{Float64}(I,tab.stages,tab.stages)- z*tab.A + z*ones(tab.stages)*tab.α')/det(Matrix{Float64}(I,tab.stages,tab.stages)-z*tab.A)
1919

2020
"""
2121
`stability_region(tab::ODERKTableau; initial_guess=-3.0)`

src/test_solution.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
TestSolution
33
44
"""
5-
type TestSolution{T,N,hasinterp,tType,uType,iType} <: AbstractTimeseriesSolution{T,N}
5+
mutable struct TestSolution{T,N,hasinterp,tType,uType,iType} <: AbstractTimeseriesSolution{T,N}
66
t::tType
77
u::uType
88
interp::iType
@@ -13,15 +13,15 @@ end
1313
function TestSolution(t,u)
1414
T = eltype(eltype(u))
1515
N = length((size(u[1])..., length(u)))
16-
TestSolution{T,N,false,typeof(t),typeof(u),Void}(t,u,nothing,false,:Success)
16+
TestSolution{T,N,false,typeof(t),typeof(u),Nothing}(t,u,nothing,false,:Success)
1717
end
1818
function TestSolution(t,u,interp)
1919
T = eltype(eltype(u))
2020
N = length((size(u[1])..., length(u)))
2121
TestSolution{T,N,true,typeof(t),typeof(u),typeof(interp)}(t,u,interp,true,:Success)
2222
end
23-
TestSolution(interp::DESolution) = TestSolution{Void,0,true,Void,Void,typeof(interp)}(nothing,nothing,interp,true,:Success)
24-
hasinterp{T,N,hi,tType,uType,iType}(::TestSolution{T,N,hi,tType,uType,iType}) = hi
23+
TestSolution(interp::DESolution) = TestSolution{Nothing,0,true,Nothing,Nothing,typeof(interp)}(nothing,nothing,interp,true,:Success)
24+
hasinterp(::TestSolution{T,N,hi,tType,uType,iType}) where {T,N,hi,tType,uType,iType} = hi
2525
"""
2626
`appxtrue(sol::AbstractODESolution,sol2::TestSolution)`
2727
@@ -41,7 +41,7 @@ function appxtrue(sol::AbstractODESolution,sol2::TestSolution)
4141
timeseries_analytic = _sol(sol.t)
4242
errors[:l∞] = maximum(vecvecapply((x)->abs.(x),sol-timeseries_analytic))
4343
errors[:l2] = sqrt(recursive_mean(vecvecapply((x)->float(x).^2,sol-timeseries_analytic)))
44-
densetimes = collect(linspace(sol.t[1],sol.t[end],100))
44+
densetimes = collect(range(sol.t[1],stop=sol.t[end],length=100))
4545
interp_u = sol(densetimes)
4646
interp_analytic = _sol(densetimes)
4747
interp_errors = Dict(:L∞=>maximum(vecvecapply((x)->abs.(x),interp_u-interp_analytic)),
@@ -54,7 +54,7 @@ function appxtrue(sol::AbstractODESolution,sol2::TestSolution)
5454
errors[:l2] = sqrt(recursive_mean(vecvecapply((x)->float(x).^2,sol-timeseries_analytic)))
5555
end
5656
end
57-
build_solution(sol,timeseries_analytic,errors)
57+
DiffEqBase.build_solution(sol,timeseries_analytic,errors)
5858
end
5959

6060
"""
@@ -71,7 +71,7 @@ function appxtrue(sol::AbstractODESolution,sol2::AbstractODESolution;timeseries_
7171
errors[:l∞] = maximum(vecvecapply((x)->abs.(x),sol-timeseries_analytic))
7272
errors[:l2] = sqrt(recursive_mean(vecvecapply((x)->float(x).^2,sol-timeseries_analytic)))
7373
if dense_errors
74-
densetimes = collect(linspace(sol.t[1],sol.t[end],100))
74+
densetimes = collect(range(sol.t[1],stop=sol.t[end],length=100))
7575
interp_u = sol(densetimes)
7676
interp_analytic = sol2(densetimes)
7777
interp_errors = Dict(:L∞=>maximum(vecvecapply((x)->abs.(x),interp_u-interp_analytic)),
@@ -85,7 +85,7 @@ function appxtrue(sol::AbstractODESolution,sol2::AbstractODESolution;timeseries_
8585
errors[:l2] = sqrt(recursive_mean(vecvecapply((x)->float(x).^2,sol-timeseries_analytic)))
8686
end
8787
end
88-
build_solution(sol,timeseries_analytic,errors)
88+
DiffEqBase.build_solution(sol,timeseries_analytic,errors)
8989
end
9090

9191
function appxtrue(sim::MonteCarloSolution,appx_setup;kwargs...)

test/analyticless_convergence_tests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using OrdinaryDiffEq, ParameterizedFunctions, Base.Test
1+
using OrdinaryDiffEq, ParameterizedFunctions, Test, Random
22

33
f = @ode_def LotkaVolterra begin
44
dx = 1.5x - x*y

test/analyticless_stochastic_wp.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using StochasticDiffEq, DiffEqDevTools, DiffEqProblemLibrary, Base.Test
1+
using StochasticDiffEq, DiffEqDevTools, DiffEqProblemLibrary, Test
22

33
prob = prob_sde_additivesystem
44
prob = SDEProblem(prob.f,prob.g,prob.u0,(0.0,1.0))

test/benchmark_tests.jl

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
using OrdinaryDiffEq, DelayDiffEq, DiffEqDevTools, DiffEqProblemLibrary, DiffEqBase, Base.Test
1+
using OrdinaryDiffEq, DelayDiffEq, DiffEqDevTools, DiffEqBase, Test
2+
using DiffEqProblemLibrary.ODEProblemLibrary: importodeproblems; importodeproblems()
3+
import DiffEqProblemLibrary.ODEProblemLibrary: prob_ode_2Dlinear, prob_ode_linear
24

35
## Setup Tests
46

57
prob = prob_ode_linear
68

7-
probs = Vector{ODEProblem}(2)
9+
probs = Vector{ODEProblem}(undef, 2)
810
probs[1] = prob
911
probs[2] = prob_ode_2Dlinear
1012

1113
tspan = [0,1]
12-
tspans = Vector{Vector{Int64}}(2)
14+
tspans = Vector{Vector{Int64}}(undef, 2)
1315
tspans[1] = tspan; tspans[2] = tspan
14-
abstols = 1./10.^(3:10)
15-
reltols = 1./10.^(3:10)
16+
abstols = 1. /10 .^(3:10)
17+
reltols = 1 ./10 .^(3:10)
1618

1719

1820
setups = [Dict(:alg=>RK4());Dict(:alg=>Euler());Dict(:alg=>BS3());
@@ -72,8 +74,8 @@ end
7274
tspan = (0.0,10.0)
7375
prob = ODEProblem(f_2dlin,rand(100,100),tspan)
7476

75-
abstols = 1./10.^(3:7)
76-
reltols = 1./10.^(0:4)
77+
abstols = 1 ./10 .^(3:7)
78+
reltols = 1 ./10 .^(0:4)
7779

7880
setups = [Dict(:alg=>DP5())
7981
Dict(:alg=>Tsit5())]
@@ -86,8 +88,8 @@ end
8688

8789
prob = ODEProblem(lotka,[1.0;1.0],(0.0,10.0))
8890

89-
abstols = 1./10.^(6:9)
90-
reltols = 1./10.^(3:6)
91+
abstols = 1 ./10 .^(6:9)
92+
reltols = 1 ./10 .^(3:6)
9193
sol = solve(prob,Vern7(),abstol=1/10^14,reltol=1/10^14)
9294
test_sol = TestSolution(sol)
9395

@@ -100,8 +102,8 @@ wp = WorkPrecisionSet(prob,abstols,reltols,setups;appxsol=test_sol,save_everyste
100102
# DDE problem
101103
prob = prob_dde_1delay
102104

103-
abstols = 1./10.^(7:10)
104-
reltols = 1./10.^(4:7)
105+
abstols = 1 ./10 .^(7:10)
106+
reltols = 1 ./10 .^(4:7)
105107
sol = solve(prob, MethodOfSteps(Vern9(), max_fixedpoint_iters=1000); reltol=1e-8, abstol=1e-8)
106108
test_sol = TestSolution(sol)
107109

test/ode_appxtrue_tests.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
using OrdinaryDiffEq, DiffEqBase, DiffEqProblemLibrary, DiffEqDevTools, Base.Test
1+
using OrdinaryDiffEq, DiffEqBase, DiffEqDevTools, Test
2+
using DiffEqProblemLibrary.ODEProblemLibrary: importodeproblems; importodeproblems()
3+
import DiffEqProblemLibrary.ODEProblemLibrary: prob_ode_linear
24

35
f = (u,p,t) -> u
4-
prob = ODEProblem(f,1/2,(0.0,1.0))
5-
(::typeof(f))(::Type{Val{:analytic}},u0,p,t) = u0*exp(t)
6+
fun = ODEFunction(f; analytic=(u0,p,t)->u0*exp(t))
7+
prob = ODEProblem(fun,1/2,(0.0,1.0))
68

79
sol =solve(prob,Euler();dt=1//2^(4),dense_errors=true)
810
sol2 =solve(prob,Vern9();dt=1//2^(10),abstol=1e-14,reltol=1e-14)

0 commit comments

Comments
 (0)