Skip to content

Commit 1df5c8a

Browse files
Add ModelingToolkit compatibility test
- Add test for MTK-generated problems with EnsembleGPUKernel - Adds ModelingToolkit and OrdinaryDiffEqTsit5 test dependencies Related to #375
1 parent 31676e9 commit 1df5c8a

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

test/Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
88
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
99
JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb"
1010
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
11+
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
1112
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
1213
OptimizationOptimisers = "42dfb2eb-d2b4-4451-abcd-913932933ac1"
1314
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
15+
OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a"
1416
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1517
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
18+
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1619
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
1720
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1821
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
19-
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
2022
TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
2123
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2224
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using DiffEqGPU, Test, ModelingToolkit, OrdinaryDiffEqTsit5, CUDA
2+
3+
@testset "ModelingToolkit GPU Compatibility" begin
4+
# Test case from issue #375
5+
# ModelingToolkit-generated problems should work with EnsembleGPUKernel
6+
7+
@parameters σ ρ β
8+
@variables t x(t) y(t) z(t)
9+
D = Differential(t)
10+
11+
eqs = [D(x) ~ σ * (y - x),
12+
D(y) ~ x *- z) - y,
13+
D(z) ~ x * y - β * z]
14+
15+
@named sys = ODESystem(eqs, t)
16+
sys = structural_simplify(sys)
17+
18+
u0 = [x => 1.0, y => 0.0, z => 0.0]
19+
tspan = (0.0f0, 1.0f0)
20+
p ==> 10.0, ρ => 28.0, β => 8 / 3]
21+
22+
prob = ODEProblem(sys, u0, tspan, p)
23+
24+
# Test that we can create an ensemble problem
25+
function prob_func(prob, i, repeat)
26+
remake(prob, p ==> 10.0 + i * 0.1, ρ => 28.0, β => 8 / 3])
27+
end
28+
29+
ensemble_prob = EnsembleProblem(prob, prob_func = prob_func)
30+
31+
# This should not error with "CuArray only supports element types that are allocated inline"
32+
@test_nowarn begin
33+
sol = solve(ensemble_prob, GPUTsit5(), EnsembleGPUKernel(CUDA.CUDABackend());
34+
trajectories = 10, dt = 0.1f0, adaptive = false)
35+
end
36+
37+
# Actually test that it works
38+
sol = solve(ensemble_prob, GPUTsit5(), EnsembleGPUKernel(CUDA.CUDABackend());
39+
trajectories = 10, dt = 0.1f0, adaptive = false)
40+
41+
@test length(sol) == 10
42+
@test all(s.retcode == :Success || s.retcode == :Terminated for s in sol)
43+
end

0 commit comments

Comments
 (0)