fix: seed PNVO pipe series pressure

This commit is contained in:
Codex committed 2026-08-16 11:34:35 +00:00
1 parent 22b35b2945
commit cca9d1e883
4 files changed
+110 -37

No files matched your search

@@ -58,6 +58,58 @@ class PressureFlowSolverInitializationTests(unittest.TestCase):
"specialSeriesPressureSeed",
)
def test_pnvo_pnl0001_series_pressure_is_seeded_by_flow_balance(self) -> None:
medium = IdealGasMedium()
chamber = AmesimPnch023("source", medium, p0=15.3e6)
source_plug = AmesimPnpl01("source_closed")
valve = AmesimPnvo001SignalOpening(
"valve",
medium,
opening0=1.0,
)
valve.res.signal = 1.0
pipe = AmesimPnl0001("pipe", medium, p0=14.0e6)
storage_plug = AmesimPnpl01("storage_closed")
network = SimulationNetwork("pnvo-pnl0001-series")
for component in (chamber, source_plug, valve, pipe, storage_plug):
network.add_component(component)
network.connect("source_closed", "port_1", "source", "port_1")
network.connect("source", "port_2", "valve", "port_3")
network.connect("valve", "port_2", "pipe", "port_1")
network.connect("pipe", "port_2", "storage_closed", "port_1")
chamber.refresh_thermodynamic_ports()
pipe.refresh_thermodynamic_ports()
solver = PressureFlowSolver(network)
result = solver.solve()
self.assertTrue(result.success)
self.assertEqual(result.evaluations, 0)
self.assertGreater(valve.port_2.p, pipe.port_2.p)
self.assertLess(valve.port_2.p, chamber.port_2.p)
self.assertAlmostEqual(valve.port_2.p, pipe.port_1.p)
self.assertAlmostEqual(-valve.port_2.m_flow, pipe.port_1.m_flow)
previous_intermediate_pressure = valve.port_2.p
replay_pressure = 12.0e6
replay_temperature = 293.15
replay_mass = (
medium.density(replay_pressure, replay_temperature) * pipe.volume
)
pipe.state = VolumeState(
m=replay_mass,
U=replay_mass * medium.specific_internal_energy(replay_temperature),
)
pipe.refresh_thermodynamic_ports()
replay = solver.solve()
self.assertTrue(replay.success)
self.assertEqual(replay.evaluations, 0)
self.assertNotAlmostEqual(valve.port_2.p, previous_intermediate_pressure)
self.assertAlmostEqual(valve.port_2.p, pipe.port_1.p)
self.assertAlmostEqual(-valve.port_2.m_flow, pipe.port_1.m_flow)
def test_dead_ended_pnl00r_is_seeded_at_zero_flow_pressure(self) -> None:
medium = IdealGasMedium()
pipe = AmesimPnl00r("resistance", medium)