Skip to content

Commit 59943b5

Browse files
committed
Merge remote-tracking branch 'origin' into add_init
bring inferreddiscrete
2 parents 09db732 + 0d9fde4 commit 59943b5

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

docs/Project.toml

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ DataInterpolations = "6.5"
3333
Distributions = "0.25"
3434
Documenter = "1"
3535
DynamicQuantities = "^0.11.2, 0.12, 1"
36+
FMI = "0.14"
37+
FMIZoo = "1"
3638
ModelingToolkit = "8.33, 9"
3739
ModelingToolkitStandardLibrary = "2.19"
3840
NonlinearSolve = "3, 4"

src/discretedomain.jl

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ $(TYPEDEF)
8585
Represents a sample operator. A discrete-time signal is created by sampling a continuous-time signal.
8686
8787
# Constructors
88-
`Sample(clock::Union{TimeDomain, InferredTimeDomain} = InferredDiscrete)`
88+
`Sample(clock::Union{TimeDomain, InferredTimeDomain} = InferredDiscrete())`
8989
`Sample(dt::Real)`
9090
9191
`Sample(x::Num)`, with a single argument, is shorthand for `Sample()(x)`.
@@ -106,7 +106,7 @@ julia> Δ = Sample(0.01)
106106
"""
107107
struct Sample <: Operator
108108
clock::Any
109-
Sample(clock::Union{TimeDomain, InferredTimeDomain} = InferredDiscrete) = new(clock)
109+
Sample(clock::Union{TimeDomain, InferredTimeDomain} = InferredDiscrete()) = new(clock)
110110
end
111111

112112
function Sample(arg::Real)
@@ -190,7 +190,7 @@ struct ShiftIndex
190190
clock::Union{InferredTimeDomain, TimeDomain, IntegerSequence}
191191
steps::Int
192192
function ShiftIndex(
193-
clock::Union{TimeDomain, InferredTimeDomain, IntegerSequence} = Inferred, steps::Int = 0)
193+
clock::Union{TimeDomain, InferredTimeDomain, IntegerSequence} = Inferred(), steps::Int = 0)
194194
new(clock, steps)
195195
end
196196
ShiftIndex(dt::Real, steps::Int = 0) = new(Clock(dt), steps)
@@ -254,7 +254,7 @@ function input_timedomain(h::Hold, arg = nothing)
254254
if has_time_domain(arg)
255255
return get_time_domain(arg)
256256
end
257-
InferredDiscrete # the Hold accepts any discrete
257+
InferredDiscrete() # the Hold accepts any discrete
258258
end
259259
output_timedomain(::Hold, _ = nothing) = ContinuousClock()
260260

src/systems/nonlinear/nonlinearsystem.jl

+6
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ function NonlinearSystem(eqs; kwargs...)
219219
push!(new_ps, p)
220220
end
221221
else
222+
if symbolic_type(p) == ArraySymbolic() &&
223+
Symbolics.shape(unwrap(p)) != Symbolics.Unknown()
224+
for i in eachindex(p)
225+
delete!(new_ps, p[i])
226+
end
227+
end
222228
push!(new_ps, p)
223229
end
224230
end

test/nonlinearsystem.jl

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using DiffEqBase, SparseArrays
44
using Test
55
using NonlinearSolve
66
using ForwardDiff
7+
using SymbolicIndexingInterface
78
using ModelingToolkit: value
89
using ModelingToolkit: get_default_or_guess, MTKParameters
910

@@ -380,3 +381,12 @@ end
380381
@test_throws ["single equation", "unknown"] IntervalNonlinearFunctionExpr(
381382
sys, (0.0, 1.0))
382383
end
384+
385+
@testset "Vector parameter used unscalarized and partially scalarized" begin
386+
@variables x y
387+
@parameters p[1:2] (f::Function)(..)
388+
389+
@mtkbuild sys = NonlinearSystem([x^2 - p[1]^2 ~ 0, y^2 ~ f(p)])
390+
@test !any(isequal(p[1]), parameters(sys))
391+
@test is_parameter(sys, p)
392+
end

test/scc_nonlinear_problem.jl

+9
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,12 @@ end
282282
sccprob = SCCNonlinearProblem(fullsys, u0, p)
283283
@test isequal(parameters(fullsys), parameters(sccprob.f.sys))
284284
end
285+
286+
@testset "Vector parameters in function arguments" begin
287+
@variables x y
288+
@parameters p[1:2] (f::Function)(..)
289+
290+
@mtkbuild sys = NonlinearSystem([x^2 - p[1]^2 ~ 0, y^2 ~ f(p)])
291+
prob = SCCNonlinearProblem(sys, [x => 1.0, y => 1.0], [p => ones(2), f => sum])
292+
@test_nowarn solve(prob, NewtonRaphson())
293+
end

0 commit comments

Comments
 (0)