Skip to content

Commit ee7aa39

Browse files
Merge pull request #16 from tshort/unitful
Switch from SIUnits to Unitful
2 parents 581e606 + 325ab38 commit ee7aa39

File tree

9 files changed

+40
-50
lines changed

9 files changed

+40
-50
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ The version released now is partial since certain prototype functionalities need
9292
### Enhance and refactor prototype codes for:
9393

9494
- Alias handling
95-
- Unit handling (change to use Unitful.jl instead of SIUnits.jl)
9695
- Handle overdetermined equations
9796
- Introduction of partial and block attribute to models
9897
- Automatic state selection

REQUIRE

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
julia 0.6
22
ModiaMath
3-
SIUnits
43
Unitful

src/language/Execution.jl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ import ..Instantiation: Symbolic, Der, Instance, AbstractDict, VariableDict, Var
1818
import ..Instantiation: Variability, constant, parameter, discrete, continuous
1919

2020
import ModiaMath #0.7
21-
using SIUnits
22-
using SIUnits.ShortUnits
23-
import Unitful
21+
using Unitful
2422
using ..ModiaLogging
2523

2624
const PrintJSONsolved = false
@@ -134,7 +132,7 @@ function code_eliminated_func(fname, unpack, eliminated_computations, vars, x::S
134132
T, dims = var.typ, get_dims(var)
135133
# if T == A; T = Float64; end
136134
# if T != Any || T != Float64; T = Any; end # Hack to handle units
137-
if typeof(T) <: SIUnits.SIUnit; T = Float64; end # To handle units
135+
if typeof(T) <: Unitful.Unitlike; T = Float64; end # To handle units
138136
# @show T, string(var)
139137

140138
if !isempty(dims); T = Array{T,length(dims)}; end
@@ -831,4 +829,4 @@ function makeJSON(ex::Expr)
831829
end
832830
end
833831

834-
end
832+
end

src/language/Instantiation.jl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ using DataStructures.OrderedDict
2929
end
3030

3131
import ModiaMath #0.7
32-
using SIUnits
33-
using SIUnits.ShortUnits
34-
import Unitful
32+
using Unitful
3533
using ..ModiaLogging
3634
#using ..Synchronous
3735

@@ -52,7 +50,7 @@ mutable struct Variable # {T,n}
5250
typ
5351
size
5452
value # ::T
55-
unit::SIUnits.SIUnit
53+
unit::Unitful.Unitlike
5654
displayUnit
5755
min
5856
max
@@ -67,7 +65,7 @@ end
6765
# The variability, type and info are added as attributes in the type for uniform treatment.
6866
# Input/output, etc should also be added.
6967

70-
Variable(;value=nothing, info="", unit=if typeof(value) <: SIUnits.SIQuantity; SIUnits.unit(value) else SIPrefix end,
68+
Variable(;value=nothing, info="", unit=if typeof(value) <: Unitful.Quantity; Unitful.unit(value) else Unitful.NoUnits end,
7169
displayUnit=unit,
7270
min=nothing, max=nothing, start=nothing, fixed::Bool=false, nominal=nothing,
7371
variability=continuous, T=if value==nothing; Any else typeof(value) end, size=if value==nothing; nothing else Base.size(value) end, flow::Bool=false, state::Bool=true, property=general) =
@@ -99,7 +97,7 @@ function Base.show(io::IO, v::Variable)
9997
print(io, "start = ", v.start)
10098
first = false
10199
end
102-
if v.unit != SIPrefix
100+
if v.unit != NoUnits
103101
if ! first; print(io, ", ") end
104102
print(io, "unit = ", v.unit)
105103
first = false
@@ -1005,4 +1003,4 @@ function prettyPrint(e::Expr)
10051003
end
10061004

10071005

1008-
end
1006+
end

src/models/Electric.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ module Electric
1111
using ..Instantiation
1212
using ..Blocks
1313
using ..Synchronous: positive
14-
using SIUnits
14+
using Unitful
1515

1616
using Modia
1717

1818
export Pin, Ground, OnePort, Resistor, Capacitor, Inductor,
1919
ConstantVoltage, StepVoltage, SignalVoltage, SineVoltage, IdealOpAmp3Pin, IdealDiode,
2020
Voltage, Current, Resistance, Capacitance
2121

22-
Voltage(; args...) = Variable(;T=Volt, size=(), start=0.0, args...)
23-
Current(; args...) = Variable(;T=Ampere, size=(), start=0.0, args...)
24-
Resistance(; args...) = Variable(;T=Ohm, size=(), args...)
25-
Capacitance(; args...) = Variable(;T=Farad, size=(), args...)
22+
Voltage(; args...) = Variable(;T=Unitful.V, size=(), start=0.0, args...)
23+
Current(; args...) = Variable(;T=Unitful.A, size=(), start=0.0, args...)
24+
Resistance(; args...) = Variable(;T=Unitful.Ω, size=(), args...)
25+
Capacitance(; args...) = Variable(;T=Unitful.F, size=(), args...)
2626

2727
@model Pin1 begin
2828
v=Float()
@@ -127,7 +127,7 @@ end
127127
end
128128

129129
@model ConstantVoltage begin
130-
V=1*Volt
130+
V=1u"V"
131131
@extends OnePort()
132132
@inherits v
133133
@equations begin
@@ -136,7 +136,7 @@ end
136136
end
137137

138138
@model StepVoltage begin
139-
V=1*Volt
139+
V=1u"V"
140140
startTime = 0*Seconds
141141
t = Var(start=0.0)
142142
@extends OnePort()
@@ -257,4 +257,4 @@ end
257257
end
258258
end
259259

260-
end
260+
end

src/models/ModiaBase.jl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,31 @@
33
using .Instantiation
44
using .ModelElaboration
55

6-
using SIUnits
7-
using SIUnits.ShortUnits
6+
using Unitful
87
using .StructuralTransform
98
using .Synchronous: sample, Clock, previous, hold, positive, positiveChange, positiveEdge
109

1110
Var(; args...) = Variable(; args...)
1211

13-
Float(value=nothing; info="", size=nothing, unit=SIPrefix, displayUnit=SIPrefix,
12+
Float(value=nothing; info="", size=nothing, unit=NoUnits, displayUnit=NoUnits,
1413
min=nothing, max=nothing, start=nothing, fixed::Bool=false, nominal=nothing,
1514
variability=continuous,
1615
flow::Bool=false, state::Bool=true) = Variable(variability, Float64, size, value,
1716
unit, displayUnit, min, max, start, fixed, nominal, info, flow, state, general)
1817

19-
Boolean(value=nothing; info="", size=nothing, unit=SIPrefix, displayUnit=SIPrefix,
18+
Boolean(value=nothing; info="", size=nothing, unit=NoUnits, displayUnit=NoUnits,
2019
min=nothing, max=nothing, start=nothing, fixed::Bool=false, nominal=nothing,
2120
variability=continuous,
2221
flow::Bool=false, state::Bool=true) = Variable(variability, Bool, size, value,
2322
unit, displayUnit, min, max, start, fixed, nominal, info, flow, state, general)
2423

25-
Integ(value=nothing; info="", size=nothing, unit=SIPrefix, displayUnit=SIPrefix,
24+
Integ(value=nothing; info="", size=nothing, unit=NoUnits, displayUnit=NoUnits,
2625
min=nothing, max=nothing, start=nothing, fixed::Bool=false, nominal=nothing,
2726
variability=continuous,
2827
flow::Bool=false, state::Bool=true) = Variable(variability, Int, size, value,
2928
unit, displayUnit, min, max, start, fixed, nominal, info, flow, state, general)
3029

31-
Str(value=nothing; info="", size=nothing, unit=SIPrefix, displayUnit=SIPrefix,
30+
Str(value=nothing; info="", size=nothing, unit=NoUnits, displayUnit=NoUnits,
3231
min=nothing, max=nothing, start=nothing, fixed::Bool=false, nominal=nothing,
3332
variability=continuous,
3433
flow::Bool=false, state::Bool=true) = Variable(variability, String, size, value,
@@ -56,4 +55,4 @@ Par(value; args...) = Variable(variability=parameter, value=value; args...)
5655

5756
const undefined=nothing
5857

59-
#end
58+
#end

src/symbolic/DAEquations/SymbolicTransform.jl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ using ..Instantiation
1919
import ..Instantiation: GetField, This, Der, Symbolic, time_global, simulationModel_symbol
2020
using Base.Meta: quot, isexpr
2121
using DataStructures
22-
using SIUnits
23-
using SIUnits.ShortUnits
24-
using SIUnits.SIQuantity
22+
using Unitful
2523
using ..Synchronous
2624
using ..BLTandPantelidesUtilities
2725
#using ..Utilities
@@ -145,7 +143,7 @@ function getincidence(e)
145143
# @show e typeof(e)
146144
if isa(e, Function)
147145
incidence = [e in operators ? nothing : e]
148-
elseif typeof(e) <: SIUnits.SIQuantity
146+
elseif typeof(e) <: Unitful.Quantity
149147
# dump(e)
150148
incidence = nothing
151149
elseif typeof(e) == Instantiation.GetField
@@ -512,10 +510,10 @@ end
512510
# diff = if ! derAsFunction; :($zero*$e) else zero*e end
513511
diff = if ! derAsFunction; :($zero) else zero*e end
514512
if ! noUnits
515-
diff = diff / SIUnits.Second
513+
diff = diff / Unitful.s
516514
end
517-
elseif typeof(e) <: SIUnits.SIQuantity || typeof(e) <: SIUnits.SIUnit
518-
diff = zero*e / SIUnits.Second
515+
elseif typeof(e) <: Unitful.Quantity || typeof(e) <: Unitful.Unitlike
516+
diff = zero*e / Unitful.s
519517
elseif typeof(e) in [Array{Float64}, Array{Int64}]
520518
# diff = :($zero*$e) # zero*e
521519
diff = :($zero) # zero*e
@@ -541,12 +539,12 @@ end
541539
# dump(e)
542540
i = findfirst(realStates, e)
543541
if i > 0
544-
diff = Der(e) # / SIUnits.Second
542+
diff = Der(e) # / Unitful.s
545543
# @show realStates i e diff
546544
else
547545
# diff = GetField(This(), Symbol("DER("*string(e.name)*")"))
548546
# dummyDerivatives[Symbol("DER("*string(e.name)*")")] = nothing
549-
diff = GetField(This(), Symbol("der_"*string(e.name))) # / SIUnits.Second # With units
547+
diff = GetField(This(), Symbol("der_"*string(e.name))) # / Unitful.s # With units
550548
dummyDerivatives[Symbol("der_"*string(e.name))] = nothing
551549
if logDifferentiateVariable
552550
println(" Dummy derivative: ", diff)
@@ -565,7 +563,7 @@ end
565563
if true
566564
diff = GetField(This(), Symbol("der_der_"*string(e.base.name)))
567565
if ! noUnits
568-
diff = diff / SIUnits.Second
566+
diff = diff / Unitful.s
569567
end
570568
dummyDerivatives[Symbol("der_der_"*string(e.base.name))] = nothing
571569
elseif e.base.name == Symbol("j.s") # Hack!!!
@@ -1094,4 +1092,4 @@ function newDifferentiateEquations(equations, variables, A, B, ESorted, ESolved)
10941092
end
10951093

10961094
end
1097-
1095+

src/symbolic/Utilities.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module Utilities
1212
using ..Instantiation: GetField, Der, InitVariable, Extends, Instance, Variable, Variability, constant, parameter, discrete, continuous, Connect, vars_of
1313
using ..Execution: split_variables
1414
using Base.Meta: quot, isexpr
15-
using SIUnits
15+
using Unitful
1616
using ..Instantiation
1717

1818
using ..ModiaLogging
@@ -132,7 +132,7 @@ function showVariable(v)
132132
logModia("start = ", v.start)
133133
first = false
134134
end
135-
if v.unit != SIPrefix
135+
if v.unit != NoUnits
136136
if ! first; logModia(", ") end
137137
logModia("unit = ", v.unit)
138138
first = false
@@ -342,4 +342,4 @@ function printJSON(file, inst::Instance, fullName, name, parent="", indent="", l
342342
end
343343

344344

345-
end
345+
end

test/models/TestVariableTypes.jl

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ using Modia
99
using ModiaMath.plot
1010
#using FixedSizeArrays
1111
using StaticArrays
12-
using SIUnits
1312
using Unitful
1413
using Unitful.DefaultSymbols
1514
import Unitful:
@@ -40,7 +39,7 @@ Float3x3(;args...) = Variable(T=Float64, size=(3,3); args...)
4039
FixedFloat3(;args...) = Variable(T=Vec{3,Float64}; args...)
4140
FixedFloat3x3(;args...) = Variable(T=Mat{3,3,Float64}; args...)
4241

43-
Voltage(; args...) = Variable(T=Volt; args...)
42+
Voltage(; args...) = Variable(T=Unitful.V; args...)
4443

4544
#Real = (;args...)->Variable(typ=Float64; args...)
4645

@@ -137,7 +136,7 @@ println()
137136

138137
v4 = [1,2,3]
139138
v5 = [1,2,3]
140-
v6 = 10.0Volt
139+
v6 = 10.0u"V"
141140
end
142141
end
143142

@@ -161,8 +160,8 @@ println("Variable(T=Array{Float64,1}; args...) does not work with storeEliminate
161160
l = 2u"m" + 30cm + 55.7mm # + 2m not possible due to variable m
162161
@equations begin
163162
# SIunits
164-
v1 = 10.0Meter
165-
v2 = 5.5Volt
163+
v1 = 10.0u"m"
164+
v2 = 5.5u"V"
166165
# Unitful
167166
v3 = 1u"kg" + 2u"g" + 10*sin(2*time)*u"hg"
168167
# der(v3) = 1.0u"kg/s" # Differential equations with units are not handled yet
@@ -172,7 +171,7 @@ println("Variable(T=Array{Float64,1}; args...) does not work with storeEliminate
172171
end
173172

174173
result = simulate(TestVariableUnits1, 1)
175-
#result = checkSimulation(TestVariableUnits1, 1, "v1", 10Meter)
174+
#result = checkSimulation(TestVariableUnits1, 1, "v1", 10u"m")
176175
@show result["v2"][end]
177176
@show result["v3"][end]
178177
@show result["v4"][end]
@@ -188,4 +187,4 @@ plot(result, ("v3", "v4", "a"), figure=1)
188187

189188
end
190189

191-
end
190+
end

0 commit comments

Comments
 (0)