|
390 | 390 | @test !any(isequal(p[1]), parameters(sys))
|
391 | 391 | @test is_parameter(sys, p)
|
392 | 392 | end
|
| 393 | + |
| 394 | +@testset "Can convert from `ODESystem`" begin |
| 395 | + @variables x(t) y(t) |
| 396 | + @parameters p q r |
| 397 | + @named sys = ODESystem([D(x) ~ p * x^3 + q, 0 ~ -y + q * x - r], t; |
| 398 | + defaults = [x => 1.0, p => missing], guesses = [p => 1.0], |
| 399 | + initialization_eqs = [p^3 + q^3 ~ 4r], parameter_dependencies = [r ~ 3p]) |
| 400 | + nlsys = NonlinearSystem(sys) |
| 401 | + defs = defaults(nlsys) |
| 402 | + @test length(defs) == 3 |
| 403 | + @test defs[x] == 1.0 |
| 404 | + @test defs[p] === missing |
| 405 | + @test isinf(defs[t]) |
| 406 | + @test length(guesses(nlsys)) == 1 |
| 407 | + @test guesses(nlsys)[p] == 1.0 |
| 408 | + @test length(initialization_equations(nlsys)) == 1 |
| 409 | + @test length(parameter_dependencies(nlsys)) == 1 |
| 410 | + @test length(equations(nlsys)) == 2 |
| 411 | + @test all(iszero, [eq.lhs for eq in equations(nlsys)]) |
| 412 | + @test nameof(nlsys) == nameof(sys) |
| 413 | + @test !ModelingToolkit.iscomplete(nlsys) |
| 414 | + |
| 415 | + sys1 = complete(sys; split = false) |
| 416 | + nlsys = NonlinearSystem(sys1) |
| 417 | + @test ModelingToolkit.iscomplete(nlsys) |
| 418 | + @test !ModelingToolkit.is_split(nlsys) |
| 419 | + |
| 420 | + sys2 = complete(sys) |
| 421 | + nlsys = NonlinearSystem(sys2) |
| 422 | + @test ModelingToolkit.iscomplete(nlsys) |
| 423 | + @test ModelingToolkit.is_split(nlsys) |
| 424 | + |
| 425 | + sys3 = structural_simplify(sys) |
| 426 | + nlsys = NonlinearSystem(sys3) |
| 427 | + @test length(equations(nlsys)) == length(ModelingToolkit.observed(nlsys)) == 1 |
| 428 | + |
| 429 | + prob = NonlinearProblem(sys3, [q => 2.0]) |
| 430 | + @test prob.f.initialization_data.initializeprobmap === nothing |
| 431 | + sol = solve(prob) |
| 432 | + @test SciMLBase.successful_retcode(sol) |
| 433 | + @test sol.ps[p^3 + q^3]≈sol.ps[4r] atol=1e-10 |
| 434 | + |
| 435 | + @testset "Differential inside expression also substituted" begin |
| 436 | + @named sys = ODESystem([0 ~ y * D(x) + x^2 - p, 0 ~ x * D(y) + y * p], t) |
| 437 | + nlsys = NonlinearSystem(sys) |
| 438 | + vs = ModelingToolkit.vars(equations(nlsys)) |
| 439 | + @test !in(D(x), vs) |
| 440 | + @test !in(D(y), vs) |
| 441 | + end |
| 442 | +end |
0 commit comments