Skip to content

Commit 4500270

Browse files
authored
Merge branch 'main' into bgc/negative_pressure
2 parents e2f869e + a63c15f commit 4500270

File tree

6 files changed

+80
-39
lines changed

6 files changed

+80
-39
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ModelingToolkitStandardLibrary"
22
uuid = "16a59e39-deab-5bd0-87e4-056b12336739"
33
authors = ["Chris Rackauckas and Julia Computing"]
4-
version = "1.15.0"
4+
version = "1.17.0"
55

66
[deps]
77
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"

docs/make.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Documenter, ModelingToolkitStandardLibrary
2+
using ModelingToolkit
23
using ModelingToolkitStandardLibrary.Blocks
34
using ModelingToolkitStandardLibrary.Mechanical
45
using ModelingToolkitStandardLibrary.Mechanical.Rotational
@@ -26,7 +27,8 @@ makedocs(sitename = "ModelingToolkitStandardLibrary.jl",
2627
:doctest,
2728
:example_block,
2829
],
29-
modules = [ModelingToolkitStandardLibrary,
30+
modules = [ModelingToolkit,
31+
ModelingToolkitStandardLibrary,
3032
ModelingToolkitStandardLibrary.Blocks,
3133
ModelingToolkitStandardLibrary.Mechanical,
3234
ModelingToolkitStandardLibrary.Mechanical.Rotational,

docs/src/API/linear_analysis.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,7 @@ Pages = ["Blocks/analysis_points.jl"]
148148
Order = [:function, :type]
149149
Private = false
150150
```
151+
152+
```@docs
153+
ModelingToolkit.linearize
154+
```

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)

test/multi_domain.jl

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,20 @@ D = Differential(t)
5757
])
5858
sys = structural_simplify(model)
5959

60-
@test_broken prob = ODAEProblem(sys, Pair[], (0, 6.0))
61-
@test_skip begin
62-
sol = solve(prob, Rodas4())
63-
@test sol.retcode == Success
64-
# EMF equations
65-
@test -0.5 .* sol[emf.i] == sol[emf.flange.tau]
66-
@test sol[emf.v] == 0.5 .* sol[emf.w]
67-
# test steady-state values
68-
dc_gain = [f/(k^2 + f * R) k/(k^2 + f * R); k/(k^2 + f * R) -R/(k^2 + f * R)]
69-
idx_t = findfirst(sol.t .> 2.5)
70-
@test sol[inertia.w][idx_t](dc_gain * [V_step; 0])[2] rtol=1e-3
71-
@test sol[emf.i][idx_t](dc_gain * [V_step; 0])[1] rtol=1e-3
72-
idx_t = findfirst(sol.t .> 5.5)
73-
@test sol[inertia.w][idx_t](dc_gain * [V_step; -tau_L_step])[2] rtol=1e-3
74-
@test sol[emf.i][idx_t](dc_gain * [V_step; -tau_L_step])[1] rtol=1e-3
75-
end
60+
prob = ODEProblem(sys, [], (0, 6.0))
61+
sol = solve(prob, Rodas4())
62+
@test sol.retcode == Success
63+
# EMF equations
64+
@test -0.5 .* sol[emf.i] == sol[emf.flange.tau]
65+
@test sol[emf.v] == 0.5 .* sol[emf.w]
66+
# test steady-state values
67+
dc_gain = [f/(k^2 + f * R) k/(k^2 + f * R); k/(k^2 + f * R) -R/(k^2 + f * R)]
68+
idx_t = findfirst(sol.t .> 2.5)
69+
@test sol[inertia.w][idx_t](dc_gain * [V_step; 0])[2] rtol=1e-3
70+
@test sol[emf.i][idx_t](dc_gain * [V_step; 0])[1] rtol=1e-3
71+
idx_t = findfirst(sol.t .> 5.5)
72+
@test sol[inertia.w][idx_t](dc_gain * [V_step; -tau_L_step])[2] rtol=1e-3
73+
@test sol[emf.i][idx_t](dc_gain * [V_step; -tau_L_step])[1] rtol=1e-3
7674

7775
prob = DAEProblem(sys, D.(states(sys)) .=> 0.0, Pair[], (0, 6.0))
7876
sol = solve(prob, DFBDF())
@@ -144,27 +142,24 @@ end
144142
])
145143
sys = structural_simplify(model)
146144

147-
@test_broken prob = ODAEProblem(sys, Pair[], (0, 6.0)) # KeyError: key 17 not found
148-
@test_skip begin
149-
sol = solve(prob, Rodas4())
150-
151-
@test sol.retcode == Success
152-
# EMF equations
153-
@test -0.5 .* sol[emf.i] == sol[emf.flange.tau]
154-
@test sol[emf.v] == 0.5 .* sol[emf.w]
155-
156-
# test steady-state values
157-
dc_gain = [f/(k^2 + f * R) k/(k^2 + f * R); k/(k^2 + f * R) -R/(k^2 + f * R)]
158-
idx_t = findfirst(sol.t .> 2.5)
159-
@test sol[inertia.w][idx_t](dc_gain * [V_step; 0])[2] rtol=1e-3
160-
@test sol[emf.i][idx_t](dc_gain * [V_step; 0])[1] rtol=1e-3
161-
idx_t = findfirst(sol.t .> 5.5)
162-
@test sol[inertia.w][idx_t](dc_gain * [V_step; -tau_L_step])[2] rtol=1e-3
163-
@test sol[emf.i][idx_t](dc_gain * [V_step; -tau_L_step])[1] rtol=1e-3
164-
165-
#
166-
@test all(sol[inertia.w] .== sol[speed_sensor.w.u])
167-
end
145+
prob = ODEProblem(sys, Pair[], (0, 6.0))
146+
sol = solve(prob, Rodas4())
147+
148+
@test sol.retcode == Success
149+
# EMF equations
150+
@test -0.5 .* sol[emf.i] == sol[emf.flange.tau]
151+
@test sol[emf.v] == 0.5 .* sol[emf.w]
152+
153+
# test steady-state values
154+
dc_gain = [f/(k^2 + f * R) k/(k^2 + f * R); k/(k^2 + f * R) -R/(k^2 + f * R)]
155+
idx_t = findfirst(sol.t .> 2.5)
156+
@test sol[inertia.w][idx_t](dc_gain * [V_step; 0])[2] rtol=1e-3
157+
@test sol[emf.i][idx_t](dc_gain * [V_step; 0])[1] rtol=1e-3
158+
idx_t = findfirst(sol.t .> 5.5)
159+
@test sol[inertia.w][idx_t](dc_gain * [V_step; -tau_L_step])[2] rtol=1e-3
160+
@test sol[emf.i][idx_t](dc_gain * [V_step; -tau_L_step])[1] rtol=1e-3
161+
162+
@test all(sol[inertia.w] .== sol[speed_sensor.w.u])
168163

169164
prob = DAEProblem(sys, D.(states(sys)) .=> 0.0, Pair[], (0, 6.0))
170165
sol = solve(prob, DFBDF())

0 commit comments

Comments
 (0)