# Using EnsembleThreads in DifferentialEquations.jl fails for SDEs with trajectories \> nthreads

**URL:** <https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831>\
**Category:** Modelling & Simulations\
**Tags:** diffeq, sde\
**Created:** [March 23, 2021, 10:26pm UTC](https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831 "2021-03-23T22:26:32Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Junkiejim](https://avatars.discourse-cdn.com/v4/letter/j/3bc359/32.png) [@Junkiejim](https://discourse.julialang.org/u/Junkiejim)\
**Post date:** [March 23, 2021, 10:26pm UTC](https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831/1 "2021-03-23T22:26:32Z")

</div>

I’m trying to run some stochastic simulations for a research problem using DifferentialEquations.jl. I’ve had no problem setting up my differential equation, and solving it is fine until I try to setup an ensembleproblem, but only if the trajectories option is set higher than the number of threads I have available. If I run with `EnsembleSerial()` there are no issues, but I would really like to take advantage of multithreading if I can. Here is the code I’m running (Julia V 1.5.3, DifferentialEquations.jl V 6.16.0)

```julia
 using DifferentialEquations, Parameters
@with_kw struct pars
    β::Array{Float64,2} = [-0.05 0.15 -0.2
                           -0.01 -0.0267 0.05
                           0.1 -0.1 -0.0148]
    r::Vector{Float64} = [6.0,4.0,2.0]
    σ::Float64 = 0.1
end

function LotkaVolterra!(du,u,p,t)
    @unpack r,β = p
    du .= u.*(r.+β*u)
end

#Noise function
function σ_LV!(du,u,p,t)
    @unpack σ = p
    du .= σ*u
end

u0 = [500.0, 400.0, 275.0]
tspan = (0.0,2.0)
dt = 0.005
prob = SDEProblem(LotkaVolterra!,σ_LV!,u0,tspan,pars(σ=0.1),
                           noise = RealWienerProcess(0.0,zeros(size(u0)),zeros(size(u0))))
ensemble_prob = EnsembleProblem(prob)
sol = solve(ensemble_prob, SRIW1(), saveat=dt, EnsembleThreads(), trajectories=100)

```

I have 8 threads available. I get an assortment of errors when running this with trajectories \> 7 , ranging from the solver aborting in every instance because dt \< dtmin (which doesn’t happen for trajectories \<=7), to errors about trying to access an array at index 0.

---

<div class="post-metadata">

**Author:** ![lungd](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lungd/32/10913_2.png) [@lungd](https://discourse.julialang.org/u/lungd)\
**Post date:** [March 23, 2021, 11:39pm UTC](https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831/2 "2021-03-23T23:39:09Z")

</div>

Not a sulation but it works without the noise part

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [March 24, 2021, 1:55am UTC](https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831/3 "2021-03-24T01:55:55Z")

</div>

Do a `prob_func` where you create a new noise process each time?

---

<div class="post-metadata">

**Author:** ![Junkiejim](https://avatars.discourse-cdn.com/v4/letter/j/3bc359/32.png) [@Junkiejim](https://discourse.julialang.org/u/Junkiejim)\
**Post date:** [March 24, 2021, 3:19am UTC](https://discourse.julialang.org/t/using-ensemblethreads-in-differentialequations-jl-fails-for-sdes-with-trajectories-nthreads/57831/4 "2021-03-24T03:19:33Z")

</div>

Yes, defining a `prob_func` resetting the noise process each time works. Seems like a bit of a work around though.
