Skip to content

Commit f63936c

Browse files
author
Brad Carman
committed
domain_connectors tests
1 parent abcc216 commit f63936c

File tree

3 files changed

+154
-1
lines changed

3 files changed

+154
-1
lines changed

test/domain_connectors.jl

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
using ModelingToolkit
2+
using Test
3+
using IfElse: ifelse
4+
5+
@parameters t
6+
D = Differential(t)
7+
8+
@connector function HydraulicPort(; p_int, name)
9+
pars = @parameters begin
10+
ρ
11+
β
12+
μ
13+
n
14+
let_gas
15+
ρ_gas
16+
p_gas
17+
end
18+
19+
vars = @variables begin
20+
p(t) = p_int
21+
dm(t), [connect = Flow]
22+
end
23+
24+
ODESystem(Equation[], t, vars, pars; name, defaults = [dm => 0])
25+
end
26+
27+
@connector function HydraulicFluid(;
28+
density = 997,
29+
bulk_modulus = 2.09e9,
30+
viscosity = 0.0010016,
31+
name)
32+
pars = @parameters begin
33+
ρ = density
34+
β = bulk_modulus
35+
μ = viscosity
36+
end
37+
38+
vars = @variables begin
39+
dm(t), [connect = Flow]
40+
end
41+
42+
eqs = [
43+
dm ~ 0,
44+
]
45+
46+
ODESystem(eqs, t, vars, pars; name, defaults = [dm => 0])
47+
end
48+
49+
function FixedPressure(; p, name)
50+
pars = @parameters begin
51+
p = p
52+
end
53+
54+
vars = []
55+
56+
systems = @named begin
57+
port = HydraulicPort(; p_int = p)
58+
end
59+
60+
eqs = [
61+
port.p ~ p,
62+
]
63+
64+
ODESystem(eqs, t, vars, pars; name, systems)
65+
end
66+
67+
function FixedVolume(; vol, p_int, name)
68+
pars = @parameters begin
69+
p_int = p_int
70+
vol = vol
71+
end
72+
73+
systems = @named begin
74+
port = HydraulicPort(; p_int)
75+
end
76+
77+
vars = @variables begin
78+
rho(t) = port.ρ
79+
drho(t) = 0
80+
end
81+
82+
# let
83+
dm = port.dm
84+
p = port.p
85+
86+
eqs = [D(rho) ~ drho
87+
rho ~ port.ρ * (1 + p / port.β)
88+
dm ~ drho * vol]
89+
90+
ODESystem(eqs, t, vars, pars; name, systems)
91+
end
92+
93+
function Valve2Port(; p_s_int, p_r_int, p_int, name)
94+
pars = @parameters begin
95+
p_s_int = p_s_int
96+
p_r_int = p_r_int
97+
p_int = p_int
98+
x_int = 0
99+
scale = 1.0
100+
101+
k = 0.1
102+
end
103+
104+
systems = @named begin
105+
HS = HydraulicPort(; p_int = p_s_int)
106+
HR = HydraulicPort(; p_int = p_r_int)
107+
port = HydraulicPort(; p_int)
108+
end
109+
110+
vars = @variables begin
111+
x(t) = x_int
112+
end
113+
114+
# let (flow) ---------
115+
Δp_s = HS.p - port.p
116+
Δp_r = port.p - HR.p
117+
118+
= abs(x / scale)
119+
Δp̃_s = abs(Δp_s)
120+
Δp̃_r = abs(Δp_r)
121+
122+
flow(Δp̃) = (k) * (Δp̃) * (x̃)
123+
124+
#
125+
eqs = [domain_connect(port, HS, HR)
126+
port.dm ~ -ifelse(x >= 0, +flow(Δp̃_s), -flow(Δp̃_r))
127+
HS.dm ~ ifelse(x >= 0, port.dm, 0)
128+
HR.dm ~ ifelse(x < 0, port.dm, 0)]
129+
130+
ODESystem(eqs, t, vars, pars; name, systems)
131+
end
132+
133+
function System(; name)
134+
vars = []
135+
pars = []
136+
systems = @named begin
137+
fluid = HydraulicFluid(; density = 500, bulk_modulus = 1e9, viscosity = 0.01)
138+
src = FixedPressure(; p = 200)
139+
rtn = FixedPressure(; p = 0)
140+
valve = Valve2Port(; p_s_int = 200, p_r_int = 0, p_int = 100)
141+
vol = FixedVolume(; vol = 0.1, p_int = 100)
142+
end
143+
eqs = [domain_connect(fluid, src.port)
144+
connect(src.port, valve.HS)
145+
connect(rtn.port, valve.HR)
146+
connect(vol.port, valve.port)
147+
valve.x ~ sin(2π * t * 10)]
148+
149+
return ODESystem(eqs, t, vars, pars; systems, name)
150+
end
151+
152+
@named odesys = System()

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ using SafeTestsets, Test
3232
@safetestset "State Selection Test" include("state_selection.jl")
3333
@safetestset "Symbolic Event Test" include("symbolic_events.jl")
3434
@safetestset "Stream Connnect Test" include("stream_connectors.jl")
35+
@safetestset "Domain Connnect Test" include("domain_connectors.jl")
3536
@safetestset "Lowering Integration Test" include("lowering_solving.jl")
3637
@safetestset "Test Big System Usage" include("bigsystem.jl")
3738
@safetestset "Depdendency Graph Test" include("dep_graphs.jl")

test/stream_connectors.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ eqns = [connect(n1m1.port_a, pipe.port_a)
128128

129129
@named sys = ODESystem(eqns, t)
130130

131-
eqns = [connect(fluid, n1m1.port_a)
131+
eqns = [domain_connect(fluid, n1m1.port_a)
132132
connect(n1m1.port_a, pipe.port_a)
133133
connect(pipe.port_b, sink.port)]
134134

0 commit comments

Comments
 (0)