|
1 | | -using DiffEqGPU, StochasticDiffEq, Test |
| 1 | +using DiffEqGPU, StochasticDiffEq, SparseArrays, Test |
2 | 2 |
|
3 | 3 | include("utils.jl") |
4 | 4 |
|
@@ -28,3 +28,31 @@ monteprob = EnsembleProblem(prob, prob_func = prob_func) |
28 | 28 | # CUDAnative.CUDAdrv.@profile |
29 | 29 | @time sol = solve(monteprob, SOSRI(), EnsembleGPUArray(backend), trajectories = 10, |
30 | 30 | saveat = 1.0f0) |
| 31 | + |
| 32 | +function lorenz(du, u, p, t) |
| 33 | + du[1] = p[1] * (u[2] - u[1]) |
| 34 | + du[2] = u[1] * (p[2] - u[3]) - u[2] |
| 35 | + du[3] = u[1] * u[2] - p[3] * u[3] |
| 36 | + du[4] = 0 |
| 37 | +end |
| 38 | + |
| 39 | +function multiplicative_noise(du, u, p, t) |
| 40 | + du[1, 1] = 0.1 |
| 41 | + du[2, 2] = 0.4 |
| 42 | + du[4, 1] = 1.0 |
| 43 | +end |
| 44 | + |
| 45 | +NRate = spzeros(4, 2) |
| 46 | +NRate[1, 1] = 1 |
| 47 | +NRate[4, 1] = 1 |
| 48 | +NRate[2, 2] = 1 |
| 49 | + |
| 50 | +u0 = ComplexF32[1.0; 0.0; 0.0; 0.0] |
| 51 | +tspan = (0.0f0, 10.0f0) |
| 52 | +p = (10.0f0, 28.0f0, 8 / 3.0f0) |
| 53 | +prob = SDEProblem(lorenz, multiplicative_noise, u0, tspan, p, noise_rate_prototype=NRate) |
| 54 | + |
| 55 | +prob_func = (prob, i, repeat) -> remake(prob, p=p) |
| 56 | +monteprob = EnsembleProblem(prob, prob_func=prob_func) |
| 57 | + |
| 58 | +@test_throws "Incompatible problem detected. EnsembleGPUArray currently requires `prob.noise_rate_prototype === nothing`, i.e. only diagonal noise is currently supported. Track https://github.com/SciML/DiffEqGPU.jl/issues/331 for more information." sol = solve(monteprob, SRA1(), EnsembleCPUArray(), trajectories=10_000, saveat=1.0f0) |
0 commit comments