Skip to content

Commit

Permalink
Merge pull request #2998 from contradict/expression_unit_conversion
Browse files Browse the repository at this point in the history
Fix unit conversion for expressions
  • Loading branch information
ChrisRackauckas authored Aug 30, 2024
2 parents 4cb17cd + e078c1d commit 866c443
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/systems/model_parsing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,14 @@ function convert_units(varunits::Unitful.FreeUnits, value::AbstractArray{T}) whe
Unitful.ustrip.(varunits, value)
end

function convert_units(varunits::Unitful.FreeUnits, value::Num)
value
end

function convert_units(varunits::DynamicQuantities.Quantity, value::Num)
value
end

function parse_variable_arg(dict, mod, arg, varclass, kwargs, where_types)
vv, def, metadata_with_exprs = parse_variable_def!(
dict, mod, arg, varclass, kwargs, where_types)
Expand Down
18 changes: 18 additions & 0 deletions test/units.jl
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,21 @@ end

@variables x(t)
@test ModelingToolkit.get_unit(sin(x)) == ModelingToolkit.unitless

@mtkmodel ExpressionParametersTest begin
@parameters begin
v = 1.0, [unit = u"m/s"]
τ = 1.0, [unit = u"s"]
end
@components begin
pt = ParamTest(; a = v * τ)
end
end

@named sys = ExpressionParametersTest(; v = 2.0u"m/s", τ = 3.0u"s")
sys = complete(sys)
# TODO: Is there a way to evaluate this expression and compare to 6.0?
@test isequal(ModelingToolkit.getdefault(sys.pt.a), sys.v * sys.τ)
@test ModelingToolkit.getdefault(sys.v) 2.0
@test ModelingToolkit.getdefault(sys.τ) 3.0

0 comments on commit 866c443

Please sign in to comment.