Skip to content

Commit 4d7372a

Browse files
committed
Duplicating logic where necessary, adding tests.
1 parent f15b38b commit 4d7372a

File tree

3 files changed

+73
-4
lines changed

3 files changed

+73
-4
lines changed

src/systems/unit_check.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,8 @@ function _validate(terms::Vector, labels::Vector{String}; info::String = "")
214214
end
215215

216216
function _validate(ap::AnalysisPoint; info::String = "")
217-
conn_eq = connect(ap.input, ap.outputs)
218-
return _validate(conn_eq, info=info)
217+
conn_eq = connect(ap.input, ap.outputs...)
218+
return _validate(conn_eq.rhs, info=info)
219219
end
220220

221221
function _validate(conn::Connection; info::String = "")

src/systems/validation.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module UnitfulUnitCheck
22

33
using ..ModelingToolkit, Symbolics, SciMLBase, Unitful, RecursiveArrayTools
44
using ..ModelingToolkit: ValidationError,
5-
ModelingToolkit, Connection, instream, JumpType, VariableUnit,
5+
ModelingToolkit, Connection, instream, JumpType, VariableUnit, AnalysisPoint,
66
get_systems,
77
Conditional, Comparison
88
using JumpProcesses: MassActionJump, ConstantRateJump, VariableRateJump
@@ -182,6 +182,11 @@ function _validate(terms::Vector, labels::Vector{String}; info::String = "")
182182
valid
183183
end
184184

185+
function _validate(ap::AnalysisPoint; info::String = "")
186+
conn_eq = connect(ap.input, ap.outputs...)
187+
return _validate(conn_eq.rhs, info=info)
188+
end
189+
185190
function _validate(conn::Connection; info::String = "")
186191
valid = true
187192
syss = get_systems(conn)
@@ -242,7 +247,7 @@ function validate(jumps::Vector{JumpType}, t::Symbolic)
242247
end
243248

244249
function validate(eq::MT.Equation; info::String = "")
245-
if typeof(eq.lhs) == Connection
250+
if typeof(eq.lhs) <: Union{AnalysisPoint, Connection}
246251
_validate(eq.rhs; info)
247252
else
248253
_validate([eq.lhs, eq.rhs], ["left", "right"]; info)

test/analysis_points.jl

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,70 @@ using ModelingToolkit: t_nounits as t, D_nounits as D, AnalysisPoint, AbstractSy
77
import ModelingToolkit as MTK
88
import ControlSystemsBase as CS
99
using Symbolics: NAMESPACE_SEPARATOR
10+
using Unitful
11+
12+
@testset "AnalysisPoint is ignored when verifying units" begin
13+
# no units first
14+
@mtkmodel FirstOrderTest begin
15+
@components begin
16+
in = Blocks.Step()
17+
fb = Blocks.Feedback()
18+
fo = Blocks.SecondOrder(k = 1, w = 1, d = 0.1)
19+
end
20+
@equations begin
21+
connect(in.output, :u, fb.input1)
22+
connect(fb.output, :e, fo.input)
23+
connect(fo.output, :y, fb.input2)
24+
end
25+
end
26+
@named model = FirstOrderTest()
27+
@test model isa System
28+
29+
@connector function UnitfulOutput(; name)
30+
vars = @variables begin
31+
u(t), [unit=u"m", output=true]
32+
end
33+
return System(Equation[], t, vars, []; name)
34+
end
35+
@connector function UnitfulInput(; name)
36+
vars = @variables begin
37+
u(t), [unit=u"m", input=true]
38+
end
39+
return System(Equation[], t, vars, []; name)
40+
end
41+
@component function UnitfulBlock(; name)
42+
pars = @parameters begin
43+
offset, [unit=u"m"]
44+
start_time
45+
height, [unit=u"m"]
46+
duration
47+
end
48+
systems = @named begin
49+
output = UnitfulOutput()
50+
end
51+
eqs = [
52+
output.u ~ offset + height*(0.5 + (1/pi)*atan(1e5*(t - start_time)))
53+
]
54+
return System(eqs, t, [], pars; systems, name)
55+
end
56+
@mtkmodel MySquare begin
57+
@components begin
58+
input = UnitfulInput()
59+
end
60+
@variables begin
61+
output(t), [output=true, unit=u"m^2"]
62+
end
63+
@components begin
64+
ub = UnitfulBlock()
65+
end
66+
@equations begin
67+
connect(ub.output, :ap, input)
68+
output ~ input.u^2
69+
end
70+
end
71+
@named sq = MySquare()
72+
@test sq isa System
73+
end
1074

1175
@testset "AnalysisPoint is lowered to `connect`" begin
1276
@named P = FirstOrder(k = 1, T = 1)

0 commit comments

Comments
 (0)