Skip to content

Commit 5f5a29c

Browse files
author
Brad Carman
committed
removing p_int and fixing u^2 issue
1 parent 197434e commit 5f5a29c

File tree

3 files changed

+57
-67
lines changed

3 files changed

+57
-67
lines changed

src/Hydraulic/IsothermalCompressible/components.jl

Lines changed: 46 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,17 @@ Caps a hydraulic port to prevent mass flow in or out.
1111
- `port`: hydraulic port
1212
"""
1313
@component function Cap(; p_int, name)
14-
pars = @parameters p_int = p_int
15-
16-
vars = @variables p(t) = p_int
14+
15+
vars = @variables p(t), [guess=0]
1716

1817
systems = @named begin
19-
port = HydraulicPort(; p_int = p_int)
18+
port = HydraulicPort()
2019
end
2120

2221
eqs = [port.p ~ p
2322
port.dm ~ 0]
2423

25-
ODESystem(eqs, t, vars, pars; name, systems)
24+
ODESystem(eqs, t, vars, []; name, systems)
2625
end
2726

2827
"""
@@ -36,16 +35,16 @@ Provides an "open" boundary condition for a hydraulic port such that mass flow `
3635
# Connectors:
3736
- `port`: hydraulic port
3837
"""
39-
@component function Open(; p_int, name)
40-
pars = @parameters p_int = p_int
38+
@component function Open(; name)
39+
pars = []
4140

4241
vars = @variables begin
43-
p(t) = p_int
44-
dm(t)
42+
p(t), [guess=0]
43+
dm(t), [guess=0]
4544
end
4645

4746
systems = @named begin
48-
port = HydraulicPort(; p_int = p_int)
47+
port = HydraulicPort()
4948
end
5049

5150
eqs = [port.p ~ p
@@ -75,12 +74,14 @@ Variable length internal flow model of the fully developed incompressible flow f
7574
- `port_a`: hydraulic port
7675
- `port_b`: hydraulic port
7776
"""
78-
@component function TubeBase(add_inertia = true, variable_length = true; p_int, area,
79-
length_int, head_factor = 1,
77+
@component function TubeBase(add_inertia = true, variable_length = true;
78+
area,
79+
length_int,
80+
head_factor = 1,
8081
perimeter = 2 * sqrt(area * pi),
81-
shape_factor = 64, name)
82+
shape_factor = 64,
83+
name)
8284
pars = @parameters begin
83-
p_int = p_int
8485
area = area
8586
length_int = length_int
8687
perimeter = perimeter
@@ -89,8 +90,8 @@ Variable length internal flow model of the fully developed incompressible flow f
8990
end
9091

9192
@variables begin
92-
x(t) = length_int
93-
ddm(t)
93+
x(t), [guess=length_int]
94+
ddm(t), [guess=0]
9495
end
9596

9697
vars = []
@@ -103,8 +104,8 @@ Variable length internal flow model of the fully developed incompressible flow f
103104
add_inertia && push!(vars, ddm)
104105

105106
systems = @named begin
106-
port_a = HydraulicPort(; p_int)
107-
port_b = HydraulicPort(; p_int)
107+
port_a = HydraulicPort()
108+
port_b = HydraulicPort()
108109
end
109110

110111
# let ----------------------
@@ -120,7 +121,7 @@ Variable length internal flow model of the fully developed incompressible flow f
120121
f = friction_factor(dm, area, d_h, μ, shape_factor)
121122
u = dm /* area)
122123

123-
shear = (1 / 2) * ρ * regPow(u, 2) * f * head_factor * (c / d_h)
124+
shear = (1 / 2) * ρ * u * abs(u) * f * head_factor * (c / d_h)
124125
inertia = if add_inertia
125126
(c / area) * ddm
126127
else
@@ -160,7 +161,7 @@ Constant length internal flow model discretized by `N` (`FixedVolume`: `N`, `Tub
160161
- `port_a`: hydraulic port
161162
- `port_b`: hydraulic port
162163
"""
163-
@component function Tube(N, add_inertia = true; p_int, area, length, head_factor = 1,
164+
@component function Tube(N, add_inertia = true; area, length, head_factor = 1,
164165
perimeter = 2 * sqrt(area * pi),
165166
shape_factor = 64, name)
166167
@assert(N>0,
@@ -170,7 +171,6 @@ Constant length internal flow model discretized by `N` (`FixedVolume`: `N`, `Tub
170171
return TubeBase(add_inertia,
171172
false;
172173
shape_factor,
173-
p_int,
174174
area,
175175
length_int = length,
176176
head_factor,
@@ -180,7 +180,6 @@ Constant length internal flow model discretized by `N` (`FixedVolume`: `N`, `Tub
180180

181181
#TODO: How to set an assert effective_length >= length ??
182182
pars = @parameters begin
183-
p_int = p_int
184183
area = area
185184
length = length
186185
head_factor = head_factor
@@ -191,8 +190,8 @@ Constant length internal flow model discretized by `N` (`FixedVolume`: `N`, `Tub
191190
vars = []
192191

193192
ports = @named begin
194-
port_a = HydraulicPort(; p_int)
195-
port_b = HydraulicPort(; p_int)
193+
port_a = HydraulicPort()
194+
port_b = HydraulicPort()
196195
end
197196

198197
pipe_bases = []
@@ -243,24 +242,23 @@ Reduces the flow from `port_a` to `port_b` by `n`. Useful for modeling parallel
243242
- `port_a`: full flow hydraulic port
244243
- `port_b`: part flow hydraulic port
245244
"""
246-
@component function FlowDivider(; p_int, n, name)
245+
@component function FlowDivider(; n, name)
247246

248247
#TODO: assert n >= 1
249248

250249
pars = @parameters begin
251250
n = n
252-
p_int = p_int
253251
end
254252

255253
vars = @variables begin
256-
dm_a(t)
257-
dm_b(t)
254+
dm_a(t), [guess=0]
255+
dm_b(t), [guess=0]
258256
end
259257

260258
systems = @named begin
261-
port_a = HydraulicPort(; p_int)
262-
port_b = HydraulicPort(; p_int)
263-
open = Open(; p_int)
259+
port_a = HydraulicPort()
260+
port_b = HydraulicPort()
261+
open = Open()
264262
end
265263

266264
eqs = [connect(port_a, port_b, open.port)
@@ -273,20 +271,18 @@ Reduces the flow from `port_a` to `port_b` by `n`. Useful for modeling parallel
273271
ODESystem(eqs, t, vars, pars; name, systems)
274272
end
275273

276-
@component function ValveBase(reversible = false; p_a_int, p_b_int, minimum_area = 0,
274+
@component function ValveBase(reversible = false; minimum_area = 0,
277275
area_int, Cd, Cd_reverse = Cd, name)
278276
pars = @parameters begin
279-
p_a_int = p_a_int
280-
p_b_int = p_b_int
281277
area_int = area_int
282278
Cd = Cd
283279
Cd_reverse = Cd_reverse
284280
minimum_area = minimum_area
285281
end
286282

287283
systems = @named begin
288-
port_a = HydraulicPort(; p_int = p_a_int)
289-
port_b = HydraulicPort(; p_int = p_b_int)
284+
port_a = HydraulicPort()
285+
port_b = HydraulicPort()
290286
end
291287

292288
vars = @variables begin
@@ -339,24 +335,22 @@ Valve with `area` input and discharge coefficient `Cd` defined by https://en.wik
339335
- `port_b`: hydraulic port
340336
- `area`: real input setting the valve `area`. When `reversible = true`, negative input reverses flow direction, otherwise a floor of `minimum_area` is enforced.
341337
"""
342-
@component function Valve(reversible = false; p_a_int, p_b_int,
338+
@component function Valve(reversible = false;
343339
area_int, Cd, Cd_reverse = Cd,
344340
minimum_area = 0,
345341
name)
346342
pars = @parameters begin
347-
p_a_int = p_a_int
348-
p_b_int = p_b_int
349343
area_int = area_int
350344
Cd = Cd
351345
Cd_reverse = Cd_reverse
352346
minimum_area = minimum_area
353347
end
354348

355349
systems = @named begin
356-
port_a = HydraulicPort(; p_int = p_a_int)
357-
port_b = HydraulicPort(; p_int = p_b_int)
350+
port_a = HydraulicPort()
351+
port_b = HydraulicPort()
358352
area = RealInput()
359-
base = ValveBase(reversible; p_a_int, p_b_int, area_int, Cd, Cd_reverse,
353+
base = ValveBase(reversible; area_int, Cd, Cd_reverse,
360354
minimum_area)
361355
end
362356

@@ -366,27 +360,26 @@ Valve with `area` input and discharge coefficient `Cd` defined by https://en.wik
366360
connect(base.port_b, port_b)
367361
base.area ~ area.u]
368362

369-
ODESystem(eqs, t, vars, pars; name, systems, defaults = [area.u => area_int])
363+
ODESystem(eqs, t, vars, pars; name, systems)
370364
end
371365

372-
@component function VolumeBase(; p_int, x_int = 0, area, dead_volume = 0, Χ1 = 1, Χ2 = 1,
366+
@component function VolumeBase(; x_int = 0, area, dead_volume = 0, Χ1 = 1, Χ2 = 1,
373367
name)
374368
pars = @parameters begin
375-
p_int = p_int
376369
x_int = x_int
377370
area = area
378371
dead_volume = dead_volume
379372
end
380373

381374
systems = @named begin
382-
port = HydraulicPort(; p_int)
375+
port = HydraulicPort()
383376
end
384377

385378
vars = @variables begin
386379
x(t) = x_int
387-
dx(t)
388-
rho(t) = liquid_density(port)
389-
drho(t)
380+
dx(t), [guess=0]
381+
rho(t), [guess = liquid_density(port)]
382+
drho(t), [guess=0]
390383
vol(t) = dead_volume + area * x_int
391384
end
392385

@@ -426,8 +419,8 @@ Fixed fluid volume.
426419
end
427420

428421
vars = @variables begin
429-
rho(t) = liquid_density(port)
430-
drho(t)
422+
rho(t), [guess = liquid_density(port)]
423+
drho(t), [guess = 0]
431424
end
432425

433426
# let
@@ -505,8 +498,8 @@ See also [`FixedVolume`](@ref), [`DynamicVolume`](@ref)
505498
end
506499

507500
systems = @named begin
508-
port = HydraulicPort(; p_int = p)
509-
flange = MechanicalPort(; f, v = dx)
501+
port = HydraulicPort()
502+
flange = MechanicalPort()
510503
end
511504

512505
eqs = [

src/Hydraulic/IsothermalCompressible/sources.jl

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Fixed pressure source
4343
vars = []
4444

4545
systems = @named begin
46-
port = HydraulicPort(; p_int = p)
46+
port = HydraulicPort()
4747
end
4848

4949
eqs = [
@@ -66,15 +66,12 @@ input pressure source
6666
- `port`: hydraulic port
6767
- `p`: real input
6868
"""
69-
@component function Pressure(; p_int, name)
70-
pars = @parameters begin
71-
p_int = p_int
72-
end
73-
69+
@component function Pressure(; name)
70+
pars = []
7471
vars = []
7572

7673
systems = @named begin
77-
port = HydraulicPort(; p_int)
74+
port = HydraulicPort()
7875
p = RealInput()
7976
end
8077

src/Hydraulic/IsothermalCompressible/utils.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import ChainRulesCore
22

3-
regPow(x, a, delta = 0.01) = x * (x * x + delta * delta)^((a - 1) / 2);
3+
regPow(x, a, delta = 0.01) = x * (x * x + delta * delta)^((a - 1) / 2);
44
regRoot(x, delta = 0.01) = regPow(x, 0.5, delta)
55

66
"""
@@ -16,7 +16,7 @@ Connector port for hydraulic components.
1616
- `p`: [Pa] gauge total pressure
1717
- `dm`: [kg/s] mass flow
1818
"""
19-
@connector function HydraulicPort(; p_int, name)
19+
@connector function HydraulicPort(; name)
2020
pars = @parameters begin
2121
ρ
2222
β
@@ -28,11 +28,11 @@ Connector port for hydraulic components.
2828
end
2929

3030
vars = @variables begin
31-
p(t) = p_int
32-
dm(t), [connect = Flow]
31+
p(t), [guess = 0]
32+
dm(t), [guess = 0, connect = Flow]
3333
end
3434

35-
ODESystem(Equation[], t, vars, pars; name, defaults = [dm => 0])
35+
ODESystem(Equation[], t, vars, pars; name)
3636
end
3737

3838
"""
@@ -64,14 +64,14 @@ Fluid parameter setter for isothermal compressible fluid domain. Defaults given
6464
end
6565

6666
vars = @variables begin
67-
dm(t), [connect = Flow]
67+
dm(t), [guess = 0, connect = Flow]
6868
end
6969

7070
eqs = [
7171
dm ~ 0
7272
]
7373

74-
ODESystem(eqs, t, vars, pars; name, defaults = [dm => 0])
74+
ODESystem(eqs, t, vars, pars; name)
7575
end
7676

7777
f_laminar(shape_factor, Re) = shape_factor * regPow(Re, -1, 0.1) #regPow used to avoid dividing by 0, min value is 0.1

0 commit comments

Comments
 (0)