@@ -294,8 +294,6 @@ prob = SteadyStateProblem(osys, u0, ps)
294294 getsym (prob, (:X , :X2 ))(prob) == (0.1 , 0.2 )
295295
296296@testset " SCCNonlinearProblem" begin
297- # TODO : Rewrite this example when the MTK codegen is merged
298-
299297 function fullf! (du, u, p)
300298 du[1 ] = cos (u[2 ]) - u[1 ]
301299 du[2 ] = sin (u[1 ] + u[2 ]) + u[2 ]
@@ -311,63 +309,10 @@ prob = SteadyStateProblem(osys, u0, ps)
311309 @parameters p = 1.0
312310 eqs = Any[0 for _ in 1 : 8 ]
313311 fullf! (eqs, u, [p])
314- @named model = NonlinearSystem (0 .~ eqs, [u... ], [p])
315- model = complete (model; split = false )
316-
317- cache = zeros (4 )
318- cache[1 ] = 1.0
319-
320- function f1! (du, u, p)
321- du[1 ] = cos (u[2 ]) - u[1 ]
322- du[2 ] = sin (u[1 ] + u[2 ]) + u[2 ]
323- end
324- explicitfun1 (cache, sols) = nothing
325-
326- f1! (eqs, u2[1 : 2 ], [p])
327- @named subsys1 = NonlinearSystem (0 .~ eqs[1 : 2 ], [u2[1 : 2 ]. .. ], [p])
328- subsys1 = complete (subsys1; split = false )
329- prob1 = NonlinearProblem (
330- NonlinearFunction {true, SciMLBase.NoSpecialize} (f1!; sys = subsys1),
331- zeros (2 ), copy (cache))
332-
333- function f2! (du, u, p)
334- du[1 ] = 2 u[2 ] + u[1 ] + p[1 ]
335- du[2 ] = u[3 ]^ 2 + u[2 ]
336- du[3 ] = u[1 ]^ 2 + u[3 ]
337- end
338- explicitfun2 (cache, sols) = nothing
339-
340- f2! (eqs, u2[3 : 5 ], [p])
341- @named subsys2 = NonlinearSystem (0 .~ eqs[1 : 3 ], [u2[3 : 5 ]. .. ], [p])
342- subsys2 = complete (subsys2; split = false )
343- prob2 = NonlinearProblem (
344- NonlinearFunction {true, SciMLBase.NoSpecialize} (f2!; sys = subsys2),
345- zeros (3 ), copy (cache))
346-
347- function f3! (du, u, p)
348- du[1 ] = p[2 ] + 2.0 u[1 ] + 2.5 u[2 ] + 1.5 u[3 ]
349- du[2 ] = p[3 ] + 4.0 u[1 ] - 1.5 u[2 ] + 1.5 u[3 ]
350- du[3 ] = p[4 ] + + u[1 ] - u[2 ] - u[3 ]
351- end
352- function explicitfun3 (cache, sols)
353- cache[2 ] = sols[1 ][1 ] + sols[1 ][2 ] + sols[2 ][1 ] + sols[2 ][2 ] + sols[2 ][3 ]
354- cache[3 ] = sols[1 ][1 ] + sols[1 ][2 ] + sols[2 ][1 ] + 2.0 sols[2 ][2 ] + sols[2 ][3 ]
355- cache[4 ] = sols[1 ][1 ] + 2.0 sols[1 ][2 ] + 3.0 sols[2 ][1 ] + 5.0 sols[2 ][2 ] +
356- 6.0 sols[2 ][3 ]
357- end
358-
359- @parameters tmpvar[1 : 3 ]
360- f3! (eqs, u2[6 : 8 ], [p, tmpvar... ])
361- @named subsys3 = NonlinearSystem (0 .~ eqs[1 : 3 ], [u2[6 : 8 ]. .. ], [p, tmpvar... ])
362- subsys3 = complete (subsys3; split = false )
363- prob3 = NonlinearProblem (
364- NonlinearFunction {true, SciMLBase.NoSpecialize} (f3!; sys = subsys3),
365- zeros (3 ), copy (cache))
312+ @mtkbuild model = NonlinearSystem (0 .~ eqs, [u... ], [p])
366313
367314 prob = NonlinearProblem (model, [])
368- sccprob = SciMLBase. SCCNonlinearProblem ([prob1, prob2, prob3],
369- SciMLBase. Void {Any} .([explicitfun1, explicitfun2, explicitfun3]),
370- copy (cache); sys = model)
315+ sccprob = SCCNonlinearProblem (model, [])
371316
372317 for sym in [u, u... , u[2 ] + u[3 ], p * u[1 ] + u[2 ]]
373318 @test prob[sym] ≈ sccprob[sym]
@@ -380,12 +325,10 @@ prob = SteadyStateProblem(osys, u0, ps)
380325 for (i, sym) in enumerate ([u[1 ], u[3 ], u[6 ]])
381326 sccprob[sym] = 0.5 i
382327 @test sccprob[sym] ≈ 0.5 i
383- @test sccprob. probs[i]. u0[1 ] ≈ 0.5 i
384328 end
385329 sccprob. ps[p] = 2.5
386330 @test sccprob. ps[p] ≈ 2.5
387- @test sccprob. p[1 ] ≈ 2.5
388331 for scc in sccprob. probs
389- @test parameter_values ( scc)[ 1 ] ≈ 2.5
332+ @test scc. ps[p ] ≈ 2.5
390333 end
391334end
0 commit comments