# Distributed solving ODEs problem

Hi, I have a problem with using distributed solving ODEs, here is a simple example,

``````@everywhere begin
function test(dy, y, p, t)
a, b, c = p
dy[1] = a * y[1] + b * y[2] + c
dy[2] = b * y[2] + c * y[3] + a
dy[3] = c * y[3] + a * y[1] + b
end
end

@everywhere begin
function main(a, b, c)

tstart = 0.0
tend = 1.0e-2
tspan = (tstart, tend)
u0 = [0.0, 0.0, 1.0]
p = [a, b, c]

prob = ODEProblem(test, u0, tspan, p)
y = solve(prob, Tsit5())

return y[1, end]
end
end

using DifferentialEquations, LinearAlgebra, Distributed,SharedArrays

atemp = [1, 2, 3, 4, 5]
btemp = [2, 3, 4, 5, 6]
ctemp = [3, 4, 5, 6, 7]

F = SharedVector{Float64}(5)
@distributed for i = 1:5
a = atemp[i]
b = btemp[i]
c = ctemp[i]

F[i] = main(a, b, c)
end

``````

here is the error
Unhandled Task ERROR: On worker 5:
UndefVarError: ODEProblem not defined

Anyone can show me how to solve this problem? Thanks~

Iâ€™d try

`@everywhere using DifferentialEquations, LinearAlgebra, Distributed`

1 Like

Seems work, but if @everywhere is put before `using DifferentialEquations, LinearAlgebra, Distributed`, the program doesnâ€™t know it, unless I run `using Distributed ` once in REPL, then the program knows it, a little bit weird

I believe all workers should run in the same `Pkg` environment. Could this be a problem? Hm, not sure.

Maybe I am happy too early, it doesnâ€™t work, it doesnâ€™t know ctemp on worker 2, even I set it to be sharedvectors, any suggestions?

Youâ€™re just missing a few more `@everywhere`s. If itâ€™s global, it needs to be sent.

I already add @everywhere to all the functions, for the arrays, like atemp, @everywhere cannot be applied, I tried SharedArray, and also doesnâ€™t work, where can i put the @everywhere? could you be more spectific?

Yes it can and it should.

1 Like

This post was temporarily hidden by the community for possibly being off-topic, inappropriate, or spammy.