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