Skip to content

Commit 485eecc

Browse files
ven-kChrisRackauckas
authored andcommitted
refactor: Mechanical/TranslationalPosition with @mtkmodel
1 parent 700c781 commit 485eecc

File tree

4 files changed

+93
-101
lines changed

4 files changed

+93
-101
lines changed

src/Mechanical/TranslationalPosition/components.jl

+41-48
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@ Flange fixed in housing at a given position.
1111
1212
- `flange: 1-dim. translational flange`
1313
"""
14-
@component function Fixed(; name, s_0 = 0.0)
15-
pars = @parameters s_0 = s_0
16-
vars = []
17-
18-
@named flange = Flange()
19-
20-
eqs = [flange.s ~ s_0]
21-
22-
return compose(ODESystem(eqs, t, vars, pars; name = name, defaults = [flange.s => s_0]),
23-
flange)
14+
@mtkmodel Fixed begin#(; name, s_0 = 0.0)
15+
@parameters begin
16+
s_0
17+
end
18+
@components begin
19+
flange = Flange(; s = s_0)
20+
end
21+
@equations begin
22+
flange.s ~ s_0
23+
end
2424
end
2525

2626
"""
27-
Mass(; name, m, s_0 = 0.0, v_0 = 0.0)
27+
Mass(; name, m, s = 0.0, v = 0.0)
2828
2929
Sliding mass with inertia
3030
@@ -43,24 +43,24 @@ Sliding mass with inertia
4343
4444
- `flange: 1-dim. translational flange of mass`
4545
"""
46-
@component function Mass(; name, m, s_0 = 0.0, v_0 = 0.0)
47-
@named flange = Flange()
48-
pars = @parameters begin
49-
m = m
50-
s_0 = s_0
51-
v_0 = v_0
46+
@mtkmodel Mass begin
47+
@parameters begin
48+
m
5249
end
53-
vars = @variables begin
54-
s(t) = s_0
55-
v(t) = v_0
56-
f(t) = 0
50+
@variables begin
51+
s(t) = 0.0
52+
v(t) = 0.0
53+
f(t) = 0.0
5754
end
58-
eqs = [flange.s ~ s
55+
@components begin
56+
flange = Flange(; s = s)
57+
end
58+
@equations begin
59+
flange.s ~ s
5960
flange.f ~ f
6061
D(s) ~ v
61-
D(v) ~ f / m]
62-
return compose(ODESystem(eqs, t, vars, pars; name = name, defaults = [flange.s => s_0]),
63-
flange)
62+
D(v) ~ f / m
63+
end
6464
end
6565

6666
const REL = Val(:relative)
@@ -153,7 +153,7 @@ Spring(; name, k, s_a_0 = 0, s_b_0 = 0, l = 0) = Spring(ABS; name, k, s_a_0, s_b
153153
end
154154

155155
"""
156-
Damper(; name, d, v_a_0=0.0, v_b_0=0.0, s_a_0 = 0, s_b_0 = 0)
156+
Damper(; name, d, v1 =0.0, v2 = 0.0, flange_a.s = 0, flange_b.s = 0)
157157
158158
Linear 1D translational damper
159159
@@ -170,33 +170,26 @@ Linear 1D translational damper
170170
- `flange_a: 1-dim. translational flange on one side of damper`
171171
- `flange_b: 1-dim. translational flange on opposite side of damper`
172172
"""
173-
@component function Damper(; name, d, v_a_0 = 0.0, v_b_0 = 0.0, s_a_0 = 0, s_b_0 = 0)
174-
pars = @parameters begin
175-
d = d
176-
s_a_0 = s_a_0
177-
s_b_0 = s_b_0
178-
v_a_0 = v_a_0
179-
v_b_0 = v_b_0
173+
@mtkmodel Damper begin#(; name, d, v_a_0 = 0.0, v_b_0 = 0.0, s_a_0 = 0, s_b_0 = 0)
174+
@parameters begin
175+
d
180176
end
181-
vars = @variables begin
182-
v1(t) = v_a_0
183-
v2(t) = v_b_0
184-
f(t) = +(v_a_0 - v_b_0) * d
177+
@variables begin
178+
v1(t) = 0.0
179+
v2(t) = 0.0
180+
f(t) = +(v1 - v2) * d
185181
end
186182

187-
@named flange_a = Flange()
188-
@named flange_b = Flange()
183+
@components begin
184+
flange_a = Flange(; s = 0.0, f = (v1 - v2) * d)
185+
flange_b = Flange(; s = 0.0, f = -(v1 - v2) * d)
186+
end
189187

190-
eqs = [D(flange_a.s) ~ v1
188+
@equations begin
189+
D(flange_a.s) ~ v1
191190
D(flange_b.s) ~ v2
192191
f ~ (v1 - v2) * d
193192
flange_a.f ~ +f
194-
flange_b.f ~ -f]
195-
return compose(ODESystem(eqs, t, vars, pars; name = name,
196-
defaults = [
197-
flange_a.s => s_a_0,
198-
flange_b.s => s_b_0,
199-
flange_a.f => +(v_a_0 - v_b_0) * d,
200-
flange_b.f => -(v_a_0 - v_b_0) * d,
201-
]), flange_a, flange_b)
193+
flange_b.f ~ -f
194+
end
202195
end
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
"""
2-
Force(;name)
2+
Force(; name)
33
44
Input signal acting as external force on a flange
55
"""
6-
@component function Force(; name, use_support = false)
7-
@named partial_element = PartialElementaryOneFlangeAndSupport2(use_support = use_support)
8-
@unpack flange = partial_element
9-
@named f = RealInput() # Accelerating force acting at flange (= -flange.tau)
10-
eqs = [flange.f ~ -f.u]
11-
return extend(ODESystem(eqs, t, [], []; name = name, systems = [f]),
12-
partial_element)
6+
@mtkmodel Force begin
7+
@parameters begin
8+
use_support
9+
end
10+
@extend (flange,) = partial_element = PartialElementaryOneFlangeAndSupport2(use_support = use_support)
11+
@components begin
12+
f = RealInput() # Accelerating force acting at flange (= -flange.tau)
13+
end
14+
@equations begin
15+
flange.f ~ -f.u
16+
end
1317
end

src/Mechanical/TranslationalPosition/utils.jl

+34-39
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
@connector function Flange(; name)
2-
vars = @variables begin
3-
s(t)
4-
f(t), [connect = Flow]
5-
end
6-
ODESystem(Equation[], t, vars, [], name = name, defaults = Dict(f => 0.0))
1+
@connector Flange begin
2+
s(t)
3+
f(t), [connect = Flow]
74
end
85
Base.@doc """
96
Flange(;name)
@@ -15,12 +12,9 @@ Base.@doc """
1512
- `f`: [N] Cut force into the flange
1613
""" Flange
1714

18-
@connector function Support(; name)
19-
sts = @variables begin
20-
s(t)
21-
f(t), [connect = Flow]
22-
end
23-
ODESystem(Equation[], t, sts, [], name = name, defaults = Dict(s => 0.0, f => 0.0))
15+
@connector Support begin
16+
s(t)
17+
f(t), [connect = Flow]
2418
end
2519
Base.@doc """
2620
Support(;name)
@@ -37,31 +31,29 @@ Support/housing 1-dim. translational flange.
3731
3832
Partial model for the compliant connection of two translational 1-dim. flanges.
3933
40-
# Parameters:
41-
42-
- `s_rel_start`: [m] Initial relative distance between the flanges
43-
- `f_start`: [N] Initial force between flanges
44-
4534
# States:
4635
47-
- `s_rel`: [m] Relative distance (= flange_b.s - flange_a.s)
48-
- `f`: [N] Force between flanges (= flange_b.f)
36+
- `s_rel`: [m] Relative distance (= flange_b.s - flange_a.s). It accepts intial value and defaults to 0.0.
37+
- `f`: [N] Force between flanges (= flange_b.f). It accepts intial value and defaults to 0.0.
4938
"""
50-
@component function PartialCompliant(; name, s_rel_start = 0.0, f_start = 0.0)
51-
@named flange_a = Flange()
52-
@named flange_b = Flange()
53-
sts = @variables begin
54-
v_a(t) = 0
55-
v_b(t) = 0
56-
s_rel(t) = s_rel_start
57-
f(t) = f_start
39+
@mtkmodel PartialCompliant begin#(; name, s_rel_start = 0.0, f_start = 0.0)
40+
@components begin
41+
flange_a = Flange()
42+
flange_b = Flange()
43+
end
44+
@variables begin
45+
v_a(t) = 0.0
46+
v_b(t) = 0.0
47+
s_rel(t) = 0.0
48+
f(t) = 0.0
5849
end
59-
eqs = [D(flange_a.s) ~ v_a
50+
@equations begin
51+
D(flange_a.s) ~ v_a
6052
D(flange_b.s) ~ v_b
6153
D(s_rel) ~ v_b - v_a
6254
flange_b.f ~ +f
63-
flange_a.f ~ -f]
64-
return compose(ODESystem(eqs, t, sts, []; name = name), flange_a, flange_b)
55+
flange_a.f ~ -f
56+
end
6557
end
6658

6759
"""
@@ -83,17 +75,20 @@ Partial model for the compliant connection of two translational 1-dim. flanges.
8375
- `a_rel`: [m/s²] Relative linear acceleration (= der(v_rel))
8476
- `f`: [N] Force between flanges (= flange_b.f)
8577
"""
86-
@component function PartialCompliantWithRelativeStates(; name, delta_s_0 = 0.0)
87-
@named flange_a = Flange()
88-
@named flange_b = Flange()
89-
sts = @variables begin
90-
delta_s(t) = delta_s_0
91-
f(t) = 0
78+
@mtkmodel PartialCompliantWithRelativeStates begin
79+
@components begin
80+
flange_a = Flange()
81+
flange_b = Flange()
82+
end
83+
@variables begin
84+
delta_s(t) = 0.0
85+
f(t) = 0.0
9286
end
93-
eqs = [delta_s ~ flange_a.s - flange_b.s
87+
@equations begin
88+
delta_s ~ flange_a.s - flange_b.s
9489
flange_a.f ~ +f
95-
flange_b.f ~ -f]
96-
return compose(ODESystem(eqs, t, sts, []; name = name), flange_a, flange_b)
90+
flange_b.f ~ -f
91+
end
9792
end
9893

9994
"""

test/Mechanical/translational.jl

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ D = Differential(t)
3232
@test sol[s.free.f][end] 100 * 10
3333
end
3434

35-
@testset "spring damper mass fixed" begin
35+
@testset "Spring, Damper, Mass, Fixed" begin
3636
@named dv = TV.Damper(d = 1, flange_a.v = 1)
37-
@named dp = TP.Damper(d = 1, v_a_0 = 1, s_a_0 = 3, s_b_0 = 1)
37+
@named dp = TP.Damper(d = 1, v1 = 1, v2 = 0.0, flange_a.s = 3, flange_b.s = 1)
3838

3939
@named sv = TV.Spring(k = 1, v_a_0 = 1, delta_s_0 = 1)
4040
@named sp = TP.Spring(k = 1, s_a_0 = 3, s_b_0 = 1, l = 1)
4141

4242
@named bv = TV.Mass(m = 1, v_0 = 1)
43-
@named bp = TP.Mass(m = 1, v_0 = 1, s_0 = 3)
43+
@named bp = TP.Mass(m = 1, v = 1, s = 3)
4444

4545
@named gv = TV.Fixed()
4646
@named gp = TP.Fixed(s_0 = 1)
@@ -71,19 +71,19 @@ end
7171

7272
@testset "driven spring damper mass" begin
7373
@named dv = TV.Damper(d = 1, flange_a.v = 1)
74-
@named dp = TP.Damper(d = 1, v_a_0 = 1, s_a_0 = 3, s_b_0 = 1)
74+
@named dp = TP.Damper(d = 1, v1 = 1.0, v2 = 0.0, flange_a.s = 3, flange_b.s = 1)
7575

7676
@named sv = TV.Spring(k = 1, v_a_0 = 1, delta_s_0 = 1)
7777
@named sp = TP.Spring(k = 1, s_a_0 = 3, s_b_0 = 1, l = 1)
7878

7979
@named bv = TV.Mass(m = 1, v_0 = 1)
80-
@named bp = TP.Mass(m = 1, v_0 = 1, s_0 = 3)
80+
@named bp = TP.Mass(m = 1, v = 1, s = 3)
8181

8282
@named gv = TV.Fixed()
8383
@named gp = TP.Fixed(s_0 = 1)
8484

8585
@named fv = TV.Force()
86-
@named fp = TP.Force()
86+
@named fp = TP.Force(use_support = false)
8787

8888
@named source = Sine(frequency = 3, amplitude = 2)
8989

0 commit comments

Comments
 (0)