管网模型
基于管网组件,可以建立一系列的模型,进行求解
Model1
稳态模型,求解流量
模型图如下:
代码:
@named pump = Pump()
@named Pipe1 = SimplePipe(L=10.0)
@named valve = Valve(K = 1.0)
@named sink = Sink()
eqs = [
connect(sink.output, pump.input)
connect(pump.output, Pipe1.input)
connect(Pipe1.output, valve.input)
connect(valve.output, sink.input)
]
@named model = ODESystem(eqs, t, systems=[pump, Pipe1,valve,sink])
sys = structural_simplify(model)
display(sys)
u0 = [
sink.Pressure =>0.0
]
prob = ODAEProblem(sys, u0, (0, 10.0))
sol = solve(prob, Tsit5())
println(sol[pump.input.Flow])
Model3
稳态模型,采用哈兰德方法求管道摩擦因数,求解流量
模型图如下:
代码:
@named pump = PotentialEnergy(H=0.13)
@named Pipe1 = Pipe_Haaland(L=1.8,D=50.0E-3,ρ = 998.0,ϵ=0.2E-3,μ=1.0E-3)
@named valve = Valve(K = 1.6,D=50.0E-3)
@named source = Source()
@named sink = OutletPort(D=50.0E-3)
eqs = [
connect(source.port, pump.input)
connect(pump.output, Pipe1.input)
connect(Pipe1.output, valve.input)
connect(valve.output, sink.port)
]
@named model = ODESystem(eqs, t, systems=[pump, Pipe1,valve,sink,source])
sys = structural_simplify(model)
display(sys)
u0 = [
sink.Pressure =>0.0
source.Pressure => 0.0
]
prob = ODAEProblem(sys, u0, (0, 1.0))
sol = solve(prob, Tsit5())
println(sol[pump.input.Flow])
Model4
动态模型,向储水箱中灌水,求解水箱水量变化
模型图如下:
代码:
@named source = Source()
@named pump = Pump(a = 30,b=1500)
@named Pipe1 = SimplePipe(L=1.0,D=50.0E-3,ρ = 998.0,f=0.01)
@named sink = Reservior(S=1.0)
eqs = [
connect(source.port, pump.input)
connect(pump.output, Pipe1.input)
connect(Pipe1.output, sink.input)
]
@named model = ODESystem(eqs, t, systems=[pump, Pipe1,sink,source])
sys = structural_simplify(model)
display(sys)
u0 = [
sink.P => 0.0
sink.Volume =>0.0
source.Pressure => 0.0
]
prob = ODAEProblem(sys, u0, (0, 6000.0))
sol = solve(prob, Tsit5())
using Plots
plot(sol,vars=[sink.Volume])
Model5
动态模型,向储水箱中灌水,同时水箱出口打开,求解水箱水量变化
模型图如下:
代码:
@named source = Source()
@named pump = Pump(a = 30,b=1500)
@named Pipe1 = SimplePipe(L=10.0,D=50.0E-3,ρ = 998.0,f=0.01)
@named reservior = Reservior(S=1.0,isout=1)
@named Pipe2 = SimplePipe(L=10.0,D=50.0E-3,ρ = 998.0,f=0.01)
@named sink = OutletPort(D=50.0E-3)
eqs = [
connect(source.port, pump.input)
connect(pump.output, Pipe1.input)
connect(Pipe1.output, reservior.input)
connect(reservior.output, Pipe2.input)
connect(Pipe2.output, sink.port)
]
@named model = ODESystem(eqs, t, systems=[pump, Pipe1,Pipe2,sink,source,reservior])
sys = structural_simplify(model)
display(sys)
u0 = [
reservior.P => 0
reservior.Volume =>10.0
source.Pressure => 0.0
sink.Pressure => 0.0
]
prob = ODAEProblem(sys, u0, (0, 4000.0))
sol = solve(prob, Tsit5())
using Plots
p1 = plot(sol,vars=[reservior.Volume],ylims=[1,15])
p2 = plot(sol,vars=[reservior.input.Flow,reservior.output.Flow])
plot(p1,p2,layout=(2,1))