@@ -3,34 +3,73 @@ using ModelingToolkit: t_nounits as t, D_nounits as D
3
3
import ModelingToolkit as MTK
4
4
5
5
@testset " Standalone pendulum model" begin
6
+ fmu = loadFMU (" SpringPendulum1D" , " Dymola" , " 2022x" ; type = :ME )
7
+ truesol = FMI. simulate (
8
+ fmu, (0.0 , 8.0 ); saveat = 0.0 : 0.1 : 8.0 , recordValues = [" mass.s" , " mass.v" ])
9
+
6
10
@testset " v2, ME" begin
7
11
fmu = loadFMU (" SpringPendulum1D" , " Dymola" , " 2022x" ; type = :ME )
8
- @mtkbuild sys = MTK. FMIComponent (Val (2 ), Val ( :ME ); fmu )
12
+ @mtkbuild sys = MTK. FMIComponent (Val (2 ); fmu, type = :ME )
9
13
prob = ODEProblem {true, SciMLBase.FullSpecialize} (
10
14
sys, [sys. mass__s => 0.5 , sys. mass__v => 0.0 ], (0.0 , 8.0 ))
11
15
sol = solve (prob, Tsit5 (); reltol = 1e-8 , abstol = 1e-8 )
12
16
@test SciMLBase. successful_retcode (sol)
13
17
14
- truesol = FMI . simulate (fmu, ( 0.0 , 8.0 ); saveat = 0.0 : 0.1 : 8.0 )
15
- @test sol ( 0.0 : 0.1 : 8.0 ). u≈ truesol. states . u atol= 1e-4
18
+ @test sol ( 0.0 : 0.1 : 8.0 ;
19
+ idxs = [sys . mass__s, sys . mass__v] ). u≈ collect .( truesol. values . saveval) atol= 1e-4
16
20
# repeated solve works
17
21
@test_nowarn solve (prob, Tsit5 ())
18
22
end
23
+ @testset " v2, CS" begin
24
+ fmu = loadFMU (" SpringPendulum1D" , " Dymola" , " 2022x" ; type = :CS )
25
+ @named inner = MTK. FMIComponent (
26
+ Val (2 ); fmu, communication_step_size = 0.001 , type = :CS )
27
+ @variables x (t) = 1.0
28
+ @mtkbuild sys = ODESystem ([D (x) ~ x], t; systems = [inner])
29
+
30
+ prob = ODEProblem {true, SciMLBase.FullSpecialize} (
31
+ sys, [sys. inner. mass__s => 0.5 , sys. inner. mass__v => 0.0 ], (0.0 , 8.0 ))
32
+ sol = solve (prob, Tsit5 (); reltol = 1e-8 , abstol = 1e-8 )
33
+ @test SciMLBase. successful_retcode (sol)
34
+
35
+ @test sol (0.0 : 0.1 : 8.0 ;
36
+ idxs = [sys. inner. mass__s, sys. inner. mass__v]). u≈ collect .(truesol. values. saveval) rtol= 1e-2
37
+ end
19
38
end
20
39
21
40
@testset " IO Model" begin
22
- fmu = loadFMU (" ./fmus/SimpleAdder.fmu" ; type = :ME )
23
- @named adder = MTK. FMIComponent (Val (2 ), Val (:ME ); fmu)
24
- @variables a (t) b (t) c (t) [guess = 1.0 ]
25
- @mtkbuild sys = ODESystem (
26
- [adder. a ~ a, adder. b ~ b, D (a) ~ t,
27
- D (b) ~ adder. out + adder. c, c^ 2 ~ adder. out + adder. value],
28
- t;
29
- systems = [adder])
30
-
31
- # c will be solved for by initialization
32
- # this tests that initialization also works with FMUs
33
- prob = ODEProblem (sys, [sys. adder. c => 1.0 , sys. a => 1.0 , sys. b => 1.0 ], (0.0 , 1.0 ))
34
- sol = solve (prob, Rodas5P (autodiff = false ))
35
- @test SciMLBase. successful_retcode (sol)
41
+ @testset " v2, ME" begin
42
+ fmu = loadFMU (" ../../omc-fmus/SimpleAdder.fmu" ; type = :ME )
43
+ @named adder = MTK. FMIComponent (Val (2 ); fmu, type = :ME )
44
+ @variables a (t) b (t) c (t) [guess = 1.0 ]
45
+ @mtkbuild sys = ODESystem (
46
+ [adder. a ~ a, adder. b ~ b, D (a) ~ t,
47
+ D (b) ~ adder. out + adder. c, c^ 2 ~ adder. out + adder. value],
48
+ t;
49
+ systems = [adder])
50
+
51
+ # c will be solved for by initialization
52
+ # this tests that initialization also works with FMUs
53
+ prob = ODEProblem (sys, [sys. adder. c => 1.0 , sys. a => 1.0 , sys. b => 1.0 ], (0.0 , 1.0 ))
54
+ sol = solve (prob, Rodas5P (autodiff = false ))
55
+ @test SciMLBase. successful_retcode (sol)
56
+ end
57
+ @testset " v2, CS" begin
58
+ fmu = loadFMU (" ../../omc-fmus/SimpleAdder.fmu" ; type = :CS )
59
+ @named adder = MTK. FMIComponent (
60
+ Val (2 ); fmu, type = :CS , communication_step_size = 0.001 )
61
+ @variables a (t) b (t) c (t) [guess = 1.0 ]
62
+ @mtkbuild sys = ODESystem (
63
+ [adder. a ~ a, adder. b ~ b, D (a) ~ t,
64
+ D (b) ~ adder. out + adder. c, c^ 2 ~ adder. out + adder. value],
65
+ t;
66
+ systems = [adder])
67
+
68
+ # c will be solved for by initialization
69
+ # this tests that initialization also works with FMUs
70
+ prob = ODEProblem (sys, [sys. adder. c => 1.0 , sys. a => 1.0 , sys. b => 1.0 ],
71
+ (0.0 , 1.0 ); use_scc = false )
72
+ sol = solve (prob, Rodas5P (autodiff = false ))
73
+ @test SciMLBase. successful_retcode (sol)
74
+ end
36
75
end
0 commit comments