FluidSystemTest
Usage
FluidSystemTest(tube_area=0.01, add_inertia=true, tube_perimeter=2*sqrt(tube_area*pi))
Parameters:
Name | Description | Units | Default value |
---|---|---|---|
tube_area | m2 | 0.01 | |
add_inertia | – | true |
Behavior
Behavior of this component cannot be rendered because it includes path
variables.
Source
dyad
test component FluidSystemTest
signal = BlockComponents.Step(height=1e6, start_time=0.5)
src = BoundaryPressure()
vol = FixedVolume(vol=10.0, p0=0.0)
tube = TubeBase(area=tube_area, head_factor=1, length=50, shape_factor=64, add_inertia=add_inertia, perimeter=2*sqrt(tube_area*pi), m_flow0=0)
parameter tube_area::Area = 0.01
parameter add_inertia::Boolean = true
final parameter tube_perimeter::Length = 2*sqrt(tube_area*pi)
path medium::AbstractMedium = IsothermalCompressible(bulk_modulus=1e9, let_gas=false)
relations
connect(signal.y, src.p)
connect(src.port, tube.port_a)
connect(tube.port_b, vol.port)
continuity(medium, vol.port.medium)
metadata {
"Dyad": {
"tests": {
"case1": {
"stop": 2,
"atol": {"vol.rho": 0.001, "vol.port.p": 1, "tube.m_flow": 0.001},
"expect": {"signals": ["vol.rho", "vol.port.p", "tube.m_flow"]}
}
}
}
}
end
Flattened Source
dyad
test component FluidSystemTest
signal = BlockComponents.Step(height=1e6, start_time=0.5)
src = BoundaryPressure()
vol = FixedVolume(vol=10.0, p0=0.0)
tube = TubeBase(area=tube_area, head_factor=1, length=50, shape_factor=64, add_inertia=add_inertia, perimeter=2*sqrt(tube_area*pi), m_flow0=0)
parameter tube_area::Area = 0.01
parameter add_inertia::Boolean = true
final parameter tube_perimeter::Length = 2*sqrt(tube_area*pi)
path medium::AbstractMedium = IsothermalCompressible(bulk_modulus=1e9, let_gas=false)
relations
connect(signal.y, src.p)
connect(src.port, tube.port_a)
connect(tube.port_b, vol.port)
continuity(medium, vol.port.medium)
metadata {
"Dyad": {
"tests": {
"case1": {
"stop": 2,
"atol": {"vol.rho": 0.001, "vol.port.p": 1, "tube.m_flow": 0.001},
"expect": {"signals": ["vol.rho", "vol.port.p", "tube.m_flow"]}
}
}
}
}
end
Test Cases
This is setup code, that must be run before each test case.
julia
using HydraulicComponents
using ModelingToolkit, OrdinaryDiffEqDefault
using Plots
using CSV, DataFrames
snapshotsdir = joinpath(dirname(dirname(pathof(HydraulicComponents))), "test", "snapshots")
"/home/actions-runner-10/.julia/packages/HydraulicComponents/EtOYG/test/snapshots"
Test Case case1
julia
@mtkbuild model_case1 = FluidSystemTest()
u0_case1 = []
prob_case1 = ODEProblem(model_case1, u0_case1, (0, 2))
sol_case1 = solve(prob_case1)
retcode: Unstable
Interpolation: 3rd order Hermite
t: 1-element Vector{Float64}:
0.0
u: 1-element Vector{Vector{Float64}}:
[0.0, 9968.99975975, 0.0, 0.0]
julia
df_case1 = DataFrame(:t => sol_case1[:t], :actual => sol_case1[model_case1.vol.rho])
dfr_case1 = try CSV.read(joinpath(snapshotsdir, "FluidSystemTest_case1_sig0.ref"), DataFrame); catch e; nothing; end
plt = plot(sol_case1, idxs=[model_case1.vol.rho], width=2, label="Actual value of vol.rho")
if !isnothing(dfr_case1)
scatter!(plt, dfr_case1.t, dfr_case1.expected, mc=:red, ms=3, label="Expected value of vol.rho")
end
plt
julia
df_case1 = DataFrame(:t => sol_case1[:t], :actual => sol_case1[model_case1.vol.port.p])
dfr_case1 = try CSV.read(joinpath(snapshotsdir, "FluidSystemTest_case1_sig1.ref"), DataFrame); catch e; nothing; end
plt = plot(sol_case1, idxs=[model_case1.vol.port.p], width=2, label="Actual value of vol.port.p")
if !isnothing(dfr_case1)
scatter!(plt, dfr_case1.t, dfr_case1.expected, mc=:red, ms=3, label="Expected value of vol.port.p")
end
plt
julia
df_case1 = DataFrame(:t => sol_case1[:t], :actual => sol_case1[model_case1.tube.m_flow])
dfr_case1 = try CSV.read(joinpath(snapshotsdir, "FluidSystemTest_case1_sig2.ref"), DataFrame); catch e; nothing; end
plt = plot(sol_case1, idxs=[model_case1.tube.m_flow], width=2, label="Actual value of tube.m_flow")
if !isnothing(dfr_case1)
scatter!(plt, dfr_case1.t, dfr_case1.expected, mc=:red, ms=3, label="Expected value of tube.m_flow")
end
plt
Related
Examples
Experiments
Analyses
Tests