Skip to content

Commit de40dfb

Browse files
Brad Carmanstaticfloat
authored andcommitted
adds Free component
1 parent c1ee7fd commit de40dfb

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/Mechanical/Translational/components.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
"""
2+
Free(; name)
3+
4+
Use to close a system that has un-connected `MechanicalPort`'s.
5+
6+
# Connectors:
7+
8+
- `flange`: 1-dim. translational flange
9+
"""
10+
@component function Free(; name)
11+
@named flange = MechanicalPort()
12+
vars = []
13+
eqs = [
14+
flange.f ~ 0,
15+
]
16+
return compose(ODESystem(eqs, t, vars, []; name, defaults = [flange.v => 0]),
17+
flange)
18+
end
19+
120
"""
221
Fixed(;name)
322

test/Mechanical/translational.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,27 @@ import ModelingToolkitStandardLibrary.Mechanical.TranslationalPosition as TP
77
@parameters t
88
D = Differential(t)
99

10+
@testset "Free" begin
11+
function System(; name)
12+
systems = @named begin
13+
mass = TV.Mass(; m = 100, g = -10)
14+
free = TV.Free()
15+
end
16+
17+
eqs = [connect(mass.flange, free.flange)]
18+
19+
ODESystem(eqs, t, [], []; name, systems)
20+
end
21+
22+
@named system = System()
23+
s = complete(system)
24+
sys = structural_simplify(system)
25+
prob = ODEProblem(sys, [], (0, 0.1))
26+
sol = solve(prob, Rosenbrock23())
27+
28+
@test sol[s.mass.flange.v][end]-0.1 * 10 atol=1e-3
29+
end
30+
1031
@testset "spring damper mass fixed" begin
1132
@named dv = TV.Damper(d = 1, v_a_0 = 1)
1233
@named dp = TP.Damper(d = 1, v_a_0 = 1, s_a_0 = 3, s_b_0 = 1)

0 commit comments

Comments
 (0)