100100 function lotkavolterra (u, p, t)
101101 [p[1 ]* u[1 ] - p[2 ]* u[1 ]* u[2 ], - p[4 ]* u[2 ] + p[3 ]* u[1 ]* u[2 ]]
102102 end
103- # Compare the built bc function to the actual constructed one.
104- function bc! (resid, u, p, t)
105- resid[1 ] = u[1 ][1 ] - 1.
106- resid[2 ] = u[1 ][2 ] - 2.
107- nothing
108- end
109- function bc (u, p, t)
110- [u[1 ][1 ] - 1. , u[1 ][2 ] - 2. ]
111- end
112-
113- u0 = [1. , 2. ]; p = [1.5 , 1. , 1. , 3. ]
114- fns = ModelingToolkit. generate_function_bc (lksys, u0, [1 , 2 ], tspan)
115- genbc_oop, genbc_iip = ModelingToolkit. eval_or_rgf .(fns)
116-
117- bvpi1 = SciMLBase. BVProblem (lotkavolterra!, bc!, [1. ,2. ], tspan, p)
118- bvpi2 = SciMLBase. BVProblem (lotkavolterra!, genbc_iip, [1. ,2. ], tspan, p)
119-
120- sol1 = solve (bvpi1, MIRK4 (), dt = 0.05 )
121- sol2 = solve (bvpi2, MIRK4 (), dt = 0.05 )
122- @test sol1 ≈ sol2
123-
124- bvpo1 = BVProblem (lotkavolterra, bc, [1 ,2 ], tspan, p)
125- bvpo2 = BVProblem (lotkavolterra, genbc_oop, [1 ,2 ], tspan, p)
126-
127- sol1 = solve (bvpo1, MIRK4 (), dt = 0.05 )
128- sol2 = solve (bvpo2, MIRK4 (), dt = 0.05 )
129- @test sol1 ≈ sol2
130103
131104 # Test with a constraint.
132105 constr = [y (0.5 ) ~ 2. ]
@@ -140,29 +113,16 @@ let
140113 [u (0.0 )[1 ] - 1. , u (0.5 )[2 ] - 2. ]
141114 end
142115
143- u0 = [1 , 1. ]
144- fns = ModelingToolkit. generate_function_bc (lksys, u0, [1 ], tspan)
145- genbc_oop, genbc_iip = ModelingToolkit. eval_or_rgf .(fns)
146-
147116 bvpi1 = SciMLBase. BVProblem (lotkavolterra!, bc!, u0, tspan, p)
148- bvpi2 = SciMLBase. BVProblem (lotkavolterra!, genbc_iip , u0, tspan, p)
117+ bvpi1 = SciMLBase. BVProblem (lotkavolterra, bc , u0, tspan, p)
149118 bvpi3 = SciMLBase. BVProblem {true, SciMLBase.AutoSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
150- bvpi4 = SciMLBase. BVProblem {true , SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
119+ bvpi4 = SciMLBase. BVProblem {false , SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
151120
152121 sol1 = @btime solve ($ bvpi1, MIRK4 (), dt = 0.01 )
153122 sol2 = @btime solve ($ bvpi2, MIRK4 (), dt = 0.01 )
154123 sol3 = @btime solve ($ bvpi3, MIRK4 (), dt = 0.01 )
155124 sol4 = @btime solve ($ bvpi4, MIRK4 (), dt = 0.01 )
156125 @test sol1 ≈ sol2 ≈ sol3 ≈ sol4 # don't get true equality here, not sure why
157-
158- bvpo1 = BVProblem (lotkavolterra, bc, u0, tspan, p)
159- bvpo2 = BVProblem (lotkavolterra, genbc_oop, u0, tspan, p)
160- bvpo3 = SciMLBase. BVProblem {false, SciMLBase.FullSpecialize} (lksys, [x (t) => 1. ], tspan; guesses = [y (t) => 1. ])
161-
162- sol1 = @btime solve ($ bvpo1, MIRK4 (), dt = 0.05 )
163- sol2 = @btime solve ($ bvpo2, MIRK4 (), dt = 0.05 )
164- sol3 = @btime solve ($ bvpo3, MIRK4 (), dt = 0.05 )
165- @test sol1 ≈ sol2 ≈ sol3
166126end
167127
168128function test_solvers (solvers, prob, u0map, constraints, equations = []; dt = 0.05 , atol = 1e-2 )
0 commit comments