@@ -294,8 +294,6 @@ prob = SteadyStateProblem(osys, u0, ps)
294
294
getsym (prob, (:X , :X2 ))(prob) == (0.1 , 0.2 )
295
295
296
296
@testset " SCCNonlinearProblem" begin
297
- # TODO : Rewrite this example when the MTK codegen is merged
298
-
299
297
function fullf! (du, u, p)
300
298
du[1 ] = cos (u[2 ]) - u[1 ]
301
299
du[2 ] = sin (u[1 ] + u[2 ]) + u[2 ]
@@ -311,63 +309,10 @@ prob = SteadyStateProblem(osys, u0, ps)
311
309
@parameters p = 1.0
312
310
eqs = Any[0 for _ in 1 : 8 ]
313
311
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])
366
313
367
314
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, [])
371
316
372
317
for sym in [u, u... , u[2 ] + u[3 ], p * u[1 ] + u[2 ]]
373
318
@test prob[sym] ≈ sccprob[sym]
@@ -380,12 +325,10 @@ prob = SteadyStateProblem(osys, u0, ps)
380
325
for (i, sym) in enumerate ([u[1 ], u[3 ], u[6 ]])
381
326
sccprob[sym] = 0.5 i
382
327
@test sccprob[sym] ≈ 0.5 i
383
- @test sccprob. probs[i]. u0[1 ] ≈ 0.5 i
384
328
end
385
329
sccprob. ps[p] = 2.5
386
330
@test sccprob. ps[p] ≈ 2.5
387
- @test sccprob. p[1 ] ≈ 2.5
388
331
for scc in sccprob. probs
389
- @test parameter_values ( scc)[ 1 ] ≈ 2.5
332
+ @test scc. ps[p ] ≈ 2.5
390
333
end
391
334
end
0 commit comments