Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/systems/unit_check.jl
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,11 @@ function _validate(terms::Vector, labels::Vector{String}; info::String = "")
valid
end

function _validate(ap::AnalysisPoint; info::String = "")
conn_eq = connect(ap.input, ap.outputs...)
return _validate(conn_eq.rhs, info=info)
end

function _validate(conn::Connection; info::String = "")
valid = true
syss = get_systems(conn)
Expand Down Expand Up @@ -277,7 +282,7 @@ function validate(jumps::Vector{JumpType}, t::Symbolic)
end

function validate(eq::Union{Inequality, Equation}; info::String = "")
if typeof(eq.lhs) == Connection
if typeof(eq.lhs) <: Union{Connection, AnalysisPoint}
_validate(eq.rhs; info)
else
_validate([eq.lhs, eq.rhs], ["left", "right"]; info)
Expand Down
9 changes: 7 additions & 2 deletions src/systems/validation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module UnitfulUnitCheck

using ..ModelingToolkit, Symbolics, SciMLBase, Unitful, RecursiveArrayTools
using ..ModelingToolkit: ValidationError,
ModelingToolkit, Connection, instream, JumpType, VariableUnit,
ModelingToolkit, Connection, instream, JumpType, VariableUnit, AnalysisPoint,
get_systems,
Conditional, Comparison
using JumpProcesses: MassActionJump, ConstantRateJump, VariableRateJump
Expand Down Expand Up @@ -182,6 +182,11 @@ function _validate(terms::Vector, labels::Vector{String}; info::String = "")
valid
end

function _validate(ap::AnalysisPoint; info::String = "")
conn_eq = connect(ap.input, ap.outputs...)
return _validate(conn_eq.rhs, info=info)
end

function _validate(conn::Connection; info::String = "")
valid = true
syss = get_systems(conn)
Expand Down Expand Up @@ -242,7 +247,7 @@ function validate(jumps::Vector{JumpType}, t::Symbolic)
end

function validate(eq::MT.Equation; info::String = "")
if typeof(eq.lhs) == Connection
if typeof(eq.lhs) <: Union{AnalysisPoint, Connection}
_validate(eq.rhs; info)
else
_validate([eq.lhs, eq.rhs], ["left", "right"]; info)
Expand Down
64 changes: 64 additions & 0 deletions test/analysis_points.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,70 @@ using ModelingToolkit: t_nounits as t, D_nounits as D, AnalysisPoint, AbstractSy
import ModelingToolkit as MTK
import ControlSystemsBase as CS
using Symbolics: NAMESPACE_SEPARATOR
using Unitful

@testset "AnalysisPoint is ignored when verifying units" begin
# no units first
@mtkmodel FirstOrderTest begin
@components begin
in = Blocks.Step()
fb = Blocks.Feedback()
fo = Blocks.SecondOrder(k = 1, w = 1, d = 0.1)
end
@equations begin
connect(in.output, :u, fb.input1)
connect(fb.output, :e, fo.input)
connect(fo.output, :y, fb.input2)
end
end
@named model = FirstOrderTest()
@test model isa System

@connector function UnitfulOutput(; name)
vars = @variables begin
u(t), [unit=u"m", output=true]
end
return System(Equation[], t, vars, []; name)
end
@connector function UnitfulInput(; name)
vars = @variables begin
u(t), [unit=u"m", input=true]
end
return System(Equation[], t, vars, []; name)
end
@component function UnitfulBlock(; name)
pars = @parameters begin
offset, [unit=u"m"]
start_time
height, [unit=u"m"]
duration
end
systems = @named begin
output = UnitfulOutput()
end
eqs = [
output.u ~ offset + height*(0.5 + (1/pi)*atan(1e5*(t - start_time)))
]
return System(eqs, t, [], pars; systems, name)
end
@mtkmodel MySquare begin
@components begin
input = UnitfulInput()
end
@variables begin
output(t), [output=true, unit=u"m^2"]
end
@components begin
ub = UnitfulBlock()
end
@equations begin
connect(ub.output, :ap, input)
output ~ input.u^2
end
end
@named sq = MySquare()
@test sq isa System
end

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