Closed
Description
SharedArray
s are currently not supported
julia> using OrdinaryDiffEq
prob
julia> prob = ODEProblem((t,u,du)-> begin du .= u; nothing end, SharedArray{Float64}(3,2), (0., 1.))
DiffEqBase.ODEProblem with uType SharedArray{Float64,2} and tType Float64. In-place: true
timespan: (0.0, 1.0)
u0: [0.0 0.0; 0.0 0.0; 0.0 0.0]
julia> solve(prob, Euler(), dt=1.e-2)
ERROR: MethodError: no method matching OrdinaryDiffEq.EulerCache(::SharedArray{Float64,2}, ::SharedArray{Float64,2}, ::Array{Float64,2}, ::Array{Float64,2}, ::Array{Float64,2})
Closest candidates are:
OrdinaryDiffEq.EulerCache(::uType, ::uType, ::uType, ::rateType, ::rateType) where {uType, rateType} at .../.julia/v0.6/OrdinaryDiffEq/src/caches/low_order_rk_caches.jl:2
Stacktrace:
[1] alg_cache(::OrdinaryDiffEq.Euler, ::SharedArray{Float64,2}, ::Array{Float64,2}, ::Type{T} where T, ::Type{T} where T, ::SharedArray{Float64,2}, ::SharedArray{Float64,2}, ::Function, ::Float64, ::Float64, ::Float64, ::Type{Val{true}}) at .../.julia/v0.6/OrdinaryDiffEq/src/caches/low_order_rk_caches.jl:29
[2] #init#1831(::Int64, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Void, ::Bool, ::Void, ::Bool, ::Bool, ::Bool, ::Bool, ::Float64, ::Bool, ::Rational{Int64}, ::Void, ::Void, ::Int64, ::Rational{Int64}, ::Int64, ::Int64, ::Rational{Int64}, ::Bool, ::Int64, ::Rational{Int64}, ::Rational{Int64}, ::Int64, ::Float64, ::Float64, ::DiffEqBase.#ODE_DEFAULT_NORM, ::DiffEqBase.#ODE_DEFAULT_ISOUTOFDOMAIN, ::DiffEqBase.#ODE_DEFAULT_UNSTABLE_CHECK, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Int64, ::String, ::DiffEqBase.#ODE_DEFAULT_PROG_MESSAGE, ::Void, ::Void, ::Bool, ::Bool, ::Array{Any,1}, ::DiffEqBase.#init, ::DiffEqBase.ODEProblem{SharedArray{Float64,2},Float64,true,##1#2,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Euler, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at .../.julia/v0.6/OrdinaryDiffEq/src/solve.jl:241
[3] (::DiffEqBase.#kw##init)(::Array{Any,1}, ::DiffEqBase.#init, ::DiffEqBase.ODEProblem{SharedArray{Float64,2},Float64,true,##1#2,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Euler, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at ./<missing>:0
[4] #solve#1830(::Array{Any,1}, ::Function, ::DiffEqBase.ODEProblem{SharedArray{Float64,2},Float64,true,##1#2,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Euler, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at .../.julia/v0.6/OrdinaryDiffEq/src/solve.jl:6
[5] (::DiffEqBase.#kw##solve)(::Array{Any,1}, ::DiffEqBase.#solve, ::DiffEqBase.ODEProblem{SharedArray{Float64,2},Float64,true,##1#2,Void,UniformScaling{Int64},DiffEqBase.StandardODEProblem}, ::OrdinaryDiffEq.Euler, ::Array{Any,1}, ::Array{Any,1}, ::Array{Any,1}, ::Type{Val{true}}) at ./<missing>:0 (repeats 2 times)
I'm using julia v0.6.1
julia> versioninfo()
Julia Version 0.6.1-pre.1
Commit 4b967d4a9d* (2017-08-21 21:11 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: Intel(R) Core(TM) i5-4590S CPU @ 3.00GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
LAPACK: libopenblas64_
LIBM: libopenlibm
LLVM: libLLVM-3.9.1 (ORCJIT, haswell)
This is due to the problem that copy(::SharedArray)
and similar(::SharedArray)
do not return SharedArray
s
julia> u0 = SharedArray{Float64}(3,2)
3×2 SharedArray{Float64,2}:
0.0 0.0
0.0 0.0
0.0 0.0
julia> copy(u0)
3×2 Array{Float64,2}:
0.0 0.0
0.0 0.0
0.0 0.0
julia> deepcopy(u0)
3×2 SharedArray{Float64,2}:
0.0 0.0
0.0 0.0
0.0 0.0
See also JuliaLang/julia#12964, JuliaLang/julia#22218, https://discourse.julialang.org/t/why-does-similar-sharedarray-create-an-array/6673/3.
Shall we use deepcopy
instead of copy
for SharedArray
s?
Metadata
Metadata
Assignees
Labels
No labels